1 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Word; namespace QHRMS // 根据自己需要修改命名空间
{
public class CreateWordHelper
{
private _Application wordApp = null;
private _Document wordDoc = null;
public _Application Application
{
get
{
return wordApp;
}
set
{
wordApp = value;
}
}
public _Document Document
{
get
{
return wordDoc;
}
set
{
wordDoc = value;
}
} // 通过模板创建新文档
public bool CreateNewDocument(string filePath)
{
try
{ killWinWordProcess();
//wordApp=new Microsoft.Office.Interop.Word.Application();
wordApp = new ApplicationClass();
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
wordApp.Visible = false;
object missing = System.Reflection.Missing.Value;
object templateName = filePath;
wordDoc = wordApp.Documents.Open(ref templateName, 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);
return true;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return false;
}
} // 保存新文件
public void SaveDocument(string filePath)
{
object fileName = filePath;
object format = WdSaveFormat.wdFormatDocument;//保存格式
object miss = System.Reflection.Missing.Value;
wordDoc.SaveAs(ref fileName, ref format, ref miss,
ref miss, ref miss, ref miss, ref miss,
ref miss, ref miss, ref miss, ref miss,
ref miss, ref miss, ref miss, ref miss,
ref miss);
//关闭wordDoc,wordApp对象
object SaveChanges = WdSaveOptions.wdSaveChanges;
object OriginalFormat = WdOriginalFormat.wdOriginalDocumentFormat;
object RouteDocument = false;
wordDoc.Close(ref SaveChanges, ref OriginalFormat, ref RouteDocument);
wordApp.Quit(ref SaveChanges, ref OriginalFormat, ref RouteDocument);
} // 在书签处插入值
public bool InsertValue(string bookmark, string value)
{
object bkObj = bookmark;
if (wordApp.ActiveDocument.Bookmarks.Exists(bookmark))
{
wordApp.ActiveDocument.Bookmarks.get_Item(ref bkObj).Select();
wordApp.Selection.TypeText(value);
return true;
}
return false;
} // 插入表格,bookmark书签
public Table InsertTable(string bookmark, int rows, int columns, float width)
{
object miss = System.Reflection.Missing.Value;
object oStart = bookmark;
Range range = wordDoc.Bookmarks.get_Item(ref oStart).Range;//表格插入位置
Table newTable = wordDoc.Tables.Add(range, rows, columns, ref miss, ref miss);
//设置表的格式
newTable.Borders.Enable = ; //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过)
newTable.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth050pt;//边框宽度
if (width != )
{
newTable.PreferredWidth = width;//表格宽度
}
newTable.AllowPageBreaks = false;
return newTable;
} // 合并单元格 表id,开始行号,开始列号,结束行号,结束列号
public void MergeCell(int n, int row1, int column1, int row2, int column2)
{
wordDoc.Content.Tables[n].Cell(row1, column1).Merge(wordDoc.Content.Tables[n].Cell(row2, column2));
} // 合并单元格 表名,开始行号,开始列号,结束行号,结束列号
public void MergeCell(Microsoft.Office.Interop.Word.Table table, int row1, int column1, int row2, int column2)
{
table.Cell(row1, column1).Merge(table.Cell(row2, column2));
} // 设置表格内容对齐方式 Align水平方向,Vertical垂直方向(左对齐,居中对齐,右对齐分别对应Align和Vertical的值为-1,0,1)Microsoft.Office.Interop.Word.Table table
public void SetParagraph_Table(int n, int Align, int Vertical)
{
switch (Align)
{
case -: wordDoc.Content.Tables[n].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; break;//左对齐
case : wordDoc.Content.Tables[n].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; break;//水平居中
case : wordDoc.Content.Tables[n].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight; break;//右对齐
}
switch (Vertical)
{
case -: wordDoc.Content.Tables[n].Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalTop; break;//顶端对齐
case : wordDoc.Content.Tables[n].Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; break;//垂直居中
case : wordDoc.Content.Tables[n].Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalBottom; break;//底端对齐
}
} // 设置单元格内容对齐方式
public void SetParagraph_Table(int n, int row, int column, int Align, int Vertical)
{
switch (Align)
{
case -: wordDoc.Content.Tables[n].Cell(row, column).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; break;//左对齐
case : wordDoc.Content.Tables[n].Cell(row, column).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; break;//水平居中
case : wordDoc.Content.Tables[n].Cell(row, column).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight; break;//右对齐
}
switch (Vertical)
{
case -: wordDoc.Content.Tables[n].Cell(row, column).Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalTop; break;//顶端对齐
case : wordDoc.Content.Tables[n].Cell(row, column).Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; break;//垂直居中
case : wordDoc.Content.Tables[n].Cell(row, column).Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalBottom; break;//底端对齐
} } // 设置表格字体
public void SetFont_Table(Microsoft.Office.Interop.Word.Table table, string fontName, double size)
{
if (size != )
{
table.Range.Font.Size = Convert.ToSingle(size);
}
if (fontName != "")
{
table.Range.Font.Name = fontName;
}
} // 设置单元格字体
public void SetFont_Table(int n, int row, int column, string fontName, double size, int bold)
{
if (size != )
{
wordDoc.Content.Tables[n].Cell(row, column).Range.Font.Size = Convert.ToSingle(size);
}
if (fontName != "")
{
wordDoc.Content.Tables[n].Cell(row, column).Range.Font.Name = fontName;
}
wordDoc.Content.Tables[n].Cell(row, column).Range.Font.Bold = bold;// 0 表示不是粗体,其他值都是
} // 是否使用边框,n表格的序号,use是或否
// 该处边框参数可以用int代替bool可以让方法更全面
// 具体值方法中介绍
public void UseBorder(int n, bool use)
{
if (use)
{
wordDoc.Content.Tables[n].Borders.Enable = ;
//允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)
}
else
{
wordDoc.Content.Tables[n].Borders.Enable = ;
}
} // 给表格插入一行,n表格的序号从1开始记
public void AddRow(int n)
{
object miss = System.Reflection.Missing.Value;
wordDoc.Content.Tables[n].Rows.Add(ref miss);
} // 给表格添加一行
public void AddRow(Microsoft.Office.Interop.Word.Table table)
{
object miss = System.Reflection.Missing.Value;
table.Rows.Add(ref miss);
} // 给表格插入rows行,n为表格的序号
public void AddRow(int n, int rows)
{
object miss = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];
for (int i = ; i < rows; i++)
{
table.Rows.Add(ref miss);
}
} // 删除表格第rows行,n为表格的序号
public void DeleteRow(int n, int row)
{
Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];
table.Rows[row].Delete();
} // 给表格中单元格插入元素,table所在表格,row行号,column列号,value插入的元素
public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int column, string value)
{
table.Cell(row, column).Range.Text = value;
} // 给表格中单元格插入元素,n表格的序号从1开始记,row行号,column列号,value插入的元素
public void InsertCell(int n, int row, int column, string value)
{
wordDoc.Content.Tables[n].Cell(row, column).Range.Text = value;
} // 给表格插入一行数据,n为表格的序号,row行号,columns列数,values插入的值
public void InsertCell(int n, int row, int columns, string[] values)
{
Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];
for (int i = ; i < columns; i++)
{
table.Cell(row, i + ).Range.Text = values[i];
}
} // 插入图片
public void InsertPicture(string bookmark, string picturePath, float width, float hight)
{
object miss = System.Reflection.Missing.Value;
object oStart = bookmark;
Object linkToFile = false; //图片是否为外部链接
Object saveWithDocument = true; //图片是否随文档一起保存
object range = wordDoc.Bookmarks.get_Item(ref oStart).Range;//图片插入位置
wordDoc.InlineShapes.AddPicture(picturePath, ref linkToFile, ref saveWithDocument, ref range);
wordDoc.Application.ActiveDocument.InlineShapes[].Width = width; //设置图片宽度
wordDoc.Application.ActiveDocument.InlineShapes[].Height = hight; //设置图片高度
} // 插入一段文字,text为文字内容
public void InsertText(string bookmark, string text)
{
object oStart = bookmark;
object range = wordDoc.Bookmarks.get_Item(ref oStart).Range;
Paragraph wp = wordDoc.Content.Paragraphs.Add(ref range);
wp.Format.SpaceBefore = ;
wp.Range.Text = text;
wp.Format.SpaceAfter = ;
wp.Range.InsertParagraphAfter();
wordDoc.Paragraphs.Last.Range.Text = "\n";
} // 杀掉winword.exe进程
public void killWinWordProcess()
{
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD");
foreach (System.Diagnostics.Process process in processes)
{
bool b = process.MainWindowTitle == "";
if (process.MainWindowTitle == "")
{
process.Kill();
}
}
}
}
}

