现在的位置: 首页 > 综合 > 正文

采用APACHE POI操作EXCEL文件–计算式调用另一文件

2014年12月03日 ⁄ 综合 ⁄ 共 1691字 ⁄ 字号 评论关闭

http://blog.sina.com.cn/s/blog_6151984a0100sczi.html

  • 测试环境:

当前EXCEL文件: workbook.xls

假设一个CELL的计算式如下:

 ='C:\testFB\[workbook1.xls]Test2'!B2+'C:\testFB\[workbook1.xls]测试1'!C3

 

 

  • 调用步骤:

1.不仅要打开当前EXCEL文档(本例是workbook.xls),也要打开所有计算式FORMULA引用的EXCEL文档(workbook1.xls)

不仅要为当前EXCEL文档建立HSSFFormulaEvaluator对象,也要为所有计算式FORMULA引用的EXCEL文档建立HSSFFormulaEvaluator对象

  String ROOT = "d:\\testFB\\";

  String[] files = {"workbook.xls","workbook1.xls"};

 

  HSSFWorkbook[] wbs = new HSSFWorkbook[files.length];
  HSSFFormulaEvaluator[] evaluators =new HSSFFormulaEvaluator[files.length];
 

  FileInputStream fileIn = null;
  FileOutputStream fileOut = null;       
  for(int i=0;i<files.length;i++){
     fileIn = new FileInputStream(files[i]);
     POIFSFileSystem fs = new POIFSFileSystem(fileIn);
     wbs[i] = new HSSFWorkbook(fs);
     evaluators[i] = new HSSFFormulaEvaluator(wbs[i]);
  }

 

 

2. 设置Evaluator对象环境

HSSFFormulaEvaluator.setupEnvironment(files, evaluators);  

 

3. 对计算式进行Evalutor计算

 

  for(int i=0;i<wbs[0].getNumberOfSheets();i++){
        sheet1 = wbs[0].getSheetAt(i);
        for (Cell cell : row) {
            switch(cell.getCellType()) {
                case Cell.CELL_TYPE_STRING:
                  System.out.println("CELL_TYPE_STRING |"+cell.getRichStringCellValue().getString());
                  break;
                case Cell.CELL_TYPE_NUMERIC:
                  if(DateUtil.isCellDateFormatted(cell)) {
                    System.out.println("CELL_TYPE_NUMERIC |"+cell.getDateCellValue());
                  } else {
                    System.out.println("CELL_TYPE_NUMERIC |"+cell.getNumericCellValue());
                  }
                  break;
                case Cell.CELL_TYPE_BOOLEAN:
                  System.out.println("CELL_TYPE_BOOLEAN |"+cell.getBooleanCellValue());
              

抱歉!评论已关闭.