现在有个需求,用户自定义个有外部引用的模板:大体上是某个单元格引用了c:\\xxxxx\a.xls.A1内容,然后我们用npoi导出这个excel,中间需要计算所有单元格内容EvaluateAll()结果方法报错:无法解析a.xls(某个外部引用),需要设置环境
然后我百度,加了
HSSFFormulaEvaluator.SetupEnvironment(workbookNames, evaluators);
iFormulaEvaluator.SetupReferencedWorkbooks(workbooks);
将所有的外部引用的文件路径/文件名传了进去
结果发现,如果被引用excel和当前excel在同一级目录,则可以计算所有单元格内容,如果不是在同一级目录,则会报错:无法解析a.xls(某个外部引用),c:\\xxxxx\a.xls.A1;c:\\xxxxx\b.xls.A1;c:\\xxxxx\c.xls.A1是有效的,还是无法解析,但是我穿进去的外部引用路径之类的他还说是有效的
请问有没有大神用过npoi计算公式,有外部引用的,你们是怎么做的呢?
另外:
我们软件可以导出一个带有数据的excelA。客户希望在他们的excelB中自动填写一些我们的数据,我的想法就是将他们的excelB的sheet添加到我们的excelA里,然后在他们的sheet里写公式引用我们的数据,结果就是现在这样,因为他们的excelB中有外部引用,而我们软件又有计算所有单元格值,所以出错,如果这条路走不通的话请问大家还有其他建议吗?
如果是我做的话,NPOI只会用于导出数据,需要进行EXCEL自动化的部分我会使用 Excel VBA 或者VSTS进行开发。
这种情况建议你咨询Excel高手,或者你花些时间学点EXCEL。
x谢谢大叔,您的指引让我找到了新的方向
..我现在的解决方法是不走EvaluateAll的方法,目前没发现问题..好像打开excel的时候它也会自己计算一下公式
是的,EXCEL在打开时,会对公式进行自动计算。
这其实也可以算是一种业务熟悉。
如果你要开发EXCEL相关的,对EXCEL的了解越多越好。
其实EXCEL啥都能做的,除了不能生孩子外。