本帖最后由 Wilson.Zhang 于 2024-10-31 18:02 编辑
Table单元格中设置的公式,通过横向拖拽填充能够自动扩展更新公式中引用的单元格区域。然而,复制单元格中的公式并粘贴至其他单元格则不会自动扩展修改公式的引用区域。比如,如图1所示,Tabe包含六列,列名称分别为TA、TB、TC、TD、TE、TF,为TD设置列公式为[@TA],即引用TA列内容。复制TD列单元格D5中的公式至TE列单元格E5,E5中的公式也为[@TA]而不能扩展为[@TB]。
图1. Table列公式复制
那么,Table复制单元格公式能否像拖拽填充一样自动扩展修改公式中的引用单元格区域呢?在给出答案之前,依然分析先行。
Table公式通过Table列名称引用某列单元格,那么,只要能在粘贴时将复制公式中的Table列名称调换为相应的Table列名称即可。如上所述的例子,在将[@TA]粘贴至单元格E5后,根据E列和D列之间的临近关系,修改公式中的引用列TA为TB。具体思路如下:
1. 对Worksheet注册ClipboardPasted事件,该事件可以监听到本方案中所需的所有基础信息,包括复制源区域fromRange、粘贴区域cellRange,其中均包含有行列信息。
2. 通过fromRange中的行列索引获取公式的引用区域,记为FormulaPrecedent。
3. 通过cellRange和fromRange中的列索引计算复制源区域和粘贴区域之间的横向距离,其结果加上FormulaPrecedent中的列信息即粘贴区域同步扩展应该引用的Table列,记为NewFormulaCol。
4. 通过fromRange中的行列索引获取复制源单元格中的公式,记为Formula。
5. 在Table中,获取NewFormulaCol列的名称,用以置换Formula中的原始引用列,获取新公式,记为NewFormula。
6. 对cellRange中行列信息对应的单元格设置公式为NewFormula。
上述思路运行效果如图2所示,附上代码,以供参考。
图2. Table列公式复制自动扩展引用列
问题原帖:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=227776
|
|