基于C#編寫(xiě)一個(gè)合并多個(gè)Word文檔的工具
先要安裝包

幫助類(lèi)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>
/// 合并第幾個(gè)
/// </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 打開(kāi)文件
private void Open(string tempDoc)
{
object objTempDoc = tempDoc;
object objMissing = System.Reflection.Missing.Value;
objDocLast = objApp.Documents.Open(
ref objTempDoc, //FileName
ref objMissing, //ConfirmVersions
ref objMissing, //ReadOnly
ref objMissing, //AddToRecentFiles
ref objMissing, //PasswordDocument
ref objMissing, //PasswordTemplate
ref objMissing, //Revert
ref objMissing, //WritePasswordDocument
ref objMissing, //WritePasswordTemplate
ref objMissing, //Format
ref objMissing, //Enconding
ref objMissing, //Visible
ref objMissing, //OpenAndRepair
ref objMissing, //DocumentDirection
ref objMissing, //NoEncodingDialog
ref objMissing //XMLTransform
);
objDocLast.Activate();
objDocLast.SpellingChecked = false;//關(guān)閉Word的拼寫(xiě)檢查
objDocLast.ShowSpellingErrors = false;//關(guān)閉Word的拼寫(xiě)錯(cuò)誤提示
}
#endregion
#region 保存文件到輸出模板
private void SaveAs(string outDoc)
{
object objMissing = System.Reflection.Missing.Value;
object objOutDoc = outDoc;
objDocLast.SaveAs(
ref objOutDoc, //FileName
ref objMissing, //FileFormat
ref objMissing, //LockComments
ref objMissing, //PassWord
ref objMissing, //AddToRecentFiles
ref objMissing, //WritePassword
ref objMissing, //ReadOnlyRecommended
ref objMissing, //EmbedTrueTypeFonts
ref objMissing, //SaveNativePictureFormat
ref objMissing, //SaveFormsData
ref objMissing, //SaveAsAOCELetter,
ref objMissing, //Encoding
ref objMissing, //InsertLineBreaks
ref objMissing, //AllowSubstitutions
ref objMissing, //LineEnding
ref objMissing //AddBiDiMarks
);
}
#endregion
#region 循環(huán)合并多個(gè)文件(復(fù)制合并重復(fù)的文件)
///
/// 循環(huán)合并多個(gè)文件(復(fù)制合并重復(fù)的文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的輸出文件
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
{
//打開(kāi)模板文件
Open(tempDoc);
foreach (string strCopy in arrCopies)
{
objDocLast.Merge(
strCopy, //FileName
ref objTarget, //MergeTarget
ref objMissing, //DetectFormatChanges
ref objUseFormatFrom, //UseFormattingFrom
ref objMissing //AddToRecentFiles
);
objDocBeforeLast = objDocLast;
objDocLast = objApp.ActiveDocument;
if (objDocBeforeLast != null)
{
objDocBeforeLast.Close(
ref objFalse, //SaveChanges
ref objMissing, //OriginalFormat
ref objMissing //RouteDocument
);
}
}
//保存到輸出文件
SaveAs(outDoc);
foreach (Document objDocument in objApp.Documents)
{
objDocument.Close(
ref objFalse, //SaveChanges
ref objMissing, //OriginalFormat
ref objMissing //RouteDocument
);
}
}
finally
{
objApp.Quit(
ref objMissing, //SaveChanges
ref objMissing, //OriginalFormat
ref objMissing //RoutDocument
);
objApp = null;
}
}
///
/// 循環(huán)合并多個(gè)文件(復(fù)制合并重復(fù)的文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的輸出文件
public void CopyMerge(string tempDoc, string strCopyFolder, string outDoc)
{
string[] arrFiles = Directory.GetFiles(strCopyFolder);
CopyMerge(tempDoc, arrFiles, outDoc);
}
#endregion
#region 循環(huán)合并多個(gè)文件(插入合并文件)
///
/// 循環(huán)合并多個(gè)文件(插入合并文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的輸出文件
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
{
//打開(kāi)模板文件
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, //SaveChanges
ref objMissing, //OriginalFormat
ref objMissing //RouteDocument
);
}
}
finally
{
objApp.Quit(
ref objMissing, //SaveChanges
ref objMissing, //OriginalFormat
ref objMissing //RoutDocument
);
objApp = null;
status_Index = -1;
}
}
///
/// 循環(huán)合并多個(gè)文件(插入合并文件)
///
/// 模板文件
/// 需要合并的文件
/// 合并后的輸出文件
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
}
}
主界面調(diào)用代碼:
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 = "請(qǐng)選擇文件夾路徑";
// 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";//一般是一個(gè)空文檔
string filesPath = textBox1.Text.Trim();//一個(gè)文件夾目錄,里面是需要合并的文檔
string Path = Environment.CurrentDirectory + "\\保存文檔.docx";//輸出文檔路徑
//WordDocumentMerger wordDocMerger = new WordDocumentMerger();
//wordDocMerger.InsertMerge(templatePathAll, filesPath, Path);
Task task = new Task(() =>
{
Console.WriteLine("使用System.Threading.Tasks.Task執(zhí)行異步操作.");
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();
}
}
}
以上就是基于C#編寫(xiě)一個(gè)合并多個(gè)Word文檔的工具的詳細(xì)內(nèi)容,更多關(guān)于C#合并多個(gè)Word的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法
這篇文章主要介紹了C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法,涉及C#操作圖片實(shí)現(xiàn)組合操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C#鉤子Hook監(jiān)聽(tīng)鍵盤(pán)鼠標(biāo)事件實(shí)現(xiàn)窗體自動(dòng)關(guān)閉
鉤子(Hook)的作用主要體現(xiàn)在監(jiān)視和攔截系統(tǒng)或進(jìn)程中的各種事件消息,并進(jìn)行自定義處理,本文主要介紹了C#如何利用鉤子Hook監(jiān)聽(tīng)鍵盤(pán)鼠標(biāo)事件實(shí)現(xiàn)窗體自動(dòng)關(guān)閉功能,感興趣的可以了解下2025-01-01
基于C#實(shí)現(xiàn)語(yǔ)音合成播報(bào)器
這篇文章主要為大家詳細(xì)介紹了一個(gè)基于System.Speech的語(yǔ)音交互方案,可以在windows上實(shí)現(xiàn)語(yǔ)音播報(bào)指定文本,感興趣的小伙伴可以參考一下2025-03-03
使用revit api畫(huà)垂直于風(fēng)管的風(fēng)管示例
這篇文章主要介紹了使用revit api畫(huà)垂直于風(fēng)管的風(fēng)管示例,需要的朋友可以參考下2014-03-03
深入c# 類(lèi)和結(jié)構(gòu)的區(qū)別總結(jié)詳解
本篇文章是對(duì)c#中類(lèi)和結(jié)構(gòu)的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C#8.0 中開(kāi)啟默認(rèn)接口實(shí)現(xiàn)方法
這篇文章主要介紹了C#8.0 中開(kāi)啟默認(rèn)接口實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧的相關(guān)資料2019-05-05

