DocumentFormat.OpenXml修改文档的创建者属性

时间:2017-10-20 06:20:24

标签: c# openxml openxml-sdk

我希望用其他内容替换Word Document Creator元数据,但在调用WordprocessingDocument.Save()时它不会保留。我正在使用DocumentFormat.OpenXML version 2.7.2和以下代码来加载和更改创建者:

public static SetCreator(Stream inputStream, string newCreator)
{
    //the inputStream is actually a MemoryStream
    WordprocessingDocument document = WordprocessingDocument.Open(inputStream, true);
    document.PackageProperties.Creator = newCreator;
    document.Save();
    //on this point i expect the original stream to be replaced with the new one
}

该文档仅作为流提供,因为此内容适用于Web应用程序项目。但是,当我尝试在调试模式下重新读取流时,document实例上的更改似乎没有持久化。此外,它不会触发任何异常。

修改:进一步测试,使用较旧的DocumentFormat.OpenXML(版本2.0.50022。WordprocessingDocument类没有Save()方法,而是Close()尝试将代码修改为以下内容并且它有效。但仍然想知道2.7.2上的正确方法。

public static SetCreator(Stream inputStream, string newCreator)
{
    //the inputStream is actually a MemoryStream
    WordprocessingDocument document = WordprocessingDocument.Open(inputStream, true);
    document.PackageProperties.Creator = newCreator;
    document.Close(); //On older version, calling this will save it into memory stream without actually closing it.
}

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

// Change MemoryStream by FileStream
public static SetCreator(FileStream inputStream, string newCreator)
{
    using (WordprocessingDocument document = WordprocessingDocument.Open(inputStream, true))
    {
        document.PackageProperties.Creator = newCreator;
        // You shouldn't need to do document.Save()
    }
}

// Main code
path = "C:\myPath";
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    SetCreator(fs, "ME");
}