我的c#软件使用OpenXML导出到Excel文件。即使用户在Excel中编辑了这些文件,我仍在软件中读取和编辑这些文件。我想在某处添加软件名称和版本,因此,当软件打开文件时,请识别它。工作簿中是否有任何属性作为文档信息,注释或仅对OpenXML不对Excel可见?
目前,最好的解决方法是将此信息保存在Excel工作表中并隐藏工作表。关键是该信息不应被用户意外删除。
答案 0 :(得分:1)
我将使用自定义XML部件。
只能通过对象模型或通过解压缩文件“包”来访问定制XML部件的内容。因此,信息不会被意外更改,甚至无需费力即可查看。而且,如果您要通过Open XML处理文件,则访问自定义XML部件相当简单。
(用户可以通过用户界面在“文件/信息”标签中查看文档属性(在注释中建议)。
答案 1 :(得分:0)
通过Openxml为excel文档设置自定义属性
在page底部找到方法SetCustomProperty()
。此功能是针对Word文档编写的,因此将Excel文档的打开文件行更改为以下一行
using (var document = SpreadsheetDocument.Open(fileName, true))
您可以将任何属性添加到文件中。
如何隐藏属性
这些属性将在Excel中通过“文件”->“信息”->“属性”->“高级属性”窗口可见。用户将能够在那里删除它们。如果不希望这样做,则使用该属性代替唯一ID不会在excel中可见
newProp.FormatId = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}";
使用了另一个:
newProp.FormatId = Guid.NewGuid().ToString("B");
注意:要保存字符串,请使用VTLPWSTR类型。请勿将VTBString类型与上面给出的唯一ID一起使用,因为在其中编辑属性时,Excel会自动删除您的属性(仅凭经验,我不知道为什么!)。
如何读取属性?
您保存了文件。然后,再次打开它并遍历所有属性
foreach (CustomDocumentProperty property in document.CustomFilePropertiesPart.Properties)
{
if (property.Name.Value == nameof(Product) &&
property.VTBString.Text == Product)
return true;
}
其中Product
是字符串属性,其中包含软件的名称,而VTBString用于保存Product
的值。使用此方法可以保存和读取所需的任意多个属性。