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是免費版的關係?