ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#使用spire.doc对word文档表格进行数据填充(主要针对word插入图像)

2021-11-25 11:35:05  阅读:144  来源: 互联网

标签:word 表格 C# doc private 文档 dialog Doc


之前在做一个C#项目需要对word文档的表格进行数据填充,然后代码调用打印。如何用C#对word文档填充文字网上已经很多实例了,我就不多重复了,只提一点,找不到“文字型窗体域”的(我反正是找一下午没找到),可以网上下一个有文字型窗体域的word模板,复制黏贴就可以了。这里重点说针对表格的插入图片,这个网上找不到,完全我自己摸索出来的。有更好的方法欢迎指正。

    using Spire.Doc;
    using Spire.Doc.Documents;
    using Spire.Doc.Fields;//需要引用spire.doc的dll文件,网上很容易搜到
     
     
    class Docx
        {
            private string filePath="C:\\Users\Administrator\\Desktop\\机动车考试成绩单.doc";
            private DocPicture dp;//doc图片
            private Document Doc;//模板文件
            private byte[] head;//存储人物头像的byte数组
            //读取word文档
            private void ReadDoc()
            {
                 Doc = new Document(filePath, FileFormat.Docx);//读取word文档模板
                 head=ReadHead();//如何读取图片获取byte[]此处就不写详细代码了,网上有范例,我的另一遍博客里也有教程
            }
            //填充word文档
            private void FillDoc()
            {
                dp = Doc.Sections[0].Tables[0].Rows[0].Cells[4].Paragraphs[0].AppendPicture(head);
                //此处说说具体的参数
                //Section[0]————word文档页数列表, [0]表示取第一页
                //Tables[0]————当前页的表格列表,当一页存在多个表格时,按照从上往下的顺序排列,[0]表示取第一个表格
                //Rows[0]————当前所取表格的行的列表,按照从上往下的顺序排列,[0]表示取第一行
                //Cell[4]————当前表格所取行的格子列表,按照从左往右顺序排列,[4]表示取第五格,对于一个大格横跨多行的,取该格子最上部所在行的行数
                //Paragraphs[0]————取当前格的段落,默认0不用管它
                //终上所述,上面代码表意思就是,取第一页的第一个表格的第一行的第五个格子,将头像图片插入进去
                dp1.Height = 122; //设置图像的高
                dp1.Width = 100;//设置图像的宽
                dp1.VerticalPosition = 2; //设置图像的停靠位置方式
                dp1.TextWrappingStyle = TextWrappingStyle.InFrontOfText;//设置图像的文字环绕方式
            }
            //打印word文档
            private void Print()
            {
                PrintDialog dialog = new PrintDialog();
                dialog.AllowCurrentPage = true;
                dialog.AllowSomePages = true;
                dialog.UseEXDialog = true;
                try
                {
                    Doc.PrintDialog = dialog;
                    dialog.Document = Doc.PrintDocument;
                    dialog.Document.Print();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    题外话,如果涉及批量的填充打印的话,反复创建Document实例再读取模板其实是一件很耗费性能的事,这里推荐使用document.clone();方法
    开局只需读取一次doc模板,每次需要填充打印时,只需对doc模板调用.clone()方法,然后对克隆的模板进行填充,打印,释放。
    不过要注意,当文档里的一页上的表格超过五个时,无法克隆,调用.clone()方法时会失败,也许是因为用的spire.doc是免费版的关系?

标签:word,表格,C#,doc,private,文档,dialog,Doc
来源: https://www.cnblogs.com/Fooo/p/15601927.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有