ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

C#写个小工具,把多个word文档进行合并成一个word文档

C#写个小工具,把多个word文档进行合并成一个word文档

先要安装包
在这里插入图片描述
帮助类WordDocumentMerger,用于处理word合并功能

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Interop.Word;
using System.Reflection;
using System.IO;
using System.Diagnostics;namespace WordHellper
{public class WordDocumentMerger{/// <summary>/// 合并第几个/// </summary>public static int status_Index = 0;private ApplicationClass objApp = null;private Document objDocLast = null;private Document objDocBeforeLast = null;public WordDocumentMerger(){objApp = new ApplicationClass();}#region 打开文件private void Open(string tempDoc){object objTempDoc = tempDoc;object objMissing = System.Reflection.Missing.Value;objDocLast = objApp.Documents.Open(ref objTempDoc,    //FileNameref objMissing,   //ConfirmVersionsref objMissing,   //ReadOnlyref objMissing,   //AddToRecentFilesref objMissing,   //PasswordDocumentref objMissing,   //PasswordTemplateref objMissing,   //Revertref objMissing,   //WritePasswordDocumentref objMissing,   //WritePasswordTemplateref objMissing,   //Formatref objMissing,   //Encondingref objMissing,   //Visibleref objMissing,   //OpenAndRepairref objMissing,   //DocumentDirectionref objMissing,   //NoEncodingDialogref objMissing    //XMLTransform);objDocLast.Activate();objDocLast.SpellingChecked = false;//关闭Word的拼写检查objDocLast.ShowSpellingErrors = false;//关闭Word的拼写错误提示 }#endregion#region 保存文件到输出模板private void SaveAs(string outDoc){object objMissing = System.Reflection.Missing.Value;object objOutDoc = outDoc;objDocLast.SaveAs(ref objOutDoc,      //FileNameref objMissing,     //FileFormatref objMissing,     //LockCommentsref objMissing,     //PassWord    ref objMissing,     //AddToRecentFilesref objMissing,     //WritePasswordref objMissing,     //ReadOnlyRecommendedref objMissing,     //EmbedTrueTypeFontsref objMissing,     //SaveNativePictureFormatref objMissing,     //SaveFormsDataref objMissing,     //SaveAsAOCELetter,ref objMissing,     //Encodingref objMissing,     //InsertLineBreaksref objMissing,     //AllowSubstitutionsref objMissing,     //LineEndingref objMissing      //AddBiDiMarks);}#endregion#region 循环合并多个文件(复制合并重复的文件)////// 循环合并多个文件(复制合并重复的文件)////// 模板文件/// 需要合并的文件/// 合并后的输出文件public void CopyMerge(string tempDoc, string[] arrCopies, string outDoc){object objMissing = Missing.Value;object objFalse = false;object objTarget = WdMergeTarget.wdMergeTargetSelected;object objUseFormatFrom = WdUseFormattingFrom.wdFormattingFromSelected;try{//打开模板文件Open(tempDoc);foreach (string strCopy in arrCopies){objDocLast.Merge(strCopy,                //FileName   ref objTarget,          //MergeTargetref objMissing,         //DetectFormatChangesref objUseFormatFrom,   //UseFormattingFromref objMissing          //AddToRecentFiles);objDocBeforeLast = objDocLast;objDocLast = objApp.ActiveDocument;if (objDocBeforeLast != null){objDocBeforeLast.Close(ref objFalse,     //SaveChangesref objMissing,   //OriginalFormatref objMissing    //RouteDocument);}}//保存到输出文件SaveAs(outDoc);foreach (Document objDocument in objApp.Documents){objDocument.Close(ref objFalse,     //SaveChangesref objMissing,   //OriginalFormatref objMissing    //RouteDocument);}}finally{objApp.Quit(ref objMissing,     //SaveChangesref objMissing,     //OriginalFormatref objMissing      //RoutDocument);objApp = null;}}////// 循环合并多个文件(复制合并重复的文件)////// 模板文件/// 需要合并的文件/// 合并后的输出文件public void CopyMerge(string tempDoc, string strCopyFolder, string outDoc){string[] arrFiles = Directory.GetFiles(strCopyFolder);CopyMerge(tempDoc, arrFiles, outDoc);}#endregion#region 循环合并多个文件(插入合并文件)////// 循环合并多个文件(插入合并文件)////// 模板文件/// 需要合并的文件/// 合并后的输出文件public void InsertMerge(string tempDoc, string[] arrCopies, string outDoc){object objMissing = Missing.Value;object objFalse = false;object confirmConversion = false;object link = false;object attachment = false;try{//打开模板文件Open(tempDoc);int index = 1;foreach (string strCopy in arrCopies){objApp.Selection.InsertFile(strCopy,ref objMissing,ref confirmConversion,ref link,ref attachment);object oPageBreak = WdBreakType.wdPageBreak;objApp.Selection.InsertBreak(ref oPageBreak);status_Index = index;index++;}//保存到输出文件SaveAs(outDoc);foreach (Document objDocument in objApp.Documents){objDocument.Close(ref objFalse,     //SaveChangesref objMissing,   //OriginalFormatref objMissing    //RouteDocument);}}finally{objApp.Quit(ref objMissing,     //SaveChangesref objMissing,     //OriginalFormatref objMissing      //RoutDocument);objApp = null;status_Index = -1;}}////// 循环合并多个文件(插入合并文件)////// 模板文件/// 需要合并的文件/// 合并后的输出文件public void InsertMerge(string tempDoc, string strCopyFolder, string outDoc){string[] arrFiles = Directory.GetFiles(strCopyFolder);string url = "";string hou = "";List<int> sysIndexs = new List<int>();foreach (var item in arrFiles){url = Path.GetDirectoryName(item);hou = Path.GetExtension(item);string name = Path.GetFileNameWithoutExtension(item);int index = Convert.ToInt32(name);sysIndexs.Add(index);}sysIndexs.Sort();string[] arrFiles2 = new string[arrFiles.Length];int index1 = 0;foreach (var item in sysIndexs){string name = url + "\\" + item + hou;arrFiles2[index1] = name;index1++;}InsertMerge(tempDoc, arrFiles2, outDoc);}#endregion}
}

主界面调用代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WordHellper
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){FolderBrowserDialog dialog = new FolderBrowserDialog();dialog.Description = "请选择文件夹路径";// dialog.SelectedPath = path;//dialog.RootFolder = Environment.SpecialFolder.Programs;if (dialog.ShowDialog() == DialogResult.OK){string foldPath = dialog.SelectedPath;textBox1.Text = foldPath;}}private void button2_Click(object sender, EventArgs e){string templatePathAll = Environment.CurrentDirectory + "\\合并文档.docx";//一般是一个空文档string filesPath = textBox1.Text.Trim();//一个文件夹目录,里面是需要合并的文档string Path = Environment.CurrentDirectory + "\\保存文档.docx";//输出文档路径//WordDocumentMerger wordDocMerger = new WordDocumentMerger();//wordDocMerger.InsertMerge(templatePathAll, filesPath, Path);Task task = new Task(() =>{Console.WriteLine("使用System.Threading.Tasks.Task执行异步操作.");WordDocumentMerger wordDocMerger = new WordDocumentMerger();wordDocMerger.InsertMerge(templatePathAll, filesPath, Path);while (true){this.Invoke((EventHandler)delegate{label1.Text = WordDocumentMerger.status_Index.ToString();});Thread.Sleep(1000);}});task.Start();}}
}
返回列表