【发布时间】:2018-07-20 09:30:09
【问题描述】:
我有多个模板 docx 文件,我正在尝试将它们合并在一起。如果第一个文件被格式化为两列,当我合并文件时,它会自动将下一个文件设置为多列 word 文档并更改格式,即使在合并之前它是一个单列文件。但是,当我首先选择没有多列的普通 docx 文件时,它会尝试将所有多列文本设置为单列并更改格式。
我正在尝试在不更改任何格式的情况下合并这些文档。到目前为止,这是我的代码:
private void MergeDocuments()
{
bool docfilechecked = keepworddoc.Checked;
string caseno = casetextboxinput.Value;
string nameno = patentee;
string[] mergeFiles = Directory.GetFiles(directoryrootmerge + caseno + @"\", sequenceCounter + "*.doc*")
.Select(Path.GetFullPath)
.ToArray();
string filename = caseno + @" - " + nameno + " - PoA Form.docx";
string directory = directoryrootmerge + caseno;
string outputFileName = directoryrootmerge + caseno + @"\" + caseno + @" - " + nameno + " - PoA Form.docx";
//string outputFileName2 = directoryrootmerge + caseno + @"\" + caseno + @" - " + nameno + "- PoA Form.pdf";
if (mergeFiles.Length == 1)
{
System.IO.File.Copy(mergeFiles[0], outputFileName, true);
}
else
{
for (int i = 1; i < mergeFiles.Length; i++)
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(mergeFiles[0], true))
{
MainDocumentPart mainPart = myDoc.MainDocumentPart;
string altChunkId = "AltChunkId" + i;
//Append page break
Paragraph para = new Paragraph(new Run((new DocumentFormat.OpenXml.Wordprocessing.Break() { Type = BreakValues.Page })));
mainPart.Document.Body.InsertAfter(para, mainPart.Document.Body.LastChild);
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
using (FileStream fileStream = System.IO.File.Open(mergeFiles[i], FileMode.Open))
{
chunk.FeedData(fileStream);
}
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
//new page, if you like it...
//mainPart.Document.Body.AppendChild(new Paragraph(new Run(new DocumentFormat.OpenXml.Wordprocessing.Break() { Type = BreakValues.Page })));
mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().Last());
mainPart.Document.Save();
myDoc.Close();
System.IO.File.Copy(mergeFiles[0], outputFileName, true);
}
}
}
我在每个文件后添加了一个分页符,以查看这是否会重置合并时的格式但似乎不起作用 - 任何人都可以看到我可能出错的地方吗?
【问题讨论】:
-
我做了一些研究,它说要使用 alt 块的属性,称为匹配源,但不知道如何使用它 - 有人可以帮忙吗?
-
MatchSource matchSrc = new MatchSource(); matchSrc.Val = DocumentFormat.OpenXml.Wordprocessing.BooleanValues.True; altChunk.AppendChild(matchSrc);
-
名称空间“DocumentFormat.OpenXml.Wordprocessing”中不存在类型或名称空间名称“BooleanValues”(您是否缺少程序集引用?