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、效果 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读