原創|其它|編輯:郝浩|2012-08-16 20:45:37.000|閱讀 2612 次
概述:許多開發人員都在為如何完整的導出Excel或者Word這個問題感到煩惱。所以選擇一種有效的方式就顯得尤為重要,今天要提到了就是Aspose組件,不僅可以導出Excel還能導出Word以及其他不同格式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
許多開發人員在導出Excel或者Word經常使用的方法就是畫網頁,比如使用GridView編寫代碼導出Excel,不僅不能改變Excel單元的大小,而且排版的效果也是雜亂不整齊的,導出Word時也是如此,相信大家都在為這個問題感到煩惱。所以選擇一種有效的方式就顯得尤為重要,今天要提到了就是Aspose組件,不僅可以導出Excel還能導出Word以及其他不同格式。Aspose.Words下載
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Buffer = true;
System.Web.HttpContext.Current.Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
System.Web.HttpContext.Current.Response.Write("<head>");
System.Web.HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>");//解決中文亂碼問題,導出數據在20行內容易出現亂碼
System.Web.HttpContext.Current.Response.Write("<!--[if gte mso 9]><xml>");
System.Web.HttpContext.Current.Response.Write("<x:ExcelWorkbook>");
System.Web.HttpContext.Current.Response.Write("<x:ExcelWorksheets>");
System.Web.HttpContext.Current.Response.Write("<x:ExcelWorksheet>");
System.Web.HttpContext.Current.Response.Write("<x:Name>sheet1</x:Name>");
System.Web.HttpContext.Current.Response.Write("<x:WorksheetOptions>");
System.Web.HttpContext.Current.Response.Write("<x:Print>");
System.Web.HttpContext.Current.Response.Write("<x:ValidPrinterInfo/>");
System.Web.HttpContext.Current.Response.Write("</x:Print>");
System.Web.HttpContext.Current.Response.Write("</x:WorksheetOptions>");
System.Web.HttpContext.Current.Response.Write("</x:ExcelWorksheet>");
System.Web.HttpContext.Current.Response.Write("</x:ExcelWorksheets>");
System.Web.HttpContext.Current.Response.Write("</x:ExcelWorkbook>");
System.Web.HttpContext.Current.Response.Write("</xml>");
System.Web.HttpContext.Current.Response.Write("<![endif]--> ");
我們需要導出如下圖樣式的Word:(由于示例中的報表是內部報表,所以圖片做了相應處理,代碼部分也已經盡量詳細,不影響最后效果)
首先我們需要先建立模板,只需在Word里面插入域得到如下圖效果。簡單說明一下<TableStart:All> 是表示從名為All的 DataTable 里面獲取數據 <TableEnd:All>就是結束的位置,中間的<jylx> <my> 之類的都是名為All這個的DataTable的列名.中間還有另外一個<TableStart:Item> <TableStart:Item> 同理這個是名為Item的DataTable 他們中間的<mc> <sl>就是Item這個表的列名。
下面在介紹一下代碼的編寫,首先構造一個DataSet包含兩個DataTable一個叫All 一個叫Item..添加代碼大致如下,之后就是填充這2個DataTable即可。
private DataSet GetOneDs()
{
DataTable dt1 = new DataTable("All");
dt1.Columns.Add("jylx");
dt1.Columns.Add("my");
dt1.Columns.Add("mc");//
dt1.Columns.Add("mz");//
dt1.Columns.Add("mjz");//
//dt1.Columns.Add("mqt");//其他
dt1.Columns.Add("sjbm");//
dt1.Columns.Add("yqwcrq");//要求完成日期
dt1.Columns.Add("jyyj");//檢驗依據
dt1.Columns.Add("szq");//自取
dt1.Columns.Add("sdzwd");//電子文檔
dt1.Columns.Add("sqt");//其它
dt1.Columns.Add("ztwz");//完整
dt1.Columns.Add("ztqx");//缺陷
dt1.Columns.Add("ztms");//描述
dt1.Columns.Add("sjbmfzr");//送檢部門負責人
dt1.Columns.Add("syrrq");//送檢人/日期
dt1.Columns.Add("jybmfzr");//檢測部門負責人
dt1.Columns.Add("jyrrq");//接樣人/日期
DataRow dr1 = dt1.NewRow();
dr1["my"] = "□";//
dr1["mc"] = "□";//
dr1["mz"] = "□";//
dr1["mbz"] = "□";//
dr1["ztwz"] = "□";//完整
dr1["ztqx"] = "□";//缺陷
dr1["sdzwd"] = "□";//完整
dr1["szq"] = "□";//缺陷
dt1.Rows.Add(dr1);
DataTable dt2 = new DataTable("Item");
dt2.Columns.Add("bh");
dt2.Columns.Add("mc");
dt2.Columns.Add("sl");
dt2.Columns.Add("rq");
DataSet ds = new DataSet();
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
return ds;
}
最后只要根據DataSet填充模板輸出即可,代碼如下:
Document doc = new Document(strPath);
doc.MailMerge.ExecuteWithRegions(ds);
doc.Save(Page.Response, "C010.doc", ContentDisposition.Attachment, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網