zoukankan      html  css  js  c++  java
  • AX2009使用NPOI导出EXCEL2007

    既然说到NPOI可以导出2007版本的EXCEL,那就随便也介绍一下如何导出

    其实2007版本的EXCEL也并不神秘,将xlsx扩展名修改成zip,然后再打开就很清楚了,简单来说就是一堆的xml文件通过zip压缩,修改扩展名为xlsx就是2007版本的excel了

    所以要生成2007版本的excel,就需要添加操作xml和zip的类

    将下载得到的DLL文件共5个,还有1个XML文件复制到AX的客户端安装目录BIN下,DLL文件全部添加引用

     

    添加完成就可以开始使用了

    整个调用方法跟2003版本几乎一致,就是初始化workbook时使用的2007版本的class(红色部分)

     1 static void NPOI_ExportExcel2007(Args _args)
     2 {
     3     System.IO.FileStream                file;
     4     NPOI.XSSF.UserModel.XSSFWorkbook    workBook= new NPOI.XSSF.UserModel.XSSFWorkbook();
     5     NPOI.SS.UserModel.ISheet            sheet=workBook.CreateSheet("NPOISheet");
     6     NPOI.SS.UserModel.IRow              row;
     7     NPOI.SS.UserModel.ICell             cell;
     8 
     9     InventTable                         inventTable;
    10     SysDictTable                        dictTable = new SysDictTable(inventTable.TableId);
    11     SysDictField                        dictField;
    12     FieldId                             fieldId;
    13     int                                 i,j,k,t;
    14     str                                 fieldValue;
    15     Types                               a;
    16     ;
    17     t=timenow();
    18     while select inventTable
    19     {
    20         row=sheet.CreateRow(i);
    21         for(j=1;j<dictTable.fieldCnt();j++)
    22         {
    23             cell=row.CreateCell(j-1);
    24             fieldId=dictTable.fieldCnt2Id(j);
    25             a=typeof(inventTable.(fieldId));
    26             dictField=dictTable.fieldObject(fieldId);
    27             if(a!=types::BLOB && a!=types::Class && a!=types::Container && a!=types::void && a!=types::Record)
    28             {
    29                 for(k=1;k<=dictField.arraySize();k++)
    30                     fieldValue=queryvalue(inventTable.(fieldId2Ext(fieldId,k)));
    31 
    32             }
    33             cell.SetCellValue(fieldValue);
    34         }
    35         i++;
    36     }
    37 
    38     file =new System.IO.FileStream("D:\test.xlsx", System.IO.FileMode::Create,System.IO.FileAccess::ReadWrite);
    39     workBook.Write(file);
    40     file.Close();
    41     info("export2007 use time:"+int2str(timenow()-t)+"s");
    42 }

     最终导出时间比2003版本多1秒,但文件大小是2003版本的1/4

  • 相关阅读:
    大数据课上用spark
    Python 机器学习及实践 Codeing 模型实用技巧 (特征提升 模型正则化 模型检测 超参数搜索)
    学习网站保存
    Tensorflow + Keras 深度学习人工智能实践应用 Linux Ubuntu 中 安装Tensroflow 与 Keras
    卡尔曼滤波的总结
    MATLAB在一张图上画出多条曲线
    数据库的索引和优化
    线程进程
    static关键字
    单例模式
  • 原文地址:https://www.cnblogs.com/rumenren/p/3152116.html
Copyright © 2011-2022 走看看