C#的word导出

这篇博客探讨了在C#中使用Microsoft.Office.Interop.Word和Aspose.Words库来导出Word文档的差异。由于服务器环境限制,作者转向使用Aspose.Words,因为该库无需在目标计算机上安装Word即可运行。虽然两者在导出文本样式上的体验相似,但Aspose.Words提供了更便捷的解决方案。
摘要由CSDN通过智能技术生成

引用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;
            
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值