• 万能报表之数据篇


    对于上篇中提到的报表我们以如下的事例,来说明如何做:报表事例图:

    模板图:

    来源数据图:(即为上图中Data2中的数据)

    生成报表图:

     

    现在相信大家己经看出来了,我的报表是在Excel中完成的,我们的报表在项目中都是借助excel来实现的,将生成的报表传到我们的MOSS上 Excel服务器上供用户查看以用下载。借助于excel中的透视表来做,基本上能够满足各种需求。当然对于特别特别复杂的我们可以自己定义想要的模板。完成如上图的报表我们要做的准备工作如下:

    报表的数据来源:

      根据我们报表的展示需求,我们先来确定下呈现报表所需要的数据,写好数据的返回格式,以便于写存储过程从项目中提取我们所需要的数据。如我们现在要生成如上图的报表,通过分析发现,我们需要如源数据图中的这些数据,到此数据的需求格式我们就定下来了。

    报表的模板:

     根据上面我们分析需要的数据,我们来制作报表的模板。在此我特别说明一下,模板是透视表,是根据上图中的Data2字段来生成的。对Excel透视表不清楚的,在此我一两句也说不清,网上有很多教程,可以去先学习下。再来做模板,及数据返回需求的格式分析就会不感到吃力。

    数据写入到Excel

    怎么把数据写到Excel的Data2中是我们这次报表生成的关键。要想把数据写到Excel中我们要借助于一个微软开源的程序: OpenXML。

    下面我们来看一下OpenXML是什么,其实OpenXML并不是一种新技术,它早在2006年就出来了,只是在网上介绍它利用它来操作Excel的说明文章和示例太少了,也就很少有人去应用它了。OpenXML(OOXML)是微软在Office 2007中提出的一种新的文档格式,Office 2007中的Word、Excel、PowerPoint默认均采用OpenXML格式 。OpenXML在2006年12月成为了ECMA规范的一部分。至于它的其它介绍,大家到网上查看吧,它的功能是非常强大的。我们今天主要用它来操作Excel。

    在介绍如何做之前,我们先做好准备工作:

    第一、   报表的模板:我们已经在上面做好了。

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

    准备工作做完了,现在看看如何把我们查询出的数据写到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); //生成报表所需要的结果集
    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");//将查询出的结果集中的我们所要的表数据写入到工作表Data2中的指定位置
    18
    19 SpreadsheetWriter.Save(doc); //保存工作表
    20
    21 return stream.ToArray();
    22
    23 }
    24
    25 }


      现在我们报表是以流的形式存在于内存中,在我的项目中,我是把流上传到MOSS上的Excel server服务器供用户查看及下载。在此我们可以把流下载到本地看一下效果。

    View Code
     1 byte[] bytes = WriteToExcel( CarryResource  CarryResource, string ModelUrl)//这两个参数,我就不写值了。
    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还有很多种其它的用法,方法也有很多种,我这里只是一种最简单,也是最有效的用法。起到一个抛砖引玉的作用。希望大家深深挖掘它,和大家来一起分享。最后一篇《万能报表之图片篇》最晚我也将会在这个星期天写出来,分享给大家。大家有什么不明白的地方可以留言一起讨论,进行编辑完善。

                   

     

  • 相关阅读:
    1027 Colors in Mars (20 分)
    1025 PAT Ranking (25 分)
    1024 Palindromic Number (25 分)
    JVM调优之jstack找出最耗cpu的线程并定位代码
    kill -3 获取threaddump信息
    java单例支持高并发
    yum出现的“UnicodeDecodeError: 'ascii' codec”问题解决
    命令行参数
    vyatta常用操作
    mysql5.8安装指南
  • 原文地址:https://www.cnblogs.com/xhwy/p/2281756.html
Copyright © 2020-2023  润新知