引用Microsoft.Office.Interop.Word或是Aspose.Words
原本我是使用Microsoft的,但是服务器的电脑不允许装word等其他应用,所以后面就用了Aspose.words,所以这里区别就出来了,Microsoft的需要在本地安装word,而Aspose.words不用安装也能完成导出操作,至于导出文本样式,我用起来感觉没什么差别。
Microsoft.Office.Interop.Word
参考了很多,注意右键属性嵌入互操作类型设置为false不然项目起不来。
object path; //文件路径变量
string strContent; //文本内容变量
MSWord.Application wordApp; //Word应用程序变量
MSWord.Document wordDoc; //Word文档变量
string rootPath = AppDomain.CurrentDomain.BaseDirectory;
path = $"{rootPath}\\Document\\WORD\\" + uuid + ".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.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;//首行缩进的长度
//写入15号字体文本
object unite = MSWord.WdUnits.wdStory;
wordApp.Selection.EndKey(ref unite, ref Nothing);//将光标移到文本末尾
wordApp.Selection.ParagraphFormat.FirstLineIndent = 0;
strContent = "安全环保现场督查数据周报" + "\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Size = 30;
wordDoc.Paragraphs.Last.Range.Font.Name = "黑体";
wordDoc.Paragraphs.Last.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
wordDoc.Paragraphs.Last.Range.Font.Bold = 1;
wordDoc.Paragraphs.Last.Range.Text = strContent;
wordApp.Selection.EndKey(ref unite, ref Nothing);//将光标移到文本末尾
wordApp.Selection.ParagraphFormat.FirstLineIndent = 0;
strContent = "安全环保现场督查数据统计、主要问题(隐患)及整改完成情况" + "\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Size = 15;
wordDoc.Paragraphs.Last.Range.Font.Name = "宋体";
wordDoc.Paragraphs.Last.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
wordDoc.Paragraphs.Last.Range.Text = strContent;
strContent = "一、隐患分类统计" + "\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Size = 15;
wordDoc.Paragraphs.Last.Range.Font.Name = "宋体";
wordDoc.Paragraphs.Last.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
wordDoc.Paragraphs.Last.Range.Text = strContent;
#endregion
#region 插入图片、居中显示,设置图片的绝对尺寸和缩放尺寸,并给图片添加标题
for (int a = 0; a < 1; a++)
{
wordDoc.Content.InsertAfter("\n");//这一句与下一句的顺序不能颠倒,原因还没搞透
wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾
wordApp.Selection.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
wordApp.Selection.Font.Size = 8;
int tableRow = AreaNum.Rows.Count + 1;
int tableColumn = 11;
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 <= tableRow; i++)
{
for (int j = 1; j <= tableColumn; j++)
{
int nnum;
if (i == 1)
{
nnum = j - 1;
}
else
{
nnum = (i - 1) * tableColumn + j - 1;
}
if (i == 1)
{
if (j == 1)
{
table.Cell(i, j).Range.Text = "被督查单位";
}
else if (j == 2)
{
table.Cell(i, j).Range.Text = "合计";
}
else if (j == 3)
{
table.Cell(i, j).Range.Text = "安全基础管理";
}
else if (j == 4)
{
table.Cell(i, j).Range.Text = "工艺";
}
else if (j == 5)
{
table.Cell(i, j).Range.Text = "设备";
}
else if (j == 6)
{
table.Cell(i, j).Range.Text = "电气仪表";
}
else if (j == 7)
{
table.Cell(i, j).Range.Text = "环保";
}
else if (j == 8)
{
table.Cell(i, j).Range.Text = "消气防";
}
else if (j == 9)
{
table.Cell(i, j).Range.Text = "承包商管理";
}
else if (j == 10)
{
table.Cell(i, j).Range.Text = "现场";
}
else
{
table.Cell(i, j).Range.Text = "其他";
}
}
else
{
if (j == 1)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["COMPANY_NAME"].ToString();
}
else if (j == 2)
{
table.Cell(i, j).Range.Text = "";
}
else if (j == 3)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["SAFE"].ToString();
}
else if (j == 4)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["CRAFT"].ToString();
}
else if (j == 5)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["DEVICE"].ToString();
}
else if (j == 6)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["EIE_METER"].ToString();
}
else if (j == 7)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["ENVIRONMENT"].ToString();
}
else if (j == 8)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["FIREFIGHT"].ToString();
}
else if (j == 9)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["CONTRACTOR"].ToString();
}
else if (j == 10)
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["SITE"].ToString();
}
else
{
table.Cell(i, j).Range.Text = AreaNum.Rows[i - 2]["QT"].ToString();
}
}
}
}
}
wordApp.Selection.EndKey(ref unite, ref Nothing);//将光标移到文本末尾
wordApp.Selection.ParagraphFormat.FirstLineIndent = 0;
strContent = "二、督查主要问题(隐患)" + "\n";
wordApp.Selection.EndKey(ref unite, ref Nothing);
wordDoc.Paragraphs.Last.Range.Font.Size = 30;
wordDoc.Paragraphs.Last.Range.Font.Name = "黑体";
wordDoc.Paragraphs.Last.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;
wordDoc.Paragraphs.Last.Range.Font.Bold = 1;