Записать скрытую информацию (например, название и версию программного обеспечения) в файл Excel, используя OpenXML - PullRequest
0 голосов
/ 07 октября 2019

My c # экспортирует программное обеспечение в файлы Excel с использованием OpenXML. Я читаю и редактирую эти файлы в программном обеспечении даже после того, как пользователь редактирует их в Excel. Я хочу добавить название и версию программного обеспечения где-нибудь, поэтому, когда программное обеспечение откроет файл, узнайте его. Есть ли какое-либо свойство в Рабочей книге как информация документа, комментарии или видимые только для OpenXML, но не для Excel?

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

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Я бы использовал пользовательскую часть XML.

Содержимое пользовательской части XML доступно только через объектную модель или разархивировав файл «package». Таким образом, информация не может быть изменена случайно или даже просмотрена без дополнительных усилий. И если вы обрабатываете файл с помощью Open XML, доступ к пользовательской XML-части достаточно прост.

(пользователь может увидеть свойства документа (предлагается в комментарии) через пользовательский интерфейс в файле File /Информация вкладка.)

0 голосов
/ 11 октября 2019

Установка пользовательского свойства для документа Excel с помощью Openxml

Метод поиска SetCustomProperty() в нижней части page . Эта функция написана для документа Word, поэтому измените строку открытого файла на строку ниже для документа Excel

using (var document = SpreadsheetDocument.Open(fileName, true))

И вы можете добавить любое свойство в свой файл.

Как скрыть свойства

Свойства будут видны в Excel через окно Файл-> Информация-> Свойства-> Дополнительные свойства. Пользователи смогут удалить их там. Если это не нужно, свойство не будет видно в Excel, если вместо этого уникального идентификатора

newProp.FormatId = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}";

используется другой идентификатор:

newProp.FormatId = Guid.NewGuid().ToString("B");

Примечание : для сохранения строки используйте тип VTLPWSTR. Не используйте тип VTBString вместе с уникальным идентификатором, указанным выше, так как Excel автоматически удаляет ваше свойство при его редактировании (просто по опыту, я не знаю, почему!).

Как читатьсвойства?

Вы сохранили свой файл. Затем снова откройте его и зациклите все свойства

foreach (CustomDocumentProperty property in document.CustomFilePropertiesPart.Properties)
{
    if (property.Name.Value == nameof(Product) &&
        property.VTBString.Text == Product)
        return true;
} 

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

...