【问题标题】:Attempting to get internal SheetId in VSTO for assistance in detecting a sheet rename尝试在 VSTO 中获取内部 SheetId 以帮助检测工作表重命名
【发布时间】:2019-01-16 18:06:27
【问题描述】:

我目前正在我的插件中缓存工作表上的公式信息。当工作表上发生更改时,会捕获此更改,以便更新缓存。我已经看到虽然没有可靠的方法来检测工作表名称何时更改,所以我做了一些工作来查看添加、移动标签等时发生了什么变化。

在 .zip 文件中制作我的工作簿并查看 workbook.xml 时,我发现了以下结构:

<sheets>
   <sheet r:id="rId1" sheetId="2" name="POC2"/>
   <sheet r:id="rId2" sheetId="1" name="POC1"/>
</sheets>

我有什么遗漏或者这种方法看起来可靠吗?

sheetId 似乎可用,并且不受更改 Tab 键顺序和其他操作的影响。我的想法是我可以将此内部 ID 与工作表名称一起使用。如果 sheetId 的名称与缓存中的名称不同,则表示该工作表已重命名。如果 sheetId 不再存在,则表被删除等。

我的问题是,如果我的其他想法有效,VSTO 中是否有办法获取 sheetId 属性。

谢谢,

【问题讨论】:

    标签: c# excel vsto excel-addins


    【解决方案1】:

    不,sheetId 只是 Excel Open XML 定义中的一个属性,因此无法通过打开的 Excel 文件上的代码查询。

    您想要的(并且是 sheetId 的对象模型等价物)是Worksheet.CodeName

    创建工作表对象时,工作表的 CodeName 将与工作表的名称相同。但是当用户更改工作表的名称时,它不会更改。也不能在运行时更改。

    可以更改 CodeName 的唯一方法是在代码编辑器的 Properties 窗口中(VBA 或 VSTO 文档级自定义)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多