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 个数据均匀的分…

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

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

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

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

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

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

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

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

MySQL数据库入门

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

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

随着移动互联网的普及和用户需求的多样化&#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. 配置系…

【DDD】学习笔记-什么是模型

从领域驱动的战略设计进入战术设计&#xff0c;简单说来&#xff0c;就是跨过系统视角的限界上下文边界进入它的内部&#xff0c;从分层架构的逻辑分层进入到每一层的内部。在思考内部的设计细节时&#xff0c;首先需要思考的问题就是&#xff1a;什么是模型&#xff08;Model&…

NETX90-多协议通讯芯片

随着作为信息物理系统核心技术的工业物联网的发展&#xff0c;Hilscher 基于 netX 51/52成功开发了新一代网络控制器netX90&#xff0c;其安全性是产品的核心价值。可实现更高性能的集成&#xff0c;并提高功率效率等级&#xff0c;凭借其较小的外形尺寸能够满足规格尺寸更小的…

css新手教程

css新手教程 课程&#xff1a;14、盒子模型及边框使用_哔哩哔哩_bilibili 一.什么是CSS 1.什么是CSS Cascading Style Sheet 层叠样式表。 CSS&#xff1a;表现&#xff08;美化网页&#xff09; 字体&#xff0c;颜色&#xff0c;边距&#xff0c;高度&#xff0c;宽度&am…

Linux信号详解~

目录 前言 一、初识信号 二、信号的概念 三、信号的发送与捕捉 3.1 信号的发送 3.1.1 kill 命令 3.1.2 kill 函数 3.1.3 raise函数 3.1.4 abort函数 3.2 信号的捕捉 3.2.1 signal函数 3.2.2 sigaction函数 3.2.3 图示 四、信号的产生 4.1 硬件异常产生信号 4.2 …

CMake Msys2 搭配vscode

(一)MSYS2介绍 MSYS2&#xff08;Minimal SYStem 2&#xff09;是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于Linux的shell环境&#xff0c;可以在Windows系统中编译和运行许多Linux应用程序和工具。 MSYS2基于MinGW-w64平台&#xff0c;提供了…

Linux---进程间通信 | 管道 | PIPE | MKFIFO | 共享内存 | 消息队列

管道 管道是UNIX中最古老的进程间通信的形式&#xff0c;我们把从一个进程连接到另一个进程的数据流称为一个管道。 一个文件&#xff0c;可以被多个进程打开吗&#xff1f;可以&#xff0c;那如果一个进程打开文件&#xff0c;往文件里面写数据&#xff0c;另一个进程打开文…

MySQL 中 int(1) 和 int(10) 会影响存储的长度吗

一、MySQL 中 int(1) 和 int(10) 在MySQL数据库设计中&#xff0c;经常会遇到 int 类型的字段&#xff0c;并会习惯性的指定长度&#xff0c;比如&#xff1a; int(1) 和int(10)&#xff0c;而一些新手可能会误解它们之间的关系&#xff0c;认为 int(10) 能够存储更多的数据。…

Android Camera2 API 后台服务

最近在搞CameraAPP需要将Camera2弄成一个后台服务&#xff0c;发现跟预览的Activity没多大变动只是加了Service&#xff0c;和一些简单的修改。之前的公司也用到Camera2&#xff0c;发现用到的时候还是蛮多的所以记录一下&#xff0c;代码在文章末尾 camera2的结构如下&#x…

Peter算法小课堂—Dijkstra最短路算法

大家好&#xff0c;我们人见人爱、花见花开、车见车爆胎的Peter Pan来啦&#xff0c;hia~hia~hia。今天&#xff0c;我们今天来学习毒瘤的最短路算法啦。啊这……什么是Dijkstra算法&#xff1f;长文警告⚠ 正经点啊 手算样例 大家思考一下&#xff0c;你在手算样例的时候&am…

企业申请sectigo ip https证书

Sectigo&#xff08;原名Comodo&#xff0c;在整合https证书业务后改名为Sectigo&#xff09;是一家知名的数字证书提供商&#xff0c;拥有多种类型的数字证书&#xff0c;例如单域名https证书、多域名https证书、通配符https证书、IP https证书和代码签名证书等满足各类用户的…