2010-01-11 2 views
9

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

Спасибо! /Gustav

ответ

0

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

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

8

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

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

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

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

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

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

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

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

2

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... 
} 
+1

Метаданные, хранящиеся в комментариях, слишком легко переоцениваются пользователем, чтобы быть полезными и могли привести к «отсоединению» документа, – MickyD

0

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

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

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

Смежные вопросы