您好,
1、观察存在Sheet1!的公式与不存在Sheet1!的公式的表达式树可以发现,存在Sheet1!的参数中有一个source属性。
2、将这个source属性,赋值给原来不存在Sheet1!的参数,然后将其转为公式,输出结果。
可以看到,此时就已经带上了Sheet1!
3、此时的基本的思路就已经有了,如何获取source成为了一个难题,目前并没有公开的API能够获取,只有通过表单中存在的公式才能获取,那么应该如何最小限度的获取呢?
一种方式是使用:
GC.Spread.Sheets.CalcEngine.formulaToExpression(sheet, "=SUM(Sheet1!A1)");
来获取这个source。
另一种方式则是使用customName来实现,以下是一个简单的示例:
- sheet.setValue(0, 0, 1);
- sheet.setValue(0, 1, 2);
- sheet.setValue(1, 0, 3);
- sheet.setFormula(0, 3, "=SUM(A1:B2)");
- sheet.addCustomName("temp", "=Sheet1!A1", 1, 1);
- let cn = sheet.getCustomName("temp");
- let exp = cn.getExpression();
- let sheetSource = exp.source;
- let newExp = GC.Spread.Sheets.CalcEngine.formulaToExpression(
- sheet,
- sheet.getFormula(0, 3)
- );
- newExp.arguments[0].source = sheetSource;
- let newFormulaStr = GC.Spread.Sheets.CalcEngine.expressionToFormula(
- sheet,
- newExp
- );
- sheet.setFormula(0, 3, newFormulaStr);
- sheet.removeCustomName("temp");
复制代码
结果如下:
4、需要注意的是,此处所使用的方式并不是官方的接口,存在一定的使用风险,不排除将来的版本可能会对此处进行修改,建议进行完善地测试后再酌情使用。 |