采用APACHE POI操作EXCEL文件--计算式调用另一文件
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]; ??FileInputStream fileIn = null; |
?
2. 設置Evaluator對象環境
| HSSFFormulaEvaluator.setupEnvironment(files, evaluators); ? |
?
3. 對計算式進行Evalutor計算
?
| ??for(int i=0;i<wbs[0].getNumberOfSheets();i++){ ????????????????? System.out.print("Cell.CELL_TYPE_FORMULA |"+cell.getCellFormula()+"|");?? ????????????????? break; |
?
?
- ?原理
?
- 所以問題的關鍵是:
從CELL的FORMULA計算式獲得何種格式的文件名,而POI系統會以該格式的文件名從 Formula Evaluator Environment獲取對應的Evaluator
?
?
現在存在的問題是,EXCEL CELL的計算式與POI 解析出的計算式是不同的
現象1:
當前文件和計算式調用文件在同一路徑下時,POI是忽略路徑的
| ?EXCEL文件 | ?POI解析出的FORMULA |
| ?='C:\testFB\[workbook1.xls]Test2'!B2+'C:\testFB\[workbook1.xls]測試1'!C3 | ?'[workbook1.xls]Test2'!B2+'[workbook1.xls]測試1'!C3 |
現象2:
當前文件和計算式調用文件不在同一路徑下時,POI會獲取路徑,但路徑顯示方式比較特殊
POI沒解析出'C:'
POI沒解析出'\'或'/',而代之以ASCII碼2()和3()
| EXCEL文件 | ?POI解析出的FORMULA |
| ?='C:\testFB1\[workbook1.xls]Test2'!B2+'C:\testFB1\[workbook1.xls]測試1'!C3 | '[testFB1workbook1.xls]Test2'!B2+'[testFB1workbook1.xls]測試1'!C3 |
?由于新浪博客有些特殊字符不能顯示,下面附上截圖.
?
現象1的解決辦法:
因為POI解析出的文件名是不含路徑的,根據原理,那么在Formula Evaluator Environment中的文件名必須與之匹配,不含路徑
| String[] files = {"workbook.xls","workbook1.xls"}; ... HSSFFormulaEvaluator.setupEnvironment(files, evaluators);??? |
?
現象2的解決辦法:
因為POI解析出的文件名包含路徑,但不包含驅動器名,且路徑斜杠變成ASCII碼2和3
根據原理,那么在Formula Evaluator Environment中的文件名必須與之匹配,所以最好先通過cell.getCellFormula()獲知POI解析出FORMULA,然后把文件名設置入Environment.
例我們System.out.println(cell.getCellFormula())得到如下:
| '[testFB1workbook1.xls]Test2'!B2+'[testFB1workbook1.xls]測試1'!C3? |
則我們需要設置Environment如下:
| String[] filePaths = {"[testFBworkbook.xls","[testFB1workbook1.xls"}; ... HSSFFormulaEvaluator.setupEnvironment(filePaths,evaluators); ? |
而且我們要把文件存在C:盤下,不要存在其他盤下
?
?由于新浪博客有些特殊字符不能顯示,下面附上截圖.
?
?
?
總結
以上是生活随笔為你收集整理的采用APACHE POI操作EXCEL文件--计算式调用另一文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jaxb int convert to
- 下一篇: java操作poi如何更改excel中的