找回密码
 立即注册

QQ登录

只需一步,快速开始

xtm_320

注册会员

5

主题

17

帖子

48

积分

注册会员

积分
48
xtm_320
注册会员   /  发表于:2022-12-20 21:48  /   查看:2974  /  回复:11
1金币
本帖最后由 Clark.Pan 于 2023-1-10 12:02 编辑

请教一个关于GC Excel后台插入列的问题

问题描述:我有2个sheet,sheet1,sheet2 ,其中sheet1中配置了引用sheet2单元格的公式,在sheet1中配置公式的单元格前一列插入1列,然后再获取公式变更时,发现sheet1中配置的引用公式变了,但是正常情况是不应该变的,因为sheet2并没有列的变化,代码如下,麻烦看一下是否有问题:

Workbook workbook = new Workbook();
IWorksheet workSheet = workbook.getWorksheets().get(0);
workSheet.setName("CIT.WP00.0_调整汇总");
workSheet.getRange(1, 1).setFormula("CIT.WP01.1_预提费用!F7");
IWorksheet worksheet1 = workbook.getWorksheets().addAfter(workSheet);
worksheet1.setName("CIT.WP01.1_预提费用");
String sourceFormula = workSheet.getRange(1, 1).getFormula();
workSheet.getRange(1, 1).getEntireColumn().insert();
String changeFormula = workSheet.getRange(1, 2).getFormula();
if(!sourceFormula.equals(changeFormula)){
    logger.info(" insertColumnDemo error");
}
image.png832623290.png 如图执行结果,发现引用公式变了,这里应该不变才对~
感谢

最佳答案

查看完整内容

经过调研,发现您公式使用有误,公式引用需要引用一个已经存在的sheet,其中 您创建公式时还未生成"CIT.WP01.1_预提费用"此 sheet ,所以导致了上述问题 ,您可以将上述代码进行调整即可解决问题,如下代码所示:

11 个回复

倒序浏览
最佳答案
最佳答案
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-12-20 21:48:03
来自 4#
xtm_320 发表于 2022-12-21 10:01
还希望能加快处理,我们已经买了你们的产品,我们这个月是要准备上线的,所以一定要在这之前解决,感谢

经过调研,发现您公式使用有误,公式引用需要引用一个已经存在的sheet,其中 您创建公式时还未生成"CIT.WP01.1_预提费用"此 sheet ,所以导致了上述问题 ,您可以将上述代码进行调整即可解决问题,如下代码所示:
  1.   Workbook workbook = new Workbook();
  2.         IWorksheet workSheet = workbook.getWorksheets().get(0);
  3.         workSheet.setName("CIT.WP00.0_调整汇总");
  4.         IWorksheet worksheet1 = workbook.getWorksheets().addAfter(workSheet);
  5.         worksheet1.setName("CIT.WP01.1_预提费用");
  6.         workSheet.getRange(1, 1).setFormula("CIT.WP01.1_预提费用!F7");
  7.         String sourceFormula = workSheet.getRange(1, 1).getFormula();
  8.         workSheet.getRange(1, 1).getEntireColumn().insert();
  9.         String changeFormula = workSheet.getRange(1, 2).getFormula();
  10.         System.out.print(sourceFormula + ',' + changeFormula);
复制代码


回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-12-21 09:38:59
2#
本帖最后由 Ellia.Duan 于 2022-12-21 09:43 编辑

您好,此问题已复现,将深入调研下原因 ,待有进展会及时通知您。本贴将置为保留处理。[DOCXLS-7267]
回复 使用道具 举报
xtm_320
注册会员   /  发表于:2022-12-21 10:01:36
3#
还希望能加快处理,我们已经买了你们的产品,我们这个月是要准备上线的,所以一定要在这之前解决,感谢
回复 使用道具 举报
xtm_320
注册会员   /  发表于:2022-12-21 19:05:11
5#
感谢感谢,我这边试试看
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-12-21 19:11:07
6#
xtm_320 发表于 2022-12-21 19:05
感谢感谢,我这边试试看

回复 使用道具 举报
xtm_320
注册会员   /  发表于:2022-12-21 22:27:29
7#
您好,您提供的解决方案我已经试过了,是没问题的,但是我们这边有另一中业务场景,我们在做报表计算的时候,不一定每一张报表都会参与计算,所以在计算的时候可能只有部分报表,因此会出现上述的情况,单元格中引用公式的报表不存在,那么如果出现这种情况,我应该怎么解决加行以后公式变更的问题呢?因为单元格的公式很可能是CIT.WP01.1_预提费用!F7 + D12这种,如果这种情况,我要在D列之前加一列,这个公式就应该变成CIT.WP01.1_预提费用!F7+E12,但是现在我没办法获取到正确的变更以后的公式,请问这个有好的解决方案么?
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-12-22 09:04:22
8#
我不太明白您的业务场景,“我们在做报表计算的时候,不一定每一张报表都会参与计算,所以在计算的时候可能只有部分报表” 这句话的意思是否可以详细介绍下,为什么需要在未创建报表情况下引用该报表?
回复 使用道具 举报
xtm_320
注册会员   /  发表于:2022-12-22 10:30:02
9#
就是比如我们初始化的时候是10张报表,在真正使用的时候,因为一些业务节点,其中5张就不能再变更,不用参与计算, 用户只能对剩下的5张进行计算,因为所有的公式在初始化的时候就已经配置好了,所以有引用到没参与计算的报表会被当0处理
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-12-22 11:34:23
10#
我是这么理解的,既然引用到没有参与计算的报表被当作0处理,那么是‘CIT.WP01.1_预提费用!F7 + D12’还是‘CIT.WP01.1_预提费用!F7+E12’都没有关系了,因为都会被当作0处理。我这里理解对吗?如果理解有误,建议留下您  的联系方式,电话沟通下。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部