使用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.
斯坦 - 托雷
问题是(实际上从错误信息中很明显)
using (var msDoc = new MemoryStream(bytes)) ...
创建一个固定大小的MemoryStream.所以解决方案是创建一个可扩展的MemoryStream:
MemoryStream msDoc = new MemoryStream(); msDoc.Write(bytes, 0, bytes.Length); msDoc.Position = 0; ...