matlab:合并多个word文档
背景:
编辑一个具有多个内容结构一致的平行章节,可以分别处理每个章节,然后将这些章节合并起来。思路是循环地将文档二、三复制粘贴到文档一后面。
情形一:合并的章节之间需要插入分页符
%% 合并文档,中间插入分页符
word = actxserver('Word.Application');
word.Visible = 0;
word.DisplayAlerts = 0;
[documentsToMerge, pathname] = uigetfile({'*.doc;*.docx;*.docm','Word Files (*.doc,*.docx,*.docm)';'*.*', 'All Files (*.*)'}, 'MultiSelect','on');
outputFileName = '合并后的文档.docx';
mergedDoc = word.Documents.Open(fullfile(pathname,documentsToMerge{1}));
% 合并剩余文档
for DocIndex = 2:length(documentsToMerge)
currentDoc = word.Documents.Open(fullfile(pathname,documentsToMerge{DocIndex}));
% 在当前文档末尾插入分页符
mergedDoc.Range.End = mergedDoc.Range.End - 1;
mergedDoc.Application.Selection.InsertBreak(7);
% 将当前文档复制到合并文档
currentDocRange = currentDoc.Content;
currentDocRange.Copy;
mergedDocRange = mergedDoc.Content;
mergedDocRange.Collapse(0);
mergedDocRange.Paste;
currentDoc.Close;
end
mergedDoc.SaveAs2(fullfile(pathname,'已改\',outputFileName));
mergedDoc.Close ();
word.Quit ();
delete(word);
情形二:合并的章节之间不需要插入分页符
只需将上面代码中插入分页符的语句删除即可。同时单个章节的文档不要留空行,否则合并后每个章节之间都有一个回车,删除好麻烦的。
word = actxserver('Word.Application');
word.Visible = 0;
word.DisplayAlerts = 0;
[documentsToMerge, pathname] = uigetfile({'*.doc;*.docx;*.docm','Word Files (*.doc,*.docx,*.docm)';'*.*', 'All Files (*.*)'}, 'MultiSelect','on');
outputFileName = '合并后的文档.docx';
mergedDoc = word.Documents.Open(fullfile(pathname,documentsToMerge{1}));
% 合并
for DocIndex = 2:length(documentsToMerge)
currentDoc = word.Documents.Open(fullfile(pathname,documentsToMerge{DocIndex}));
% 将当前文档复制到合并文档
currentDocRange = currentDoc.Content;
currentDocRange.Copy;
mergedDocRange = mergedDoc.Content;
mergedDocRange.Collapse(0);
mergedDocRange.Paste;
% 关闭当前文档
currentDoc.Close;
end
mergedDoc.SaveAs2(fullfile(pathname,'已改\',outputFileName));
mergedDoc.Close ();
word.Quit ();
delete(word);
需要注意的是,有时运行以上代码中途会报错,不知道是什么原因😭