C#来操作Word
2021-04-03 00:27
标签:++ environ 获取 microsoft reflect DApp class 类型 对象 创建Word; 插入文字,选择文字,编辑文字的字号、粗细、颜色、下划线等; 设置段落的首行缩进、行距; 设置页面页边距和纸张大小; 设置页眉、页码; 插入图片,设置图片宽高以及给图片添加标题; 插入表格,格式化表格,往表格中插入数据; 保存Word,打印Word; 重新打开Word等。 /* 2. 导命名空间 using MSWord =Microsoft.Office.Interop.Word; 3. 把引用中的Microsoft.Office.Interop.Word的“属性”中的嵌入互操作设为False C#来操作Word 标签:++ environ 获取 microsoft reflect DApp class 类型 对象 原文地址:https://www.cnblogs.com/guyandianzi/p/9211811.html
1. 添加引用COM里面的 Microsoft Word 12.0 Object. Library 引用(12.0表示Word 2007版本)
using System.IO;
using System.Reflection;
*/using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using MSWord = Microsoft.Office.Interop.Word;
using System.IO;
using System.Reflection;
namespace Console_WordSkill_All
{
class Program
{
static void Main(string[] args)
{
object path; //文件路径变量
string strContent; //文本内容变量
MSWord.Application wordApp; //Word应用程序变量
MSWord.Document wordDoc; //Word文档变量
path = Environment.CurrentDirectory + "\\MyWord_Print.doc";
wordApp = new MSWord.ApplicationClass(); //初始化
wordApp.Visible = true;//使文档可见
//如果已存在,则删除
if (File.Exists((string)path))
{
File.Delete((string)path);
}
//由于使用的是COM库,因此有许多变量需要用Missing.Value代替
Object Nothing = Missing.Value;
wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
#region 页面设置、页眉图片和文字设置,最后跳出页眉设置
//页面设置
wordDoc.PageSetup.PaperSize = MSWord.WdPaperSize.wdPaperA4;//设置纸张样式为A4纸
wordDoc.PageSetup.Orientation = MSWord.WdOrientation.wdOrientPortrait;//排列方式为垂直方向
wordDoc.PageSetup.TopMargin = 57.0f;
wordDoc.PageSetup.BottomMargin = 57.0f;
wordDoc.PageSetup.LeftMargin = 57.0f;
wordDoc.PageSetup.RightMargin = 57.0f;
wordDoc.PageSetup.HeaderDistance = 30.0f;//页眉位置
//设置页眉
wordApp.ActiveWindow.View.Type = MSWord.WdViewType.wdNormalView;//普通视图(即页面视图)样式
wordApp.ActiveWindow.View.SeekView = MSWord.WdSeekView.wdSeekPrimaryHeader;//进入页眉设置,其中页眉边距在页面设置中已完成
wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphRight;//页眉中的文字右对齐
//插入页眉图片(测试结果图片未插入成功)
wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
string headerfile = @"C:\Users\xiahui\Desktop\OficeProgram\3.jpg";
MSWord.InlineShape shape1 = wordApp.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture(headerfile, ref Nothing, ref Nothing, ref Nothing);
shape1.Height = 5;//强行设置貌似无效,图片没有按设置的缩放——图片的比例并没有改变。
shape1.Width = 20;
wordApp.ActiveWindow.ActivePane.Selection.InsertAfter(" 文档页眉");//在页眉的图片后面追加几个字
//去掉页眉的横线
wordApp.ActiveWindow.ActivePane.Selection.ParagraphFormat.Borders[MSWord.WdBorderType.wdBorderBottom].LineStyle = MSWord.WdLineStyle.wdLineStyleNone;
wordApp.ActiveWindow.ActivePane.Selection.Borders[MSWord.WdBorderType.wdBorderBottom].Visible = false;
wordApp.ActiveWindow.ActivePane.View.SeekView = MSWord.WdSeekView.wdSeekMainDocument;//退出页眉设置
#endregion
#region 页码设置并添加页码
//为当前页添加页码
MSWord.PageNumbers pns = wordApp.Selection.Sections[1].Headers[MSWord.WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers;//获取当前页的号码
pns.NumberStyle = MSWord.WdPageNumberStyle.wdPageNumberStyleNumberInDash;//设置页码的风格,是Dash形还是圆形的
pns.HeadingLevelForChapter = 0;
pns.IncludeChapterNumber = false;
pns.RestartNumberingAtSection = false;
pns.StartingNumber = 0; //开始页页码?
object pagenmbetal = MSWord.WdPageNumberAlignment.wdAlignPageNumberCenter;//将号码设置在中间
object first = true;
wordApp.Selection.Sections[1].Footers[MSWord.WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers.Add(ref pagenmbetal, ref first);
#endregion
#region 行间距与缩进、文本字体、字号、加粗、斜体、颜色、下划线、下划线颜色设置
wordApp.Selection.ParagraphFormat.LineSpacing = 16f;//设置文档的行间距
wordApp.Selection.ParagraphFormat.FirstLineIndent = 30;//首行缩进的长度
//写入普通文本
strContent = "我是普通文本\n";
wordDoc.Paragraphs.Last.Range.Text = strContent;
wordDoc.Paragraphs.Last.Range.Text = "我再加一行试试,这里不加‘\\n‘";
//直接添加段,不是覆盖( += )
wordDoc.Paragraphs.Last.Range.Text += "不会覆盖的,";
//添加在此段的文字后面,不是新段落
wordDoc.Paragraphs.Last.Range.InsertAfter("这是后面的内容\n");
//将文档的前4个字替换成"哥是替换文字",并将其颜色设为红色
object start = 0;
object end = 4;
MSWord.Range rang = wordDoc.Range(ref start, ref end);
rang.Font.Color = MSWord.WdColor.wdColorRed;
rang.Text = "哥是替换文字";
wordDoc.Range(ref start, ref end);
//写入黑体文本
object unite = MSWord.WdUnits.wdStory;
wordApp.Selection.EndKey(ref unite, ref Nothing);//将光标移到文本末尾
wordApp.Selection.ParagraphFormat.FirstLineIndent = 0;//取消首行缩进的长度
strContent = "这是黑体文本\n";
wordDoc.Paragraphs.Last.Range.Font.Name = "黑体";
wordDoc.Paragraphs.Last.Range.Text = strContent;
//写入加粗文本
strContent = "这是粗体文本\n"; //
wordApp.Selection.EndKey(ref unite, ref Nothing);//这一句不加,有时候好像也不出问题,不过还是加了安全
wordDoc.Paragraphs.Last.Range.Font.Bold = 1;
wordDoc.Paragraphs.Last.Range.Text = strContent;
//写入15号字体文本
strContent = "我这个文本的字号是15号,而且是宋体\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Size = 15;
wordDoc.Paragraphs.Last.Range.Font.Name = "宋体";
wordDoc.Paragraphs.Last.Range.Text = strContent;
//写入斜体文本
strContent = "我是斜体字文本\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Italic = 1;
wordDoc.Paragraphs.Last.Range.Text = strContent;
//写入蓝色文本
strContent = "我是蓝色的文本\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Color = MSWord.WdColor.wdColorBlue;
wordDoc.Paragraphs.Last.Range.Text = strContent;
//写入下划线文本
strContent = "我是下划线文本\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineThick;
wordDoc.Paragraphs.Last.Range.Text = strContent;
//写入红色下画线文本
strContent = "我是点线下划线,并且下划线是红色的\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineDottedHeavy;
wordDoc.Paragraphs.Last.Range.Font.UnderlineColor = MSWord.WdColor.wdColorRed;
wordDoc.Paragraphs.Last.Range.Text = strContent;
//取消下划线,并且将字号调整为12号
strContent = "我他妈不要下划线了,并且设置字号为12号,黑色不要斜体\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Size = 12;
wordDoc.Paragraphs.Last.Range.Font.Underline = MSWord.WdUnderline.wdUnderlineNone;
wordDoc.Paragraphs.Last.Range.Font.Color = MSWord.WdColor.wdColorBlack;
wordDoc.Paragraphs.Last.Range.Font.Italic = 0;
wordDoc.Paragraphs.Last.Range.Text = strContent;
#endregion
#region 插入图片、居中显示,设置图片的绝对尺寸和缩放尺寸,并给图片添加标题
wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾
//图片文件的路径
string filename = Environment.CurrentDirectory + "\\6.jpg";
//要向Word文档中插入图片的位置
Object range = wordDoc.Paragraphs.Last.Range;
//定义该插入的图片是否为外部链接
Object linkToFile = false; //默认,这里貌似设置为bool类型更清晰一些
//定义要插入的图片是否随Word文档一起保存
Object saveWithDocument = true; //默认
//使用InlineShapes.AddPicture方法(【即“嵌入型”】)插入图片
wordDoc.InlineShapes.AddPicture(filename, ref linkToFile, ref saveWithDocument, ref range);
wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;//居中显示图片
//设置图片宽高的绝对大小
//wordDoc.InlineShapes[1].Width = 200;
//wordDoc.InlineShapes[1].Height = 150;
//按比例缩放大小
wordDoc.InlineShapes[1].ScaleWidth = 20;//缩小到20% ?
wordDoc.InlineShapes[1].ScaleHeight = 20;
//在图下方居中添加图片标题
wordDoc.Content.InsertAfter("\n");//这一句与下一句的顺序不能颠倒,原因还没搞透
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
wordApp.Selection.Font.Size = 10;//字体大小
wordApp.Selection.TypeText("图1 测试图片\n");
#endregion
#region 添加表格、填充数据、设置表格行列宽高、合并单元格、添加表头斜线、给单元格添加图片
wordDoc.Content.InsertAfter("\n");//这一句与下一句的顺序不能颠倒,原因还没搞透
wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾
wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
//object WdLine2 = MSWord.WdUnits.wdLine;//换一行;
//wordApp.Selection.MoveDown(ref WdLine2, 6, ref Nothing);//向下跨15行输入表格,这样表格就在文字下方了,不过这是非主流的方法
//设置表格的行数和列数
int tableRow = 6;
int tableColumn = 6;
//定义一个Word中的表格对象
MSWord.Table table = wordDoc.Tables.Add(wordApp.Selection.Range,
tableRow, tableColumn, ref Nothing, ref Nothing);
//默认创建的表格没有边框,这里修改其属性,使得创建的表格带有边框
table.Borders.Enable = 1;//这个值可以设置得很大,例如5、13等等
//表格的索引是从1开始的。
wordDoc.Tables[1].Cell(1, 1).Range.Text = "列\n行";
for (int i = 1; i