【发布时间】:2021-04-10 08:19:01
【问题描述】:
使用 DocumentFormat.OpenXML,我正在尝试将自定义属性添加到 Word 文档,然后再读取该属性。以下代码“似乎”可以做到这一点:
Dim os As OpenSettings = New OpenSettings() With {
.AutoSave = False
}
Dim propVal As String = "Test Value"
Using doc As WordprocessingDocument = WordprocessingDocument.Open(filename, True, os)
Dim cPart As CustomFilePropertiesPart = doc.CustomFilePropertiesPart
If cPart Is Nothing Then
cPart = doc.AddCustomFilePropertiesPart
cPart.Properties = New DocumentFormat.OpenXml.CustomProperties.Properties()
End If
Dim cPart As CustomFilePropertiesPart = doc.CustomFilePropertiesPart
Dim cProps As Properties = cPart.Properties
For Each prop As CustomDocumentProperty In cProps
If prop.Name = "TranscriptID" Then
prop.Remove()
Exit For
End If
Next
Dim newProp As CustomDocumentProperty = New CustomDocumentProperty() With {
.Name = "TranscriptID"
}
newProp.VTBString = New VTBString(propVal)
newProp.FormatId = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}"
cProps.AppendChild(newProp)
Dim pid As Integer = 2
For Each item As CustomDocumentProperty In cProps
item.PropertyId = pid
pid += 1
Next
cProps.Save()
End Using
此代码仿照此处找到的代码: https://docs.microsoft.com/en-us/office/open-xml/how-to-set-a-custom-property-in-a-word-processing-document
它似乎在这种情况下工作:
- 从上面执行代码。
- 再次从上面执行代码。
在 #2 我希望找到 CustomFilePropertiesPart 和属性值,并且我的期望得到了满足。
问题出现在这种场景中:
- 从上面执行代码。
- 使用 Microsoft Word 打开文档,保存并关闭。
- 再次从上面执行代码。
在这种情况下发生的情况是缺少 CustomFilePropertiesPart,但应该可以找到它。就好像 Microsoft Word 没有成功读取这个对象,所以当文档被保存时,这个对象就丢失了。这向我表明我的代码有问题。如果你能看到它是什么,或者如果你有一个类似的工作示例可以与之进行比较,我会很高兴收到你的来信。我觉得我正确地遵循了微软的例子,但显然我没有,而且我很难看到我离开的地方。谢谢。
【问题讨论】: