C#使用spire.doc對word文檔表格進行數據填充(主要針對word插入圖像)


之前在做一個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是免費版的關系?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM