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();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分别用JavaScript,Java,PHP,C++实现桶排序的算法(附带源码)

桶排序是计数排序的升级版。它利用了函数的映射关系&#xff0c;高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效&#xff0c;我们需要做到这两点&#xff1a; 在额外空间充足的情况下&#xff0c;尽量增大桶的数量使用的映射函数能够将输入的 N 个数据均匀的分…

关闭windows系统的自动更新的6种方法 详细介绍

关闭Windows系统的自动更新可以通过多种方法实现&#xff0c;以下将详细介绍六种不同的方法。请注意&#xff0c;关闭自动更新可能会使您的系统面临安全风险&#xff0c;因为您将不会及时接收到最新的安全补丁和系统更新。在执行以下任何操作之前&#xff0c;请确保您了解潜在的…

多线程读写文件问题

多线程读写同个文件会不会有访问冲突或者异常&#xff1f;我们写个程序来测试一下 /*** Created by fangruibin* 测试多线程读写文件*/#include <iostream> #include <pthread.h> #include <unistd.h> #include <string.h>const char* fileName &quo…

【C语言】字符串函数介绍

目录 前言&#xff1a; 1. strlen 函数 函数介绍 strlen 函数的使用 strlen 函数的模拟实现 2. strcpy 函数 函数介绍 strcpy 函数的使用 strcpy 函数的模拟实现 3. strcat 函数 函数介绍 strcat 函数的使用 strcat 函数的模拟实现 4. strcmp 函数 函数介绍 st…

前端工程化之:webpack1-12(常用扩展)

目录 前言 一、CleanWebpackPlugin 二、HtmlWebpackPlugin 三、CopyPlugin 四、webpack-dev-server 五 、file-loader 六、url-loader 七、路径问题 前言 由于 webpack 、 webpack-cli 、 webpack-dev-server 会存在版本不兼容问题&#xff0c;所以这里使用的版本如下&…

4K Video Downloader forMac/win:畅享高清视频下载的终极利器!

在如今的数字时代&#xff0c;高清视频已经成为人们生活中不可或缺的一部分。无论是观看精彩的电影、音乐视频&#xff0c;还是学习教育类的在线课程&#xff0c;我们都希望能够以最清晰流畅的方式来欣赏。而为了满足这一需求&#xff0c;我们需要一款功能强大的高清视频下载软…

工业平板电脑定制_三防平板电脑安卓主板厂家

工业平板电脑具有IP68级三防品质&#xff0c;采用高强度工业材质制造&#xff0c;结构稳固坚韧&#xff0c;具备较高的抗冲击和防震能力。隔空减震技术进一步加强了产品的抗冲击和防震动功能。广泛应用于工控、医疗、电信、电力、工业自动化设备、汽车检测、制造业等多个领域&a…

Flink实时数仓同步:快照表实战详解

一、背景 在大数据领域&#xff0c;初始阶段业务数据通常被存储于关系型数据库&#xff0c;如MySQL。然而&#xff0c;为满足日常分析和报表等需求&#xff0c;大数据平台采用多种同步方式&#xff0c;以适应这些业务数据的不同存储需求。这些同步存储方式包括离线仓库和实时仓…

MySQL语句 |条件语句 IFNULL 和 COALESCE 的区别

在MySQL中&#xff0c;IFNULL和COALESCE都是用来处理NULL值的函数&#xff0c;但它们之间存在一些重要的差异。 函数定义 IFNULL(expr1, expr2): 如果expr1为NULL&#xff0c;则返回expr2&#xff0c;否则返回expr1。COALESCE(value1, value2, ..., valueN): 返回参数列表中的…

机器人中的数值优化进阶|【三】三次样条曲线推导(下)

机器人中的数值优化进阶|【三】三次样条曲线推导&#xff08;下&#xff09; 接之前的内容&#xff0c;现在开始考虑势场函数 P ( η 1 , . . . , η n − 1 ) 1000 ∑ i 1 n − 1 ∑ j 0 m max ⁡ ( r j − ∣ ∣ η i − o j ∣ ∣ , 0 ) P(\eta_1,...,\eta_{n-1}) 100…

C语言入门到精通之练习35:打印出杨辉三角形(要求打印出10行)

题目&#xff1a;打印出杨辉三角形&#xff08;要求打印出10行&#xff09;。 程序分析&#xff1a; 结构如下图所示&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1代码如下&#xff1a; // Created by www.erdangjiade.com 15/11/9. //#incl…

学习方法分享

工作上的代码实现&#xff0c;不要过度设计&#xff0c;不要想着炫技&#xff0c;要简单务实&#xff0c;“大道至简”。 学习一个方向&#xff08;模块化&#xff09;的知识&#xff0c;不经意间就会涉及到另一个领域&#xff0c;比如从消息队列存储的顺序读/写&#xff0c;延…

计算机网络作业答案(ip地址划分,滑动窗口,距离向量算法)

做一个计算机网络作业答案的存档 6.某单位申请到了一个B类IP地址&#xff0c;其网络标识为130.53&#xff0c;现进行子网划分&#xff0c;若选用的子网掩码为 255.255.224.0&#xff0c;请问:(1&#xff09;可划分为多少个子网?(2)每个子网中的主机数最多为多少台?(3&#…

MySQL数据库入门

MySQL数据库概述 1&#xff0c;为什么要使用数据库2&#xff0c;数据库的相关概念3&#xff0c;常见的数据库管理系统4&#xff0c;MySQL介绍5&#xff0c;关系型数据库和非关系型数据库6&#xff0c;关系型数据库的设计规则7&#xff0c;表的关联关系7.1&#xff0c;一对一7.2…

ubuntu server 22.04.3 配置 wifi

1. 配置 wifi 1.1. 查看系统中的网卡 ls /sys/class/net/ $ ls /sys/class/net/ enp1s0 lo wlo1 1.2. 配置 wifi 1.2.1 一个普通的配置 加入我们的机器可能会链接多个网络中的某一个&#xff1a; 网络热点1&#xff1a;ChinaNet-zNpQ password: 12345…

面试高频知识点:2线程 2.1.4 线程池常用参数

1. 核心池大小&#xff08;Core Pool Size&#xff09; 核心池大小是线程池中始终保持存活的线程数量。当有新的任务提交时&#xff0c;线程池会优先使用核心池中的线程来处理任务。这个参数的合理设置直接影响着线程池的性能。如果设置太小&#xff0c;可能导致无法及时处理任…

短剧小程序开发:打造高效、便捷的娱乐体验

随着移动互联网的普及和用户需求的多样化&#xff0c;短剧小程序作为一种新型的应用形态&#xff0c;逐渐受到了广大用户的青睐。短剧小程序开发旨在为用户提供一种高效、便捷的娱乐体验&#xff0c;让用户在忙碌的生活中轻松享受到精彩的短剧内容。本文将探讨短剧小程序开发的…

0203-2-输入输出系统

第六章&#xff1a;输入输出系统 I/O系统的功能&#xff0c;模型和接口 I/O系统管理的对象是I/O设备和相应的设备控制器。 I/O系统的基本功能 隐藏物理设备的细节与设备的无关性提高处理机和I/O设备的利用率对I/O设备进行控制确保对设备的正确共享错误处理 I/O软件的层次结…

Vite与Webpack打包内存溢出问题优雅处理方式

Vite与Webpack打包内存溢出问题处理 文章目录 Vite与Webpack打包内存溢出问题处理1. Vite1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系统的环境变量 2. Webpack1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系…