原創|其它|編輯:郝浩|2012-10-16 13:45:08.000|閱讀 1694 次
概述:查詢Apose.Cell控件的使用介紹,WorkBook對象確實有一個Combine的方法,專門做文件合并的工作。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
之前有寫過多篇關于使用Apose.Cells控件制作自定義模板報表和通用的導出Excel表格數據的操作,對這個控件的功能還是比較滿意,而且也比較便利。忽然有一天,一個朋友說:你已經有生成基于自定義模板報表了,可是我每個單位都導出一張相同的報表的話,我豈不是要生成很多文件,而且對比查看也不方便,有沒有更好的辦法合并他們到一個文件里面呢?這樣我看報表就方便很多了。本文主要介紹如何實現基于一個自定義報表模式,生成多個類似報表合并在一個文件中具體操作。
查詢Apose.Cell控件的使用介紹,WorkBook對象確實有一個Combine的方法,專門做文件合并的工作,實現的代碼如下所示:
Workbook SourceBook1 = new Workbook(); SourceBook1.Open("c:\\excels\\ChartTest.xls"); Workbook SourceBook2 = new Workbook(); SourceBook2.Open("C:\\excels\\PictureTest.xls"); SourceBook1.Combine(SourceBook2); SourceBook1.Save("c:\\excels\\combined.xls");
既然有了這個方法合并文件,那么客戶提出的問題,就也可以通過該思路來解決了。問題只是這個方法合并已有的文件,而客戶需要的是在一個自定義模板的基礎上生成多個相似的報表,放到一個文件中,每個報表一個Sheet而已。
SourceBook1.Combine(SourceBook2); SourceBook1.Save("c:\\excels\\combined.xls");
通過以上的代碼,我們可以看到,文件合并的邏輯,其實是多個WorkBook之間的合并,然后把最后的WorkBook重新保存為另外一個文件即可。
首先我通過一個簡單例子來介紹實現思路,先來設計一個簡單的自定義模板,如下所示 。
這樣,我們通過基于該自定義模板,生成一系列相似的報表文件,然后逐一合并他們即可,例子實現的代碼如下所示:
private DataTable GetCustomersTable() { DataTable dt = new DataTable("Customers"); dt.Columns.Add("Address"); dt.Columns.Add("City"); dt.Columns.Add("CompanyName"); dt.Columns.Add("ContactName"); dt.Columns.Add("ContactTitle"); dt.Columns.Add("Country"); dt.Columns.Add("CustomerID"); dt.Columns.Add("Fax"); dt.Columns.Add("Phone"); dt.Columns.Add("PostalCode"); dt.Columns.Add("Region"); for (int i = 0; i < 10; i++) { DataRow row = dt.NewRow(); for (int j = 0; j < dt.Columns.Count; j++) { row[j] = dt.Columns[j].ColumnName + "(" + i.ToString() + "," + j.ToString() + ")"; } dt.Rows.Add(row); } return dt; } private void btnCombind_Click(object sender, EventArgs e) { Workbook SourceBook1 = new Workbook(); string path = System.IO.Path.Combine(Application.StartupPath, "SmartMarkerCombind.xls"); DataTable dt = GetCustomersTable();//使用DataTable對象 List<string> fileList = new List<string>(); for (int i = 0; i < 3; i++) { Workbook tempBook = new Workbook(); //創建設計模板對象,并綁定數據源 WorkbookDesigner designer = new WorkbookDesigner(); designer.Open(path); designer.SetDataSource(dt); designer.Process(); //修改Sheet的名稱 designer.Workbook.Worksheets[0].Name = "test" + i.ToString(); //根據數據源和自定義模板,生成相應的報表Excel文件 string fileToSave = System.IO.Path.Combine(Application.StartupPath, string.Format("Combind{0}.xls", i)); designer.Save(fileToSave, FileFormatType.Excel2003); fileList.Add(fileToSave); //第一次要打開 if (i == 0) { SourceBook1.Open(fileToSave); } else { //第二個使用Combind函數操作 tempBook.Open(fileToSave); SourceBook1.Combine(tempBook); } } //最后將WorkBook保存為一個文件即可 string soucePath = System.IO.Path.Combine(Application.StartupPath, "Combind.xls"); SourceBook1.Save(soucePath); //刪除臨時文件 foreach (string file in fileList) { if (File.Exists(file)) { File.Delete(file); } } //打開文件 Process.Start(soucePath); } }
注意,由于Workbook對象默認只創建了一個Sheet對象供使用,因此要逐一修改Sheet對應的名稱,如下代碼所示:
designer.Workbook.Worksheets[0].Name = "test" + i.ToString();
最終生成的多Sheet對象的Excel報表效果如下圖所示:
當然,復雜的報表可能相對處理會更加復雜一些,不過大致的邏輯就是通過這樣的步驟來實現整合即可,在項目中整合 真正的報表后,對方滿意,一切OK。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:伍華聰的專欄-博客園