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

C# VSTO-C中Interop.ListObject的唯一标识符#,c#,vsto,excel-interop,C#,Vsto,Excel Interop,我需要一种方法将唯一标识符插入(或使用一个已经实现的属性,该属性可以用作)Microsoft.Office.Interop.Excel.ListObject实例 问题是,当我创建一个新的ListObject时: var excelTable = worksheet.ListObjects.Add(ExcelInterop.XlListObjectSourceType.xlSrcExternal, DUMMY_CONNECTIONSTRING, false, true, cellRange);

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

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

var excelTable = worksheet.ListObjects.Add(ExcelInterop.XlListObjectSourceType.xlSrcExternal, DUMMY_CONNECTIONSTRING, false, true, cellRange);
我不能依靠
excelTable
Name
属性在集合中浏览它,因为用户可以在之后随时更改该属性的值

在浏览对象属性之后,我发现没有任何现成的东西可以使用(例如标记属性,它存在于
Microsoft.Office.Tools.Excel.ListObject
类型的对象中,由于依赖关系,此时无法使用)…和其他奇怪的东西,如
DisplayName
,它不仅无法直接设置,而且无法反映
Name
属性始终具有的完全相同的值(为什么您希望有两个属性在任何时候都反映相同的值?)

我考虑过创建自己的此类实现,或者可能使用
Comment
属性来存储GUID(我不知道为什么会感觉有点不对劲):

你能建议另一种方法来完成这项任务吗?
非常感谢

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

  • 属性(对于该表,只有在该表上单击鼠标右键,然后选择“表”和“备选文本”,才能看到该属性)。这可能比Comment更简洁,因为Comment的UI总是可见的
  • 您还可以生成包含对ListObject的直接引用的包装器对象。因此,为每个创建的ListObject创建一个包装器对象。在您再次保存/打开工作簿之前,此操作可以正常工作。如果需要在重新打开工作簿后再次识别该表,则仍然需要为注释或替代文本写入一些id。您可能可以通过使用BeforeSave和AfterSave之类的事件(在保存之前添加替代文本,以便保存到磁盘,然后在保存之后再次删除它,以便用户看不到它。当工作簿打开时,您可以加载包装器对象并删除替代文本)

不幸的是,Excel2007中不允许使用AlternativeText,导致兼容性问题。
excelTable.Comment = Guid.NewGuid().ToString();