加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#根据Word模版生成Word文件

发布时间:2020-12-15 05:47:41 所属栏目:百科 来源:网络整理
导读:本文实例为大家分享了C#根据Word模版生成Word文的具体代码,供大家参考,具体内容如下 1、指定的word模版 2、生成word类 添加com Microsoft word 11.0 Object Library 引用 using System;using System.Collections.Generic;using System.Data;using System.W

本文实例为大家分享了C#根据Word模版生成Word文的具体代码,供大家参考,具体内容如下

1、指定的word模版

2、生成word类

添加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进程
    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>
    /// 模版包含头部信息和表格,表格重复使用
    /// </summary>
    /// <param name="dt">重复表格的数据</param>
    /// <param name="expPairColumn">word中要替换的表达式和表格字段的对应关系</param>
    /// <param name="simpleExpPairValue">简单的非重复型数据</param>
    public bool GenerateWord(DataTable dt,Dictionary<string,string> expPairColumn,string> simpleExpPairValue)
    {
      if (!File.Exists(tempFile.ToString()))
      {
        MessageBox.Show(string.Format("{0}模版文件不存在,请先设置模版文件。",tempFile.ToString()));
        return false;
      }
      try
      {
        wApp = new Word.Application();
 
        wApp.Visible = false;
 
        wDoc = wApp.Documents.Add(ref tempFile,ref missing,ref missing);
 
        wDoc.Activate();// 当前文档置前
 
        bool isGenerate = false;
 
        if (simpleExpPairValue != null && simpleExpPairValue.Count > 0)
          isGenerate = ReplaceAllRang(simpleExpPairValue);
 
        // 表格有重复
        if (dt != null && dt.Rows.Count > 0 && expPairColumn != null && expPairColumn.Count > 0)
          isGenerate = GenerateTable(dt,expPairColumn);
 
        if (isGenerate)
          wDoc.SaveAs(ref saveFile,ref missing);
 
        DisposeWord();
 
        return true;
      }
      catch (Exception ex)
      {
        MessageBox.Show("生成失败" + ex.Message);
        return false;
      }
    }
 
    /// <summary>
    /// 单个替换 模版没有重复使用的表格
    /// </summary>
    /// <param name="dc">要替换的</param>
    public bool GenerateWord(Dictionary<string,string> dc)
    {
      return GenerateWord(null,null,dc);
    }
 
 
    private bool GenerateTable(DataTable dt,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,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 replaceValue,ref replaceArea,ref missing);
        }
        return true;
      }
      catch (Exception ex)
      {
        DisposeWord();
        MessageBox.Show(string.Format("{0}模版中没有找到指定的要替换的表达式。{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);
        }
        return true;
      }
      catch (Exception ex)
      {
        MessageBox.Show(string.Format("{0}模版中没有找到指定的要替换的表达式。{1}",ex.Message));
        return false;
      }
    }
 
    private void DisposeWord()
    {
      object saveOption = Word.WdSaveOptions.wdSaveChanges;
 
      wDoc.Close(ref saveOption,ref missing);
 
      saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
 
      wApp.Quit(ref saveOption,ref missing); //关闭Word进程
    }
  }
}

3、效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读