专栏首页工厂程序员C#——操作Word并导出PDF

C#——操作Word并导出PDF

一、操作Word 

  首先引用这个DLL,Microsoft.Office.Interop.Word,官方提供的。

  可以操作word文字,表格,图片等。

  文字通过替换关键字的方式实现

document.Paragraphs[i].Range.Text = temptext.Replace("{$village}", "HELLO WORLD");

  表格可以自己获取模板中已有的表格

Microsoft.Office.Interop.Word.Table table1 = document.Tables[1];

   table1.Cell(1, 1).Range.Text = "TEST1";

  也可以自己创建表格,可以设计表头,单元格等。

   int tableRow = 6 ;
   int tableColumn = 6;
    //定义一个Word中的表格对象
   Microsoft.Office.Interop.Word.Table table = document.Tables.Add(document.Paragraphs[i].Range,
   tableRow, tableColumn, ref Nothing, ref Nothing);
   //默认创建的表格没有边框,这里修改其属性,使得创建的表格带有边框 
   table.Borders.Enable = 1;
   table.Cell(1, 1).Merge(table.Cell(2, 1));//纵向合并
   table.Cell(1, 1).Range.Text = "牌号/代码";

   table.Cell(1, 2).Merge(table.Cell(2, 2));//纵向合并
   table.Cell(1, 2).Range.Text = "标准编号";
  有一篇文章写的很详细可以参考下:https://www.cnblogs.com/xh6300/p/5915717.html
public bool CreateWord(DataTable dttmp)
        {
            bool result = false;
            Object Nothing = Missing.Value;
            Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document document = null;
            string path = @"C:\Users\Administrator\Desktop\BB\合同模版.doc";
            object FileName = @"C:\Users\Administrator\Desktop\BB\" + DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ".doc";
            application.Visible = false;
            document = application.Documents.Open(path);

            int rowNum = dttmp.Rows.Count;
            for (int i = 1; i <= document.Paragraphs.Count; i++)
            {
                string temptext = document.Paragraphs[i].Range.Text;
                //以下为替换文档模版中的关键字
                if (temptext.Contains("{$village}"))
                    document.Paragraphs[i].Range.Text = temptext.Replace("{$village}", "HELLO WORLD");
                Microsoft.Office.Interop.Word.Table table1 = document.Tables[1];
                table1.Cell(1, 1).Range.Text = "TEST1";
                if (temptext.Contains("{$Table1}"))
                {
                    //设置表格的行数和列数
                    int tableRow = 6 + rowNum;
                    int tableColumn = 13;
                    //定义一个Word中的表格对象
                   

                    Microsoft.Office.Interop.Word.Table table = document.Tables.Add(document.Paragraphs[i].Range,
                      tableRow, tableColumn, ref Nothing, ref Nothing);
                    //默认创建的表格没有边框,这里修改其属性,使得创建的表格带有边框 
                     table.Borders.Enable = 1;//这个值可以设置得很大
                     table.Cell(1, 1).Merge(table.Cell(2, 1));//纵向合并
                     table.Cell(1, 1).Range.Text = "牌号/代码";

                     table.Cell(1, 2).Merge(table.Cell(2, 2));//纵向合并
                     table.Cell(1, 2).Range.Text = "标准编号";

                 

                     table.Cell(1, 6).Merge(table.Cell(2, 6));
                     table.Cell(1, 6).Range.Text = "单重\n(MT)";

                     table.Cell(1, 7).Merge(table.Cell(2, 7));
                     table.Cell(1, 7).Range.Text = "张数";
                     
                     table.Cell(1, 8).Merge(table.Cell(2, 8));
                     table.Cell(1, 8).Range.Text = "重量\n(MT))";
                  
                     

                     table.Cell(1, 9).Merge(table.Cell(2, 9));
                     table.Cell(1, 9).Range.Text = "单价\n(元/吨)";
                                        
                     table.Cell(1, 10).Merge(table.Cell(2, 10));
                     table.Cell(1, 10).Range.Text = "金额(人民币)";
                                      
         
                     table.Cell(1, 13).Merge(table.Cell(2, 13));
                     table.Cell(1, 13).Range.Text = "交货期";

                     table.Cell(1, 3).Merge(table.Cell(1, 5));//横向合并
                     table.Cell(1, 3).Range.Text = "规格(mm)";
                     table.Cell(2, 3).Range.Text = "厚度";
                     table.Cell(2, 4).Range.Text = "宽度";
                     table.Cell(2, 5).Range.Text = "宽度";

                     table.Cell(1, 9).Merge(table.Cell(1, 10));
                     table.Cell(1, 10).Range.Text = "表面加工";
                     table.Cell(2, 11).Range.Text = "边缘";
                     table.Cell(2, 11).Range.Text = "精度";
                
                }
            }
           
            object format = document.SaveFormat;
            document.Save();

            application.Quit(ref Nothing, ref Nothing, ref Nothing);
            return result;

        }

二、Word导出PDF

 public bool WordToPDF(string sourcePath)
        {
            bool result = false;
           Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document document = null;
            try
            {
                application.Visible = false;
                document = application.Documents.Open(sourcePath);
                string PDFPath = sourcePath.Replace(".doc", ".pdf");//pdf存放位置
                if (!File.Exists(@PDFPath))//存在PDF,不需要继续转换
                {
                    document.ExportAsFixedFormat(PDFPath, Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);
                }
                result = true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                result = false;
            }
            finally
            {
                //document.Close();
            }
            return result;
        }

服务器部署可以参考;https://www.cnblogs.com/5426z/articles/4865312.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 开发注意事项

      能通过参数表或者配置文件实现的尽可能不要去写Hard Code,可减少后面代码的修改。

    _一级菜鸟
  • SQLServer作业调用链接服务器失败解决办法

    消息 已以用户 NT SERVICE\SQLSERVERAGENT 的身份执行。 链接服务器 "172.16.10.23" 的 OLE DB 访问接口 "SQL...

    _一级菜鸟
  • 未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”

    _一级菜鸟
  • Android网络与数据存储——SQLite

    Android提供了一个管理数据库的工具类SQLiteOpenHelper,用于管理数据库的创建和版本更新,创建SQLiteOpenHelper的子类,并实现它...

    trampcr
  • Android应用的保活方案以及另类出路,你了解几个

    1、监听广播:监听全局的静态广播,比如时间更新的广播、开机广播、解锁屏、网络状态、解锁加锁亮屏暗屏(3.1版本),高版本需要应用开机后运行一次才能监听这些系统广...

    Android技术干货分享
  • 亚马逊前首席科学家:大数据价值体现在AI、BI、CI、DI

    无人机送货、阿法狗下棋、小冰和你谈场恋爱……人工智能领域的成果,一直是企业在大数据运用能力上的主要外在体现,但在亚马逊原首席科学家安德雷斯?韦思岸(Andre...

    灯塔大数据
  • 别那么想,“区块链”不是寻找问题的解决方案

    比特币使用区块链技术,对吧?是的,它确实。当然,你还记得2015年的言论:“我不确定比特币是否有意义,但我对它背后的底层技术——区块链感兴趣” ——曾经在某个网...

    Bon
  • Android之父即将公布自制新手机,将在月底发布

    镁客网
  • 举个卡戴珊的例子,讲讲Hinton的Capsule是怎么回事 | 教程+代码

    Nick Bourdakos 文 李林 若朴 编译自 HackerNoon 量子位 出品 | 公众号 QbitAI ? Capsule Networks,或者说...

    量子位
  • ELK的上线之路(一):——Elasticsearch安装

    Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它...

    江小白

扫码关注云+社区

领取腾讯云代金券