zoukankan      html  css  js  c++  java
  • AX2009使用Microsoft.Dynamics.AX.Fim导出EXCEL

    最近老是跟Excel过不去了,刚整完NPOI,在捣鼓AX2012时发现系统的一份财务报表是导出Excel的,而且这份报表导出Excel的方法不是使用Office的COM组件,经过代码研究,这份报表使用的是AX2012新增的一个Microsoft.Dynamics.AX.Fim.dll链接库

    在AX2012中自己写了个Job,测试一下用这个Dll导出Excel试试

    static void spreadsheets(Args _args)
    {
        FileName                                                filename;
        Microsoft.Dynamics.AX.Fim.Spreadsheets.Spreadsheet      spreadsheets;
        Microsoft.Dynamics.AX.Fim.Spreadsheets.ColumnProperties columnProperties;
        Microsoft.Dynamics.AX.Fim.Spreadsheets.CellProperties   cellProperties;
    
        ;
        filename=@"D:	est1.xlsx";
        new FileIOPermission(filename, "rw").assert();
        spreadsheets    = new Microsoft.Dynamics.AX.Fim.Spreadsheets.Spreadsheet();
        columnProperties= new Microsoft.Dynamics.AX.Fim.Spreadsheets.ColumnProperties();
        cellProperties  = new Microsoft.Dynamics.AX.Fim.Spreadsheets.CellProperties();
    
        if(spreadsheets.CreateSpreadsheet(filename))
        {
            columnProperties.set_Width(10);
            spreadsheets.InstantiateColumn(columnProperties);
    
            cellProperties.set_FontSize(Microsoft.Dynamics.AX.Fim.Spreadsheets.CellFontSize::Size9);
            cellProperties.set_Bold(true);
            cellProperties.set_BorderBottom(Microsoft.Dynamics.AX.Fim.Spreadsheets.CellBottomBorderFormat::Thin);
            spreadsheets.AddStringCellToWorkbook("A",cellProperties);
            spreadsheets.AddStringCellToWorkbook("B",cellProperties);
            spreadsheets.AddStringCellToWorkbook("C",cellProperties);
            spreadsheets.AddStringCellToWorkbook("D",cellProperties);
            spreadsheets.MoveToNextRowInWorkbook();
            spreadsheets.AddStringCellToWorkbook("A1",cellProperties);
            spreadsheets.AddStringCellToWorkbook("B1",cellProperties);
            spreadsheets.AddStringCellToWorkbook("C1",cellProperties);
            spreadsheets.AddStringCellToWorkbook("D1",cellProperties);
            spreadsheets.WriteFile();
            spreadsheets.OpenExcelSpreadsheet();
            spreadsheets.Dispose();
            info("Done!");
        }
    }

    正常导出。

    既然是通过Dll来导出Excel,那就是试将这个Dll移植到AX2009上试试,在AX2012的Client安装目录Bin文件夹中找到Microsoft.Dynamics.AX.Fim.dll这个文件,复制这个文件到AX2009的Client安装目录Bin文件夹中,然后在AX2009中添加这个Dll文件的引用

    将在AX2012测试的Job也移植到AX2009上,编译完成

    运行,没有产生Excel文件!

    是什么原因呢?

    跟踪一下

    这个Job在运行到if(spreadsheets.CreateSpreadsheet(filename))这句时返回了False

    奇怪了,在AX2012里面正常运行,移植过来就运行不了了。。

    既然在AX2009里面找不到原因,那就换个思路,将这个Dll放到C#里面试试

    也同样写了个小测试程序

    编译也正常

    运行就出错了,也是CreateSpreadsheet()这个方法出错,不过这回有显示错误内容了

    少了DocumentFormat.OpenXML这个程序集,经过一番查询,原来是需要安装OpenXMLSDK

    下载了Open XML SDK 2.0 for Microsoft Office这个安装包后,安装完再运行就正常了

    原来这个Dll链接库只是个马甲而已,真正起作用的是OpenXMLSDK,这个Dll的作用是将一些OpenXMLSDK操作Exce的l功能简单封装一下,方便在AX中调用而已

    经过测试,这个Dll的功能只能满足一般的导出数据,设置一些简单的格式和页面设置,如果要设置合并单元格之类的就做不了

    看来这个Dll也只是微软做出来的一个半成品而已,用来代替Npoi好像还不是不行

    但是用来做数据导出还是足够的。

    另外经过测试,这货最多只支持26列(⊙﹏⊙)b

    难怪2012财务报表最多支持25列~~

  • 相关阅读:
    lxml.etree 教程5:Using XPath to find text
    .Net程序员学习Linux最简单的方法
    海南航空宁波到重庆的"变态"机票
    《帮我买单》帮我买单的故事
    VS 2005 Beta2 Team版正在下载中
    安家博客园
    标记:Oracle里面的过程两种参数的不同
    今天搞VS 2005搞了半天没真正搞出个什么名堂来
    Oracle中INSTR方法
    今天可算把VS 2005 Beta2安装上了,赶紧体会体会
  • 原文地址:https://www.cnblogs.com/rumenren/p/3502248.html
Copyright © 2011-2022 走看看