来自VSTO的Interop.ListObject的唯一标识符 - C#

时间:2014-06-10 22:05:31

标签: c# vsto excel-interop

我需要一种方法将Microsoft.Office.Interop.Excel.ListObject实例中的唯一标识符插入(或使用已经实现的属性)。

问题是当我创建一个新的ListObject时:

var excelTable = worksheet.ListObjects.Add(ExcelInterop.XlListObjectSourceType.xlSrcExternal, DUMMY_CONNECTIONSTRING, false, true, cellRange);

我不能依赖Name的{​​{1}}属性在集合中浏览它,因为用户可以随时更改该属性的值。

在浏览对象属性之后,我发现没有任何东西可以开箱即用(例如Tag属性,它存在于excelTable类型的对象中,由于依赖性,此时我无法使用它。 ..和其他奇怪的东西,如Microsoft.Office.Tools.Excel.ListObject,不仅无法直接设置,而且还反映了DisplayName属性始终具有的完全相同的值(为什么你想要2任何时候反映相同价值的属性?)。

我想过要么创建我自己的这个类的实现,要么可能使用Name属性来存储GUID(我不知道为什么有点感觉错误):

Comment

你能否提出另一种方法来完成这项任务? 非常感谢!

1 个答案:

答案 0 :(得分:2)

您可以在Excel对象上设置“Tag”(或类似)属性,这非常令人沮丧。我面临着和你一样的问题。您可以使用以下两个选项:

  • alternative text属性(对于表格,只有通过右键单击表格,选择表格和替代文本才能看到)。这可能比Comment更清晰,因为注释的UI始终可见。
  • 您还可以生成包含对ListObject的直接引用的包装器对象。因此,每个创建的ListObject都有一个包装器对象。这可以正常工作,直到您再次保存/打开工作簿。如果您需要在重新打开工作簿后再次识别表,则仍需要将一些ID写入Comment或Alternative文本。您可以通过使用诸如BeforeSave和AfterSave之类的事件来执行干净的实现(在保存之前添加替代文本以便保存到磁盘,然后在保存之后再次将其删除,以便用户看不到它。当工作簿打开时,您加载您的包装器对象并删除替代文本。)。