简单的使用例子:

1、先建好Word文档,设置好排版、插入标签

2、代码如下:

private void button1_Click(object sender, EventArgs e)
{
Report report = new Report();
report.CreateNewDocument(Application.StartupPath + "\\WordDome.doc"); //模板路径
report.InsertValue("date1", "09月04日");//在书签处插入值
report.InsertValue("date2", "09月05日");
report.InsertValue("date3", "09月06日");
report.InsertValue("date4", "09月07日");
report.InsertValue("date5", "09月08日");
report.InsertValue("date6", "09月09日");
report.InsertValue("date7", "09月10日"); DataTable dtSource= GetTestDT(); int xx = dtSource.Rows.Count;
report.AddRow(, xx);
for (int i = ; i < xx; i++)
{
string[] values = { dtSource.Rows[i]["DEPT_NAME"].ToString(), dtSource.Rows[i]["C1"].ToString(), dtSource.Rows[i]["C2"].ToString(), dtSource.Rows[i]["C3"].ToString(),
dtSource.Rows[i]["C4"].ToString(),dtSource.Rows[i]["C5"].ToString(), dtSource.Rows[i]["C6"].ToString(), dtSource.Rows[i]["C7"].ToString()};
report.InsertCell(, + i, , values); // 给表格插入一行数据,n为表格的序号,row行号,columns列数,values插入的值
}
       string savename = @"D:\WordDemo" + DateTime.Now.ToString("yyyyMMdd").Trim() + ".doc";//默认名称
       SaveFileDialog saveFileDialog = new SaveFileDialog();
       saveFileDialog.Filter = "doc|*.doc|所有文件|*.*";
       saveFileDialog.FilterIndex = ;
       saveFileDialog.FileName = savename;
       saveFileDialog.RestoreDirectory = true;
       if (saveFileDialog.ShowDialog() == DialogResult.OK)
       {
         savename = saveFileDialog.FileName;//设置保存的路径及文件名
       }
       try
       {
         report.SaveDocument(savename);//保存文件
         MessageBox.Show("保存成功!", "提示");
       }
       catch(Exception ex)
       {
         MessageBox.Show("保存失败:"+ex, "提示");
       }
}

