欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于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)文章

  • C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法

    C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)圖形區(qū)域組合操作的方法,涉及C#操作圖片實(shí)現(xiàn)組合操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C#鉤子Hook監(jiān)聽鍵盤鼠標(biāo)事件實(shí)現(xiàn)窗體自動(dòng)關(guān)閉

    C#鉤子Hook監(jiā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)聽鍵盤鼠標(biāo)事件實(shí)現(xiàn)窗體自動(dòng)關(guān)閉功能,感興趣的可以了解下
    2025-01-01
  • 基于C#實(shí)現(xiàn)語音合成播報(bào)器

    基于C#實(shí)現(xiàn)語音合成播報(bào)器

    這篇文章主要為大家詳細(xì)介紹了一個(gè)基于System.Speech的語音交互方案,可以在windows上實(shí)現(xiàn)語音播報(bào)指定文本,感興趣的小伙伴可以參考一下
    2025-03-03
  • 使用revit api畫垂直于風(fēng)管的風(fēng)管示例

    使用revit api畫垂直于風(fēng)管的風(fēng)管示例

    這篇文章主要介紹了使用revit api畫垂直于風(fēng)管的風(fēng)管示例,需要的朋友可以參考下
    2014-03-03
  • 深入c# 類和結(jié)構(gòu)的區(qū)別總結(jié)詳解

    深入c# 類和結(jié)構(gòu)的區(qū)別總結(jié)詳解

    本篇文章是對(duì)c#中類和結(jié)構(gòu)的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#的this關(guān)鍵字的2種用法

    C#的this關(guān)鍵字的2種用法

    這篇文章主要給大家分享的是C#的this關(guān)鍵字的2種用法,在使用C#的過程中,發(fā)現(xiàn)this關(guān)鍵是比較少用的,但是在下面這二個(gè)場(chǎng)合下是必須要使用的,不使用它是解決不了問題。下面我們就來看看文章的具體內(nèi)容吧
    2021-10-10
  • C#中字符串拼接方式及其性能分析對(duì)比

    C#中字符串拼接方式及其性能分析對(duì)比

    在C#編程中字符串拼接是一種常見且基礎(chǔ)的操作,廣泛應(yīng)用于各種場(chǎng)景,如動(dòng)態(tài)生成SQL查詢,構(gòu)建日志信息等,本文為大家整理了C#中字符串拼接的常見6種方式及其使用BenchmarkDotNet進(jìn)行性能分析對(duì)比,需要的可以參考下
    2024-12-12
  • C#8.0新語法using?declaration

    C#8.0新語法using?declaration

    這篇文章介紹了C#8.0的新語法using?declaration,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#8.0 中開啟默認(rèn)接口實(shí)現(xiàn)方法

    C#8.0 中開啟默認(rèn)接口實(shí)現(xiàn)方法

    這篇文章主要介紹了C#8.0 中開啟默認(rèn)接口實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧的相關(guān)資料
    2019-05-05
  • c# 二分查找算法

    c# 二分查找算法

    折半搜索,也稱二分查找算法、二分搜索,是一種在有序數(shù)組中查找某一特定元素的搜索算法
    2013-10-10

最新評(píng)論