添加到从MemoryStream打开的WordprocessingDocument而不会得到"内存流不可扩展"?

 秦schueler 发布于 2023-02-10 13:40

使用Open XML SDK,当我到达FeedData(msData)行时,下面给出"内存流不可扩展":

// Bytes in, bytes out
internal static byte[] UpdateDataStoreInMemoryStream(byte[] bytes,
   XmlDocument xdocData)
{
   using (var msDoc = new MemoryStream(bytes))
   {
      using (WordprocessingDocument wd = WordprocessingDocument.Open(msDoc, true))
      {
         MainDocumentPart mdp = wd.MainDocumentPart;
         CustomXmlPart cxp = mdp.CustomXmlParts.SingleOrDefault();
         using (MemoryStream msData = new MemoryStream())
         {
            xdocData.Save(msData);
            msData.Position = 0;
            // Replace content of ...\customXml\item1.xml. 
            cxp.FeedData(msData);
            // "Memory stream is not expandable" if more data than was there initially.
         }
      }
      return msDoc.ToArray();
   }
}

注意:问题不是msData,而是msDoc.

斯坦 - 托雷

1 个回答
  • 问题是(实际上从错误信息中很明显)

    using (var msDoc = new MemoryStream(bytes)) ...
    

    创建一个固定大小的MemoryStream.所以解决方案是创建一个可扩展的MemoryStream:

    MemoryStream msDoc = new MemoryStream();
    msDoc.Write(bytes, 0, bytes.Length);
    msDoc.Position = 0;
    ...
    

    2023-02-10 13:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有