Уникальный идентификатор Interop.ListObject из VSTO - C #

1

Мне нужен способ вставить (или использовать уже реализованное свойство, которое может служить) уникальным идентификатором в экземпляр Microsoft.Office.Interop.Excel.ListObject.

Проблема в том, что когда я создаю новый ListObject как:

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

Я не могу полагаться на свойство Name excelTable чтобы просмотреть его в коллекции, так как пользователь мог изменить значение этого свойства в любое время после этого.

После просмотра свойств объекта я не нашел ничего, что можно было бы использовать из коробки (например, как свойство тега, которое существует в объекте типа Microsoft.Office.Tools.Excel.ListObject, который я не могу использовать в этой точке из-за зависимостей)... и другие странные вещи, такие как DisplayName которые отображаются не только не могут быть установлены напрямую, но также отражать то же самое значение, которое имеет свойство Name всегда (почему вы хотите иметь 2 свойства, которые отражают то же значение в в любой момент?).

Я подумал о том, чтобы создать собственную реализацию этого класса или, возможно, использовать свойство Comment для хранения GUID (который я не знаю, почему это кажется неправильным):

excelTable.Comment = Guid.NewGuid().ToString();

Можете ли вы предложить другой способ выполнить эту задачу? Большое спасибо!

Теги:
vsto
excel-interop

1 ответ

2
Лучший ответ

Очень сложно сказать, что нет свойства "Тег" (или аналогичного), которое вы могли бы установить на объектах Excel. Я сталкиваюсь с теми же проблемами, что и вы. Вот два варианта, которые вы можете использовать:

  • альтернативное свойство текста (для таблицы это видно только при щелчке правой кнопкой мыши по таблице, выборе таблицы и альтернативного текста). Это, вероятно, немного чище, чем комментарий, поскольку пользовательский интерфейс для комментариев всегда виден.
  • вы также можете создать объект-оболочку, содержащий прямую ссылку на ListObject. Таким образом, один объект-оболочка для каждого созданного объекта ListObject. Это отлично работает, пока вы не сохраните/не откройте рабочую книгу. Если вам нужно снова идентифицировать таблицу после повторного открытия книги, вам все равно нужно написать какой-то идентификатор для комментария или альтернативного текста. Вероятно, вы могли бы выполнить чистую реализацию, используя такие события, как BeforeSave и AfterSave (добавьте альтернативный текст перед сохранением, чтобы он сохранялся на диске, а затем удалите его снова после сохранения, чтобы пользователь не видел его. Когда рабочая книга открывается, вы загружаете свою обертки объектов и удалить альтернативный текст).
  • 0
    К сожалению, AlternativeText не разрешается использовать в Excel2007, что вызывает проблемы совместимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню