亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#根據(jù)Word模版生成Word文件

 更新時(shí)間:2017年10月27日 16:27:29   作者:大西瓜3721  
這篇文章主要為大家詳細(xì)介紹了C#根據(jù)Word模版生成Word文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#根據(jù)Word模版生成Word文的具體代碼,供大家參考,具體內(nèi)容如下

1、指定的word模版

2、生成word類(lèi)

添加com Microsoft word 11.0 Object Library 引用

using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;
using System.IO;
 
namespace Headfree.DefUI
{
  public class WordUtility
  {
    private object tempFile = null;
    private object saveFile = null;
    private static Word._Document wDoc = null; //word文檔
    private static Word._Application wApp = null; //word進(jìn)程
    private object missing = System.Reflection.Missing.Value;
 
    public WordUtility(string tempFile, string saveFile)
    {
      this.tempFile = Path.Combine(Application.StartupPath, @tempFile);
      this.saveFile = Path.Combine(Application.StartupPath, @saveFile);
    }
 
    /// <summary>
    /// 模版包含頭部信息和表格,表格重復(fù)使用
    /// </summary>
    /// <param name="dt">重復(fù)表格的數(shù)據(jù)</param>
    /// <param name="expPairColumn">word中要替換的表達(dá)式和表格字段的對(duì)應(yīng)關(guān)系</param>
    /// <param name="simpleExpPairValue">簡(jiǎn)單的非重復(fù)型數(shù)據(jù)</param>
    public bool GenerateWord(DataTable dt, Dictionary<string, string> expPairColumn, Dictionary<string, string> simpleExpPairValue)
    {
      if (!File.Exists(tempFile.ToString()))
      {
        MessageBox.Show(string.Format("{0}模版文件不存在,請(qǐng)先設(shè)置模版文件。", tempFile.ToString()));
        return false;
      }
      try
      {
        wApp = new Word.Application();
 
        wApp.Visible = false;
 
        wDoc = wApp.Documents.Add(ref tempFile, ref missing, ref missing, ref missing);
 
        wDoc.Activate();// 當(dāng)前文檔置前
 
        bool isGenerate = false;
 
        if (simpleExpPairValue != null && simpleExpPairValue.Count > 0)
          isGenerate = ReplaceAllRang(simpleExpPairValue);
 
        // 表格有重復(fù)
        if (dt != null && dt.Rows.Count > 0 && expPairColumn != null && expPairColumn.Count > 0)
          isGenerate = GenerateTable(dt, expPairColumn);
 
        if (isGenerate)
          wDoc.SaveAs(ref saveFile, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
 
        DisposeWord();
 
        return true;
      }
      catch (Exception ex)
      {
        MessageBox.Show("生成失敗" + ex.Message);
        return false;
      }
    }
 
    /// <summary>
    /// 單個(gè)替換 模版沒(méi)有重復(fù)使用的表格
    /// </summary>
    /// <param name="dc">要替換的</param>
    public bool GenerateWord(Dictionary<string, string> dc)
    {
      return GenerateWord(null, null, dc);
    }
 
 
    private bool GenerateTable(DataTable dt, Dictionary<string, string> expPairColumn)
    {
      try
      {
        int tableNums = dt.Rows.Count;
 
        Word.Table tb = wDoc.Tables[1];
 
        tb.Range.Copy();
 
        Dictionary<string, object> dc = new Dictionary<string, object>();
        for (int i = 0; i < tableNums; i++)
        {
          dc.Clear();
 
          if (i == 0)
          {
            foreach (string key in expPairColumn.Keys)
            {
              string column = expPairColumn[key];
              object value = null;
              value = dt.Rows[i][column];
              dc.Add(key, value);
            }
 
            ReplaceTableRang(wDoc.Tables[1], dc);
            continue;
          }
 
          wDoc.Paragraphs.Last.Range.Paste();
 
          foreach (string key in expPairColumn.Keys)
          {
            string column = expPairColumn[key];
            object value = null;
            value = dt.Rows[i][column];
            dc.Add(key, value);
          }
 
          ReplaceTableRang(wDoc.Tables[1], dc);
        }
 
 
        return true;
      }
      catch (Exception ex)
      {
        DisposeWord();
        MessageBox.Show("生成模版里的表格失敗。" + ex.Message);
        return false;
      }
    }
 
    private bool ReplaceTableRang(Word.Table table, Dictionary<string, object> dc)
    {
      try
      {
        object replaceArea = Word.WdReplace.wdReplaceAll;
 
        foreach (string item in dc.Keys)
        {
          object replaceKey = item;
          object replaceValue = dc[item];
          table.Range.Find.Execute(ref replaceKey, ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing, ref missing, ref missing,
           ref replaceValue, ref replaceArea, ref missing, ref missing, ref missing,
           ref missing);
        }
        return true;
      }
      catch (Exception ex)
      {
        DisposeWord();
        MessageBox.Show(string.Format("{0}模版中沒(méi)有找到指定的要替換的表達(dá)式。{1}", tempFile, ex.Message));
        return false;
      }
    }
 
    private bool ReplaceAllRang(Dictionary<string, string> dc)
    {
      try
      {
        object replaceArea = Word.WdReplace.wdReplaceAll;
 
        foreach (string item in dc.Keys)
        {
          object replaceKey = item;
          object replaceValue = dc[item];
          wApp.Selection.Find.Execute(ref replaceKey, ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing, ref missing, ref missing,
           ref replaceValue, ref replaceArea, ref missing, ref missing, ref missing,
           ref missing);
        }
        return true;
      }
      catch (Exception ex)
      {
        MessageBox.Show(string.Format("{0}模版中沒(méi)有找到指定的要替換的表達(dá)式。{1}", tempFile, ex.Message));
        return false;
      }
    }
 
    private void DisposeWord()
    {
      object saveOption = Word.WdSaveOptions.wdSaveChanges;
 
      wDoc.Close(ref saveOption, ref missing, ref missing);
 
      saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
 
      wApp.Quit(ref saveOption, ref missing, ref missing); //關(guān)閉Word進(jìn)程
    }
  }
}

3、效果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#訪問(wèn)SqlServer設(shè)置鏈接超時(shí)的方法

    C#訪問(wèn)SqlServer設(shè)置鏈接超時(shí)的方法

    這篇文章主要介紹了C#訪問(wèn)SqlServer設(shè)置鏈接超時(shí)的方法,涉及CommandTimeout屬性的相關(guān)設(shè)置技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-06-06
  • 淺談C# 類(lèi)的繼承

    淺談C# 類(lèi)的繼承

    本文主要介紹了C# 類(lèi)的繼承相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • C#設(shè)計(jì)模式之觀察者模式實(shí)例講解

    C#設(shè)計(jì)模式之觀察者模式實(shí)例講解

    這篇文章主要介紹了C#設(shè)計(jì)模式之觀察者模式實(shí)例講解,本文詳細(xì)講解了觀察者模式的定義、優(yōu)缺點(diǎn)、代碼實(shí)例等,需要的朋友可以參考下
    2014-10-10
  • 避免在C#循環(huán)中使用await的方法小結(jié)

    避免在C#循環(huán)中使用await的方法小結(jié)

    在C#中,異步編程因其能夠提升應(yīng)用程序性能和響應(yīng)能力而變得越來(lái)越流行,async和await關(guān)鍵字使得編寫(xiě)異步代碼變得更加容易,但如果使用不當(dāng),它們也可能引入一些陷阱,所以本文我們將探討為什么應(yīng)該避免在C#循環(huán)中使用await,并討論一些更高效地處理異步操作的替代方法
    2024-09-09
  • C#計(jì)算器編寫(xiě)代碼

    C#計(jì)算器編寫(xiě)代碼

    這篇文章主要為大家分享了C#計(jì)算器編寫(xiě)代碼,供大家參考,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#迷你猜數(shù)實(shí)例分析

    C#迷你猜數(shù)實(shí)例分析

    這篇文章主要介紹了C#迷你猜數(shù),實(shí)例分析C#操作數(shù)字及數(shù)組的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#通過(guò)System.CommandLine快速生成支持命令行的應(yīng)用程序

    C#通過(guò)System.CommandLine快速生成支持命令行的應(yīng)用程序

    這篇文章介紹了C#通過(guò)System.CommandLine快速生成支持命令行應(yīng)用程序的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#自定義的方法實(shí)現(xiàn)堆棧類(lèi)設(shè)計(jì)

    C#自定義的方法實(shí)現(xiàn)堆棧類(lèi)設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了如何使用C#創(chuàng)建一個(gè)帶有Push方法和Clist類(lèi)的CStack類(lèi),并如何在其中添加和遍歷堆棧數(shù)據(jù),感興趣的可以了解下
    2024-03-03
  • C# Volatile的具體使用

    C# Volatile的具體使用

    本文主要介紹了C# Volatile的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C# Socket的TCP通訊的實(shí)例代碼

    C# Socket的TCP通訊的實(shí)例代碼

    本篇文章主要介紹了C# Socket的TCP通訊,socket通訊方式有兩種:同步和異步,詳細(xì)的介紹了這兩種方法,有興趣的可以了解一下。
    2016-12-12

最新評(píng)論