我有一个共享点文档集。其中是一个模板,以及需要合并的 1 到 n 个文档。
我正在使用这里的代码
一切都在正常工作,直到 altChunks “数据分配”(尽管它写入了一个必须“打开和修复”打开的损坏文件,但我正在另一个问题中解决这个问题。
模板文档是在内存中打开的,而不是“直接”或“就地”打开,因为它是一个使用 Open XML 的共享点文件(我猜??)。内存流正在“打开二进制”写入,但我似乎无法在 altChunk 中找到一个位置来验证 FeedData 是否正常工作......在 InsertAfter 中,altchunk 内部文本是“”(空)
对于要添加的每个文件,都会调用一次以下代码: void AddAltChunk(MainDocumentPart mainPart, Word.SdtElement sdt, SPFile filename,bool LastPass) { string altChunkId = "AltChunkId" + id; 身份证++; byte[] byteArray = 文件名.OpenBinary();
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
using (MemoryStream mem = new MemoryStream())
{
mem.Write(byteArray, 0, (int)byteArray.Length); //mem.length grows after this
mem.Seek(0, SeekOrigin.Begin);
chunk.FeedData(mem); //dunno if this workin
}
Word.AltChunk altChunk = new Word.AltChunk();
altChunk.Id = altChunkId;
//Replace content control with altChunk information
DocumentFormat.OpenXml.OpenXmlElement parent = sdt.Parent;
parent.InsertAfter(altChunk, sdt); //altChunk "inner text" is empty (just guessing that it should have the info to be written)
if (LastPass) { sdt.Remove(); }
}
那么这里是“写入”部分......它写出一个具有原始模板的文件,但没有来自应该合并的文件的文本。
其他无关信息:代码说使用“模板dotx”启动,然后写入“doc docx”......这使得文件无法打开或修复。我将模板修改为 DOCX,我得到一个损坏的文件,可以使用 Open and Repair 打开。这些文档属于我制作并应用于图书馆的“内容类型”,因此当他们单击“新建”时,他们会得到该文档的空白(带有一些内容控件)......这使得 1 到多个文档被合并......我想知道内容控制是否有问题?......虽然我在那里放了一个没有抄送和一行“一般文本”的“常规”文档,甚至没有“合并”。
流光溢彩。而且我(显然对你们专业人士来说)是 C# 的新手,所以像我 7 岁一样跟我说话:)