基于C#編寫一個(gè)合并多個(gè)Word文檔的工具
更新時(shí)間:2024年02月02日 10:53:56 作者:搬磚的詩人Z
這篇文章主要為大家詳細(xì)介紹了如何使用C#編寫一個(gè)小工具,可以實(shí)現(xiàn)把多個(gè)word文檔進(jìn)行合并成一個(gè)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>
/// 合并第幾個(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 打開文件
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的拼寫檢查
objDocLast.ShowSpellingErrors = false;//關(guān)閉Word的拼寫錯(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
{
//打開模板文件
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
{
//打開模板文件
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#編寫一個(gè)合并多個(gè)Word文檔的工具的詳細(xì)內(nèi)容,更多關(guān)于C#合并多個(gè)Word的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果
這篇文章主要為大家詳細(xì)介紹了Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09
C#實(shí)現(xiàn)將字符串轉(zhuǎn)換成日期格式的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將字符串轉(zhuǎn)換成日期格式的方法,涉及C#操作時(shí)間及字符串的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-05-05
C#實(shí)現(xiàn)顯示CPU使用率與內(nèi)存使用率
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)顯示CPU使用率與內(nèi)存使用率,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下2022-12-12
C#使用base64對(duì)字符串進(jìn)行編碼和解碼的測(cè)試
今天小編就為大家分享一篇關(guān)于C#使用base64對(duì)字符串進(jìn)行編碼和解碼的測(cè)試,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
C#使用IronPython調(diào)用python代碼的實(shí)現(xiàn)示例
本文主要介紹了在C#中使用IronPython調(diào)用Python代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01

