簡體   English   中英

如何使用OpenXML在Word文檔中設置發布日期

[英]How to set Publish Date in Word Document using OpenXML

我遇到一種情況,用戶可以上載包含某些屬性的占位符的Word文檔(即,在MS Word中,用戶已轉到“插入”>“快速零件”>“文檔屬性”並選擇了一個屬性)。 我要支持的特定屬性是“ Title ,“ Author ,“ Company和“ Publish Date

TitleAuthor設置為包屬性, Company設置為擴展文件屬性。 這些使用下面的代碼設置,可以正常工作:

private static void SetDocumentProperties(ReportTemplateModel model, WordprocessingDocument wordDocument)
{
    //these properties always exist
    wordDocument.PackageProperties.Title = model.Title;
    wordDocument.PackageProperties.Creator = model.Author;
    wordDocument.PackageProperties.Created = DateTime.Now;
    wordDocument.PackageProperties.Modified = DateTime.Now;

    //these properties can be null
    if (wordDocument.ExtendedFilePropertiesPart == null)
    {
        wordDocument.AddNewPart<ExtendedFilePropertiesPart>();
    }
    if (wordDocument.ExtendedFilePropertiesPart.Properties == null)
    {
        wordDocument.ExtendedFilePropertiesPart.Properties = new Properties(new Company(model.SiteName));
    }
    else
    {
        wordDocument.ExtendedFilePropertiesPart.Properties.Company = new Company(model.SiteName);
    }
}

我的問題是我無法確定如何設置“ Publish Date屬性。 我嘗試使用以下代碼(從https://www.snip2code.com/Snippet/292005/WDSetCustomProperty改編)將其添加為“自定義文件屬性”,但這不起作用。 我已經閱讀了一些有關設置自定義屬性的內容,但是我對它們的工作方式感到困惑。 我也不確定Publish Date是否應該設置為自定義屬性或其他類型的屬性。

var customProps = wordDocument.CustomFilePropertiesPart;
if (customProps == null)
{
    customProps = wordDocument.AddCustomFilePropertiesPart();
    customProps.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();
}
var properties1 = new DocumentFormat.OpenXml.CustomProperties.Properties();

//I have tried both of these lines, neither worked.
//properties1.AddNamespaceDeclaration("op", "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties");
properties1.AddNamespaceDeclaration("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes");

var customDocumentProperty1 = new DocumentFormat.OpenXml.CustomProperties.CustomDocumentProperty()
{
    FormatId = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",
    PropertyId = 2,
    Name = "Publish Date"
};

customDocumentProperty1.Append(new DocumentFormat.OpenXml.VariantTypes.VTLPWSTR { Text = DateTime.Today.ToShortDateString() });

properties1.Append(customDocumentProperty1);

part.Properties = properties1;

應該將“ Publish Date設置為哪種類型的屬性,以及用於設置此屬性的正確語法是什么?

更新:我發現Publish Date是一個CoverPageProperty ,可以使用下面的代碼段創建它,但是我仍然找不到如何在文檔中正確設置它。

var coverPageProps = new DocumentFormat.OpenXml.Office.CoverPageProps.CoverPageProperties
{
    PublishDate = new PublishDate(DateTime.Today.ToShortDateString())
};

將以下代碼添加到我的SetDocumentProperties方法中似乎可行。 我必須承認我不完全理解以下代碼,因此仍然歡迎任何解釋。 另外,如果任何人都擁有不包含在C#中將XML編寫為字符串的解決方案,那么我寧願避免這種情況。

const string publishDatePartId = "publishDatePart";

var publishDateXmlPart = wordDocument.MainDocumentPart.AddNewPart<CustomXmlPart>("application/xml", publishDatePartId);

var writer = new XmlTextWriter(publishDateXmlPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8);

writer.WriteRaw($"<CoverPageProperties xmlns=\"http://schemas.microsoft.com/office/2006/coverPageProps\">" +
                $"<PublishDate>{DateTime.Today.ToShortDateString()}</PublishDate>" +
                $"</CoverPageProperties>");

writer.Flush();

writer.Close();

var customXmlPropertiesPart = publishDateXmlPart.AddNewPart<CustomXmlPropertiesPart>(publishDatePartId);

customXmlPropertiesPart.DataStoreItem = new DocumentFormat.OpenXml.CustomXmlDataProperties.DataStoreItem()
{
    //I don't know what this ID is, but it seems to somehow relate to the Publish Date
    ItemId = "{55AF091B-3C7A-41E3-B477-F2FDAA23CFDA}"
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM