问题描述
我正在编写一种工具来简化Excel的某些电子表格工作。我有需要以前文件的Excel文件。我有一些单元格具有引用其他工作簿的公式。例如:PERIOD 2.xls需要PERIOD 1.xls。据我了解,这意味着我需要添加此参考并对其进行评估。下面是我的代码片段,展示了我如何做这一切:
public PeriodFileWriter(File currentPeriodFile) throws IOException,InvalidFormatException {
Files.copy(templateFile.toPath(),currentPeriodFile.toPath(),StandardcopyOption.REPLACE_EXISTING);
referencedFiles = new HashMap<>();
loadCurrentWorkbook(currentPeriodFile);
loadPrevIoUsWorkbook();
}
private void loadCurrentWorkbook(File currentPeriodFile) throws IOException {
this.currentPeriodFile = currentPeriodFile;
this.currInputStream = new FileInputStream(currentPeriodFile);
this.currWorkbook = new hssfWorkbook(currInputStream);
this.currEvaluator = currWorkbook.getCreationHelper().createFormulaEvaluator();
referencedFiles.put(currentPeriodFile.getName(),currEvaluator);
}
private void loadPrevIoUsWorkbook() throws IOException {
String prevFilePath = templateFile.getParent() + "\\" + getPrevIoUsFilename();
prevIoUsPeriodFile = new File(prevFilePath);
prevInputStream = new FileInputStream(prevIoUsPeriodFile);
prevWorkbook = new hssfWorkbook(prevInputStream);
prevEvaluator = prevWorkbook.getCreationHelper().createFormulaEvaluator();
referencedFiles.put(getPrevIoUsFilename(),prevEvaluator);
currEvaluator.setupReferencedWorkbooks(referencedFiles);
currEvaluator.evaluateall();
}
public void updateYTDBudget(String sheetName) {
String prevFileName = getPrevIoUsFilename();
String cellFormula = String.format("'[%s]%s'!%s + E56",prevFileName,sheetName,"H56");
Sheet sheet = getWorkbook().getSheet(sheetName);
ExcelUtil.setCellFormula(sheet,"H56",cellFormula);
}
但是,当我运行代码时,我得到了:
Exception in thread "main" java.lang.RuntimeException: No external workbook with name 'PERIOD 1.xls'
at org.apache.poi.hssf.model.LinkTable.getExternalSheetIndex(LinkTable.java:445)
at org.apache.poi.hssf.model.InternalWorkbook.getExternalSheetIndex(InternalWorkbook.java:1571)
at org.apache.poi.hssf.usermodel.hssfEvaluationWorkbook.getSheetExtix(hssfEvaluationWorkbook.java:291)
at org.apache.poi.hssf.usermodel.hssfEvaluationWorkbook.get3DReferencePtg(hssfEvaluationWorkbook.java:88)
at org.apache.poi.ss.formula.FormulaParser.createAreaRefParseNode(FormulaParser.java:984)
at org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:576)
at org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:322)
at org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1548)
at org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1506)
at org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1493)
at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1867)
at org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1994)
at org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1978)
at org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1935)
at org.apache.poi.ss.formula.FormulaParser.intersectionExpression(FormulaParser.java:1908)
at org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1889)
at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:2036)
at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:170)
at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:190)
at org.apache.poi.hssf.model.hssfFormulaParser.parse(hssfFormulaParser.java:79)
at org.apache.poi.hssf.usermodel.hssfCell.setCellFormulaimpl(hssfCell.java:542)
at org.apache.poi.ss.usermodel.CellBase.setCellFormula(CellBase.java:132)
at brilam.qboTool.ExcelUtil.setCellFormula(ExcelUtil.java:34)
at brilam.qboTool.PeriodFileWriter.updateYTDBudget(PeriodFileWriter.java:87)
at brilam.qboTool.App.main(App.java:28)
我当前正在使用此
:<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)