小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

報表萬能之源

 實力決定地位 2013-01-18

對于上篇中提到的報表我們以如下的事例,來說明如何做:報表事例圖:

模板圖:

來源數(shù)據(jù)圖:(即為上圖中Data2中的數(shù)據(jù))

生成報表圖:

現(xiàn)在相信大家己經(jīng)看出來了,我的報表是在Excel中完成的,我們的報表在項目中都是借助excel來實現(xiàn)的,將生成的報表傳到我們的MOSS上 Excel服務器上供用戶查看以用下載。借助于excel中的透視表來做,基本上能夠滿足各種需求。當然對于特別特別復雜的我們可以自己定義想要的模板。完成如上圖的報表我們要做的準備工作如下:

報表的數(shù)據(jù)來源:

根據(jù)我們報表的展示需求,我們先來確定下呈現(xiàn)報表所需要的數(shù)據(jù),寫好數(shù)據(jù)的返回格式,以便于寫存儲過程從項目中提取我們所需要的數(shù)據(jù)。如我們現(xiàn)在要生成如上圖的報表,通過分析發(fā)現(xiàn),我們需要如源數(shù)據(jù)圖中的這些數(shù)據(jù),到此數(shù)據(jù)的需求格式我們就定下來了。

報表的模板:

根據(jù)上面我們分析需要的數(shù)據(jù),我們來制作報表的模板。在此我特別說明一下,模板是透視表,是根據(jù)上圖中的Data2字段來生成的。對Excel透視表不清楚的,在此我一兩句也說不清,網(wǎng)上有很多教程,可以去先學習下。再來做模板,及數(shù)據(jù)返回需求的格式分析就會不感到吃力。

數(shù)據(jù)寫入到Excel

怎么把數(shù)據(jù)寫到Excel的Data2中是我們這次報表生成的關(guān)鍵。要想把數(shù)據(jù)寫到Excel中我們要借助于一個微軟開源的程序: OpenXML。

下面我們來看一下OpenXML是什么,其實OpenXML并不是一種新技術(shù),它早在2006年就出來了,只是在網(wǎng)上介紹它利用它來操作Excel的說明文章和示例太少了,也就很少有人去應用它了。OpenXML(OOXML)是微軟在Office 2007中提出的一種新的文檔格式,Office 2007中的Word、Excel、PowerPoint默認均采用OpenXML格式 。OpenXML在2006年12月成為了ECMA規(guī)范的一部分。至于它的其它介紹,大家到網(wǎng)上查看吧,它的功能是非常強大的。我們今天主要用它來操作Excel。

在介紹如何做之前,我們先做好準備工作:

第一、 報表的模板:我們已經(jīng)在上面做好了。

第二、 下載OpenXMLSDKv2.msi,(下載地址:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5124)安裝一下OpenXMLSDKv2.msi,在項目中引用 DocumentFormat.OpenXml.dllWindowsBase.dll

準備工作做完了,現(xiàn)在看看如何把我們查詢出的數(shù)據(jù)寫到Excel中,生成報表吧。

代碼如下:

View Code
 1 public byte[] WriteToExcel( CarryResource  CarryResource, string ModelUrl)
2
3 { using (MemoryStream stream = SpreadsheetReader.StreamFromFile(ModelUrl))// ModelUrl為報表模板的位置
4
5 {
6
7
8
9 DataSet ds = GetData(CarryResource); //生成報表所需要的結(jié)果集
10
11 SpreadsheetDocument doc = SpreadsheetDocument.Open(stream, true);
12
13 WorksheetPart worksheetPart = SpreadsheetReader.GetWorksheetPartByName(doc, "Data2");//讀取工作表Data2
14
15 WorksheetWriter writer = new WorksheetWriter(doc, worksheetPart);
16
17 writer.PasteDataTable(ds.Tables[0], "A2");//將查詢出的結(jié)果集中的我們所要的表數(shù)據(jù)寫入到工作表Data2中的指定位置
18
19 SpreadsheetWriter.Save(doc); //保存工作表
20
21 return stream.ToArray();
22
23 }
24
25 }


現(xiàn)在我們報表是以流的形式存在于內(nèi)存中,在我的項目中,我是把流上傳到MOSS上的Excel server服務器供用戶查看及下載。在此我們可以把流下載到本地看一下效果。

View Code
 1 byte[] bytes = WriteToExcel( CarryResource  CarryResource, string ModelUrl)//這兩個參數(shù),我就不寫值了。
2
3 Response.ContentType = "application/octet-stream";
4
5 Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DateTime.Now.ToShortDateString() + ".xlsx", System.Text.Encoding.UTF8));
6
7 Response.BinaryWrite(bytes);
8
9 Response.Flush();
10
11 Response.End();

下載后打開就可以看到如下的報表了:

至此,我們的報表就生成好了,其實,OpenXMl還有很多種其它的用法,方法也有很多種,我這里只是一種最簡單,也是最有效的用法。起到一個拋磚引玉的作用。希望大家深深挖掘它,和大家來一起分享。最后一篇《萬能報表之圖片篇》最晚我也將會在這個星期天寫出來,分享給大家。大家有什么不明白的地方可以留言一起討論,進行編輯完善。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多