最新文章

  1. Linux发邮件之mail命令
  2. CentOS 7 最小化安装的无线网络配置
  3. pthread 学习系列 case2-- 使用互斥锁
  4. MyISAM 和 InnoDB 讲解
  5. javaSE之如何将一个文件复制到另一个文件
  6. 【Binary Tree Preorder Traversal】cpp
  7. 矩阵-DirectX与OpenGL的不同
  8. RequireJS进阶(一) 转
  9. 大公司最喜欢问的Java集合类面试题
  10. 【最大流】BAPC2014 A Avoiding the Apocalypse (Codeforces GYM 100526)
  11. UI产品设计流程中的14个要点
  12. SpriteBuilder修改CCB文件中的子CCB文件需要注意的一个地方
  13. Microsoft Azure Tutorial: Build your first movie inventory web app with just a few lines of code
  14. 论文阅读笔记十七:RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation(CVPR2017)
  15. day60 pymysql
  16. Linux内核分析作业第八周
  17. VB|xp风格:终于解决了“图片优化软件”在部分xp系统上无法启动的问题。
  18. DevExpress 数据绑定
  19. 多线程串口编程工具CserialPort类(附VC基于MFC单文档协议通讯源程序及详细编程步骤)
  20. Java第三阶段学习(八:网络通信协议、UDP与TCP协议)

热门文章

  1. Python作业篇 day02
  2. windows系统下 VUE cli手脚架环境安装
  3. Hadoop入门概念
  4. luogu P2762 太空飞行计划问题
  5. 069、Java面向对象之对象引用传递
  6. MyEclipse Hibernate逆向工程的使用
  7. POJ 2718 Smallest Difference dfs枚举两个数差最小
  8. 赶在EW2020之前,FreeRTOS发布V10.3.0,将推出首个LTS版本
  9. Windows下 dmp文件的产生
  10. 013.Oracle数据库,SUBSTR取子字符串