插入列公式变更错误问题
本帖最后由 Ellia.Duan 于 2024-1-8 11:50 编辑产品:GcExcel
版本:V6.1.4
问题编号:DOCXLS-7267
需求编号:DOCXLS-9599
之前发过一个帖子,关于新增列公式变更的问题,地址如下:
https://gcdn.grapecity.com.cn/showtopic-159293-1-176.html
这个应该是一个bug,因为我发现在插入行的时候,即使配置了一个不存在的sheet的引用,公式变更也不会出错,但是,插入列就会变错,
同时Excel中的表现形式,即使是配置了一个不存在sheet的引用,在插行列的时候公式都不会变错,这个问题还请你们调查一下是不是BUG,或者说在新版本上是否有解决?
您好,问题已收到,我们将继续调研下这个问题。 您好,我在v6.2.5版本做了以下测试:
1、创建sheet“CIT.WP00.0_调整汇总”
2、设置公式“=CIT.WP01.1_预提费用!F7”
3、创建sheet“CIT.WP01.1_预提费用”
4、sheet增加列
发现公式引用发生变化,从F7变为G7 ,如下图所示:
其次,按照您的描述,为sheet增加行,但是公式引用也发生了变化,如下图所示:
但是您提到了在Excel中,没有公式引用问题,所以我将继续跟踪此问题。
嗯,谢谢,据我了解,你们有一个机制,是当单元格引用了一个不存在的报表单元格的时候,用getPrecedent()方法获取单元格引用关系时,此时结果中引用公式内的报表名称会变成当前的报表名称,不知道是不是这个引起的,但是按道理,getFormula本身拿到的公式不应该变成一个错误的公式 有这个可能性,已提交给开发团队深入调研这个问题。 您好,调研结果如下:
创建引用其他工作表的公式时,会创建一些引用索引。如果引用的工作表不存在,则在插入过程中剪切到新列的公式将无法通过引用索引更新其引用。(不存在工作表,没有引用索引。
由于现有体系结构仍然需要工作表存在才能使公式正常运行,因此建议在添加公式之前将引用的工作表放在适当的位置。
如果需要在创建工作表本身之前添加引用不存在的工作表的公式,则可以暂时禁用计算引擎,然后在处理所有更改后重新启用。
Workbook workbook = new Workbook();
IWorksheet workSheet = workbook.getWorksheets().get(0);
workSheet.setName("CIT.WP00.0_调整汇总");
workbook.setEnableCalculation(false);
workSheet.getRange(1, 1).setFormula("CIT.WP01.1_预提费用!F7");
IWorksheet worksheet1 = workbook.getWorksheets().addAfter(workSheet);
worksheet1.setName("CIT.WP01.1_预提费用");
workbook.setEnableCalculation(true);
String sourceFormula = workSheet.getRange(1, 1).getFormula();
workSheet.getRange(1, 1).getEntireColumn().insert();
String changeFormula = workSheet.getRange(1, 2).getFormula();
System.out.print(sourceFormula+','+changeFormula);
结果如下:
那这个标记的设置,必须要成对一起使用,还是只设置false,公式也会跟着行列的变更正确变化呢? 需要成对使用,如果只设置false,当公式引用的单元格发生变化时,公式将不更新。 好的 好的,有问题随时沟通。