c#/openxml 将 word 文档合并为一个,失败 --closed--
c# / openxml merge of word documents to one, fails --closed--
我必须将几个 Word 文档与一个小型 C# 控制台应用程序合并。到目前为止,一切都很好。这些文档是在 arcplan 中生成的。生成了大约 30 个文件,但不知何故有些文件已损坏,但仍向我显示内容。
如果我现在合并所有正确的文件,我的文档就很好,但是如果我的一堆文件中有一个损坏的文件,任何损坏的文件都会生成一个空白页。我当然调试了它,但我没有看到任何错误,这解释了空白页面。
争论是这样的:
"C:\temp\Report_C_01.docx" "C:\temp\Report_D_01.docx" "C:\temp\Report_E_01.docx"
这是我的代码:
public static void Merge(params String[] filepaths)
{
String pathName = Path.GetDirectoryName(filepaths[0]);
subfolder = Path.Combine(pathName, "Output\"); //Wird für den gemergten File benötigt
if (filepaths != null && filepaths.Length > 1)
{
WordprocessingDocument myDoc = WordprocessingDocument.Open(@filepaths[0], true); //Wordfiles werden geöffnet
MainDocumentPart mainPart = myDoc.MainDocumentPart;
for (int i = 1; i < filepaths.Length; i++)
{
String altChunkId = "AltChunkId" + i;
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
FileStream fileStream = File.Open(@filepaths[i], FileMode.Open);
chunk.FeedData(fileStream);
DocumentFormat.OpenXml.Wordprocessing.AltChunk altChunk = new DocumentFormat.OpenXml.Wordprocessing.AltChunk();
altChunk.Id = altChunkId;
//new page, if you like it...
mainPart.Document.Body.AppendChild(new Paragraph(new Run(new Break() { Type = BreakValues.Page } )));
//next document
mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
}
mainPart.Document.Save();
myDoc.Close();
for (int i = 0; i < 1; i++)
{
String fileNameWE = Path.GetFileName(filepaths[i]);
File.Copy(filepaths[i], subfolder + fileNameWE);
}
foreach (String fp in filepaths)
{
File.Delete(fp);
}
}
else
{
Console.WriteLine("Nur 1 Argument");
}
}
希望有人能帮助我。
此致
克里斯蒂安
已修复。似乎 word 不能在一个文档中合并不同的格式。因此,如果您有 2 个带页脚的文档和其他 3 个没有页脚的文档,那将无法正常工作。显然,某些客户可能会遇到此类问题;至少代码没问题
我必须将几个 Word 文档与一个小型 C# 控制台应用程序合并。到目前为止,一切都很好。这些文档是在 arcplan 中生成的。生成了大约 30 个文件,但不知何故有些文件已损坏,但仍向我显示内容。 如果我现在合并所有正确的文件,我的文档就很好,但是如果我的一堆文件中有一个损坏的文件,任何损坏的文件都会生成一个空白页。我当然调试了它,但我没有看到任何错误,这解释了空白页面。
争论是这样的: "C:\temp\Report_C_01.docx" "C:\temp\Report_D_01.docx" "C:\temp\Report_E_01.docx"
这是我的代码:
public static void Merge(params String[] filepaths)
{
String pathName = Path.GetDirectoryName(filepaths[0]);
subfolder = Path.Combine(pathName, "Output\"); //Wird für den gemergten File benötigt
if (filepaths != null && filepaths.Length > 1)
{
WordprocessingDocument myDoc = WordprocessingDocument.Open(@filepaths[0], true); //Wordfiles werden geöffnet
MainDocumentPart mainPart = myDoc.MainDocumentPart;
for (int i = 1; i < filepaths.Length; i++)
{
String altChunkId = "AltChunkId" + i;
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
FileStream fileStream = File.Open(@filepaths[i], FileMode.Open);
chunk.FeedData(fileStream);
DocumentFormat.OpenXml.Wordprocessing.AltChunk altChunk = new DocumentFormat.OpenXml.Wordprocessing.AltChunk();
altChunk.Id = altChunkId;
//new page, if you like it...
mainPart.Document.Body.AppendChild(new Paragraph(new Run(new Break() { Type = BreakValues.Page } )));
//next document
mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
}
mainPart.Document.Save();
myDoc.Close();
for (int i = 0; i < 1; i++)
{
String fileNameWE = Path.GetFileName(filepaths[i]);
File.Copy(filepaths[i], subfolder + fileNameWE);
}
foreach (String fp in filepaths)
{
File.Delete(fp);
}
}
else
{
Console.WriteLine("Nur 1 Argument");
}
}
希望有人能帮助我。
此致 克里斯蒂安
已修复。似乎 word 不能在一个文档中合并不同的格式。因此,如果您有 2 个带页脚的文档和其他 3 个没有页脚的文档,那将无法正常工作。显然,某些客户可能会遇到此类问题;至少代码没问题