| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- using Microsoft.Office.Interop.Word;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Y.Utils.OfficeUtils
- {
- public class WordHelper
- {
- 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 void CreateNewDocument(string filePath)
- {
- killWinWordProcess();
- wordApp = new Application();
- 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);
- }
- //保存新文件
- 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 = 1; //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过)
- newTable.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth050pt;//边框宽度
- if (width != 0)
- {
- newTable.PreferredWidth = width;//表格宽度
- }
- newTable.AllowPageBreaks = false;
- return newTable;
- }
- //合并单元格 表名,开始行号,开始列号,结束行号,结束列号
- 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)
- public void SetParagraph_Table(Microsoft.Office.Interop.Word.Table table, int Align, int Vertical)
- {
- switch (Align)
- {
- case -1:
- table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; break;//左对齐
- case0: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; break;//水平居中
- case1: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight; break;//右对齐
- }
- switch (Vertical)
- {
- case -1:
- table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalTop; break;//顶端对齐
- case0: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; break;//垂直居中
- case1: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalBottom; break;//底端对齐
- }
- }
- //设置表格字体
- public void SetFont_Table(Microsoft.Office.Interop.Word.Table table, string fontName, double size)
- {
- if (size != 0)
- {
- table.Range.Font.Size = Convert.ToSingle(size);
- }
- if (fontName != "")
- {
- table.Range.Font.Name = fontName;
- }
- }
- //是否使用边框,n表格的序号,use是或否
- public void UseBorder(int n, bool use)
- {
- if (use)
- {
- wordDoc.Content.Tables[n].Borders.Enable = 1; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)
- }
- else
- {
- wordDoc.Content.Tables[n].Borders.Enable = 2; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)
- }
- }
- //设置表格边框
- public void UseBorder(int n, int type)
- {
- wordDoc.Content.Tables[n].Borders.Enable = type; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)
- }
- //给表格插入一行,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 = 0; i < rows; i++)
- {
- table.Rows.Add(ref miss);
- }
- }
- //给表格中单元格插入元素,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 = 0; i < columns; i++)
- {
- table.Cell(row, i + 1).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[1].Width = width; //设置图片宽度
- wordDoc.Application.ActiveDocument.InlineShapes[1].Height = hight; //设置图片高度
- }
- //在表格中插入图片-Y
- public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int column, string picturePath, float width, float hight, int idx)
- {
- Object linkToFile = false; //图片是否为外部链接
- Object saveWithDocument = true; //图片是否随文档一起保存
- object range = table.Cell(row, column).Range;//图片插入位置
- wordDoc.InlineShapes.AddPicture(picturePath, ref linkToFile, ref saveWithDocument, ref range);
- wordDoc.Application.ActiveDocument.InlineShapes[idx].Width = width; //设置图片宽度
- wordDoc.Application.ActiveDocument.InlineShapes[idx].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 = 6;
- wp.Range.Text = text;
- wp.Format.SpaceAfter = 24;
- 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();
- }
- }
- }
- }
- }
|