原創(chuàng)|其它|編輯:郝浩|2012-10-16 13:45:08.000|閱讀 1706 次
概述:查詢Apose.Cell控件的使用介紹,WorkBook對(duì)象確實(shí)有一個(gè)Combine的方法,專門做文件合并的工作。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
之前有寫過多篇關(guān)于使用Apose.Cells控件制作自定義模板報(bào)表和通用的導(dǎo)出Excel表格數(shù)據(jù)的操作,對(duì)這個(gè)控件的功能還是比較滿意,而且也比較便利。忽然有一天,一個(gè)朋友說:你已經(jīng)有生成基于自定義模板報(bào)表了,可是我每個(gè)單位都導(dǎo)出一張相同的報(bào)表的話,我豈不是要生成很多文件,而且對(duì)比查看也不方便,有沒有更好的辦法合并他們到一個(gè)文件里面呢?這樣我看報(bào)表就方便很多了。本文主要介紹如何實(shí)現(xiàn)基于一個(gè)自定義報(bào)表模式,生成多個(gè)類似報(bào)表合并在一個(gè)文件中具體操作。
查詢Apose.Cell控件的使用介紹,WorkBook對(duì)象確實(shí)有一個(gè)Combine的方法,專門做文件合并的工作,實(shí)現(xiàn)的代碼如下所示:
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");
既然有了這個(gè)方法合并文件,那么客戶提出的問題,就也可以通過該思路來解決了。問題只是這個(gè)方法合并已有的文件,而客戶需要的是在一個(gè)自定義模板的基礎(chǔ)上生成多個(gè)相似的報(bào)表,放到一個(gè)文件中,每個(gè)報(bào)表一個(gè)Sheet而已。
SourceBook1.Combine(SourceBook2);
SourceBook1.Save("c:\\excels\\combined.xls"); 
通過以上的代碼,我們可以看到,文件合并的邏輯,其實(shí)是多個(gè)WorkBook之間的合并,然后把最后的WorkBook重新保存為另外一個(gè)文件即可。
首先我通過一個(gè)簡(jiǎn)單例子來介紹實(shí)現(xiàn)思路,先來設(shè)計(jì)一個(gè)簡(jiǎn)單的自定義模板,如下所示 。

這樣,我們通過基于該自定義模板,生成一系列相似的報(bào)表文件,然后逐一合并他們即可,例子實(shí)現(xiàn)的代碼如下所示:
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對(duì)象
            List<string> fileList = new List<string>();
            for (int i = 0; i < 3; i++)
            {
                Workbook tempBook = new Workbook();
                //創(chuàng)建設(shè)計(jì)模板對(duì)象,并綁定數(shù)據(jù)源
                WorkbookDesigner designer = new WorkbookDesigner();
                designer.Open(path);
                designer.SetDataSource(dt);
                designer.Process();
                //修改Sheet的名稱
                designer.Workbook.Worksheets[0].Name = "test" + i.ToString();
                //根據(jù)數(shù)據(jù)源和自定義模板,生成相應(yīng)的報(bào)表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
                {
                    //第二個(gè)使用Combind函數(shù)操作
                    tempBook.Open(fileToSave);
                    SourceBook1.Combine(tempBook);
                }
            }
            //最后將WorkBook保存為一個(gè)文件即可
            string soucePath = System.IO.Path.Combine(Application.StartupPath, "Combind.xls");
            SourceBook1.Save(soucePath);
            //刪除臨時(shí)文件
            foreach (string file in fileList)
            {
                if (File.Exists(file))
                {
                    File.Delete(file);
                }
            }
            //打開文件
            Process.Start(soucePath);
        }
}
注意,由于Workbook對(duì)象默認(rèn)只創(chuàng)建了一個(gè)Sheet對(duì)象供使用,因此要逐一修改Sheet對(duì)應(yīng)的名稱,如下代碼所示:
designer.Workbook.Worksheets[0].Name = "test" + i.ToString();
最終生成的多Sheet對(duì)象的Excel報(bào)表效果如下圖所示:

當(dāng)然,復(fù)雜的報(bào)表可能相對(duì)處理會(huì)更加復(fù)雜一些,不過大致的邏輯就是通過這樣的步驟來實(shí)現(xiàn)整合即可,在項(xiàng)目中整合 真正的報(bào)表后,對(duì)方滿意,一切OK。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:伍華聰?shù)膶?博客園