c#

位置:IT落伍者 >> c# >> 浏览文章

浅析C#合并多个WORD文档的具体实现方法


发布日期:2019年11月06日
 
浅析C#合并多个WORD文档的具体实现方法

今天因为客户需要需要将多个WORD文档合并成为一个WORD文档其中对WORD文档的合并方式分两种形式

一是复制合并;

一是插入合并即将多个文档按照先后顺序合并到另一个文档中

代码如下:

using System;

using SystemCollectionsGeneric;

using SystemText;

using MicrosoftOfficeInteropWord;

using SystemReflection;

using SystemIO;

using SystemDiagnostics;

namespace EipsoftCommon

{

/// <summary>

/// Word文档合并类

/// </summary>

public class WordDocumentMerger

{

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 = SystemReflectionMissingValue;

objDocLast = objAppDocumentsOpen(

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

);

objDocLastActivate();

}

#endregion

#region 保存文件到输出模板

private void SaveAs(string outDoc)

{

object objMissing = SystemReflectionMissingValue;

object objOutDoc = outDoc;

objDocLastSaveAs(

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 循环合并多个文件(复制合并重复的文件)

/// <summary> /// 循环合并多个文件(复制合并重复的文件) /// </summary>

/// <param name=tempDoc>模板文件</param>

/// <param name=arrCopies>需要合并的文件</param>

/// <param name=outDoc>合并后的输出文件</param>

public void CopyMerge(string tempDoc string[] arrCopies string outDoc)

{

object objMissing = MissingValue;

object objFalse = false;

object objTarget = WdMergeTargetwdMergeTargetSelected;

object objUseFormatFrom = WdUseFormattingFromwdFormattingFromSelected;

try {

//打开模板文件

Open(tempDoc);

foreach (string strCopy in arrCopies)

{ objDocLastMerge( strCopy

//FileName

ref objTarget //MergeTarget

ref objMissing //DetectFormatChanges

ref objUseFormatFrom //UseFormattingFrom

ref objMissing //AddToRecentFiles

);

objDocBeforeLast = objDocLast;

objDocLast = objAppActiveDocument;

if (objDocBeforeLast != null)

{

objDocBeforeLastClose(

ref objFalse //SaveChanges

ref objMissing //OriginalFormat

ref objMissing //RouteDocument

);

}

}

//保存到输出文件

SaveAs(outDoc);

foreach (Document objDocument in objAppDocuments)

{

objDocumentClose(

ref objFalse //SaveChanges

ref objMissing //OriginalFormat

ref objMissing //RouteDocument

);

}

}

finally

{

objAppQuit(

ref objMissing //SaveChanges

ref objMissing //OriginalFormat

ref objMissing //RoutDocument

);

objApp = null;

}

}

/// <summary> /// 循环合并多个文件(复制合并重复的文件) /// </summary>

/// <param name=tempDoc>模板文件</param>

/// <param name=arrCopies>需要合并的文件</param>

/// <param name=outDoc>合并后的输出文件</param>

public void CopyMerge(string tempDoc string strCopyFolder string outDoc)

{

string[] arrFiles = DirectoryGetFiles(strCopyFolder);

CopyMerge(tempDoc arrFiles outDoc);

}

#endregion

#region 循环合并多个文件(插入合并文件)

/// <summary> /// 循环合并多个文件(插入合并文件) /// </summary>

/// <param name=tempDoc>模板文件</param>

/// <param name=arrCopies>需要合并的文件</param>

/// <param name=outDoc>合并后的输出文件</param>

public void InsertMerge(string tempDoc string[] arrCopies string outDoc)

{

object objMissing = MissingValue;

object objFalse = false;

object confirmConversion = false;

object link = false;

object attachment = false;

try

{

//打开模板文件

Open(tempDoc);

foreach (string strCopy in arrCopies)

{

objAppSelectionInsertFile(

strCopy

ref objMissing

ref confirmConversion

ref link

ref attachment

);

}

//保存到输出文件

SaveAs(outDoc);

foreach (Document objDocument in objAppDocuments)

{

objDocumentClose(

ref objFalse //SaveChanges

ref objMissing //OriginalFormat

ref objMissing //RouteDocument

);

}

}

finally

{

objAppQuit(

ref objMissing //SaveChanges

ref objMissing //OriginalFormat

ref objMissing //RoutDocument

);

objApp = null;

}

}

/// <summary>

/// 循环合并多个文件(插入合并文件)

/// </summary>

/// <param name=tempDoc>模板文件</param>

/// <param name=arrCopies>需要合并的文件</param>

/// <param name=outDoc>合并后的输出文件</param>

public void InsertMerge(string tempDoc string strCopyFolder string outDoc)

{

string[] arrFiles = DirectoryGetFiles(strCopyFolder);

InsertMerge(tempDoc arrFiles outDoc);

}

#endregion

}

}

               

上一篇:C#封装Word常用操作类

下一篇:c#画三角形,并填充颜色