VSTO: прикрепить метаданные к ячейке в Excel? - PullRequest
10 голосов
/ 12 января 2010

Я использую VSTO для создания надстройки Excel. Это дополнение извлекает и отображает много данных с sql-сервера. Это прекрасно работает, но позже я планирую получить доступ к некоторым данным в Excel и изменить их некоторыми способами. Моя проблема в том, что мне нужен способ классификации ячеек, которые я хочу изменить. Есть ли способ добавить метаданные в ячейку, чтобы узнать, должна ли она быть изменена? Например. добавить атрибут в ячейку, например, "editable_cell" и сделать что-то вроде Excel.FindCellsWithAttribute ("editable_cell"), чтобы найти искомые ячейки?

Спасибо!

Ответы [ 5 ]

8 голосов
/ 24 марта 2010

Есть несколько способов сделать это.Я не знаю ваших конкретных требований, поэтому кратко опишу некоторые решения.

  • Создайте именованный диапазон, но добавление / удаление данных может повлиять на определенный именованный диапазон, если вы не сделаете это правильно.Иногда лучше определить одну ячейку с именем range, чтобы она действовала как закладка, тогда «select range» получит все данные.

  • Создать стиль.Примените этот стиль к каждой ячейке данных, которую вы хотите «найти».Определите метод, который возвращает базу Range, для которой ячейки имеют указанный стиль.

  • Создание объекта PivotCache.Этот объект имеет возможность обновлять себя и уменьшает размер файла, особенно если кэш многократно используется в книге.Это также один из способов обойти ограничение количества строк на рабочем листе.

  • Создать список.Это имеет много преимуществ.Вы можете добавлять / удалять данные по желанию.Добавить / удалить столбцы.Представьте список как таблицу.

  • Используйте сопоставление XML (http://msdn.microsoft.com/en-us/library/aa203737(office.11).aspx), как упоминает "code4life".

  • Еслиworkbook - XMLSS, затем определите новое пространство имен и украсьте ячейки атрибутом из пространства имен. Затем можно «запросить» с помощью XPath. Это очень мощный инструмент, поскольку вы можете встраивать все, что нужно, в книгу.

У каждого есть свои преимущества / недостатки. Я использовал каждое решение несколько раз.

3 голосов
/ 09 декабря 2011

AMissico перечислил несколько очень хороших решений. Я хотел бы добавить один, который работал для меня:

В C # (ExcelDNA / VSTO) или VBA вы можете сделать что-то вроде:

var app = (Application) ExcelDnaUtil.Application;
app.ActiveCell.AddComment("This is an editable cell");

Очевидным недостатком было бы то, что пользователь мог видеть этот комментарий - в моем случае он работал очень хорошо, потому что я мог предоставить пользователю полезную диагностику, а также проанализировать тот же текст, чтобы получить метаданные, которые я хотел.

Вы также можете скрыть комментарий, используя:

app.DisplayCommentIndicator = XlCommentDisplayMode.xlNoIndicator;

Однако обратите внимание, что это скрывает все комментарии, а не только тот, который вы добавили. Чтобы перебрать комментарии на листе, вы можете использовать следующее:

var comments = ((Worksheet)app.ActiveSheet).Comments;
foreach(Comment comment in comments)
{
    var text = comment.Text();
    // do something...
}
0 голосов
/ 05 ноября 2014

Вы можете встроить свои метаданные на уровне рабочей книги в CustomXMLPart. CustomXMLpart может хранить сериализованный словарь. Словарь может хранить адреса ячеек в качестве ключей и соответствующие метаданные в качестве значения.

Добавление пользовательской части XML: http://msdn.microsoft.com/en-us/library/bb608612.aspx

Обратите внимание, что это работает только для форматов файлов xls и xlsx.

0 голосов
/ 23 марта 2010

Возможно, вы захотите взглянуть на сопоставление XML: http://msdn.microsoft.com/en-us/library/aa203737(office.11).aspx

0 голосов
/ 12 января 2010

Я не помню способ сделать именно то, что вы просите. В прошлом я видел настройку имен диапазонов в зависимости от того, что вы хотите найти. Другой вариант состоит в том, чтобы скрыть ячейку рядом с ней или какое-либо другое заранее определенное смещение (например, всегда на 3 ячейки вправо или в той же позиции, но на скрытой странице). В скрытой ячейке / странице будут данные, которые вы будете искать.

Одна вещь, которая, кажется, случайно стала лучшей практикой в ​​бухгалтерской фирме, на которую я раньше работал, состояла в том, что вы должны поместить все свои данные на «уродливую» страницу, которая скрыта, и использовать формулы / поиски, чтобы обратиться к вашему данные. Таким образом, вы можете обновить «некрасивую» страницу и узнать, где находятся данные, имея «симпатичную страницу», которую пользователи могут использовать для своего сердца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...