zoukankan      html  css  js  c++  java
  • 将Excel应用于报表开发中(一)开始

    目前的商业工具如水晶报表,ActiveReport等,都提供了灵活,强大的功能,但是对于比较特殊化的表格,特别是国内的一些应用,都是一个个的格子组成的,这样要是用线来一根根画就比较麻烦,但是这类工具还都不提供表格化的报表布局定义方式。一个很好的选择是VS2005的客户端报表(RDLC),但是在某几个方面还是不够灵活,例如,灵活性有限制,要想自己编码实现一些复杂逻辑还是有困难;要VS2005,对于一些还在使用VS2003的项目就只有眼馋的份了。用Excel来实现,优点在于页面布局设计灵活,同时使用代码来操作数据要更灵活,更精确。

    下面是一个简单的例子,打开一个定义好的Excel文件,这个文件是作为报表的模板,然后向模板的指定格子里填充数据,形成一个报表,在web方式下可以按照指定的命名方式在服务器上生成一个excel文件,之后传送到客户端,由客户端启动excel进行打印。

     

    Excel.Application m_objExcel = null;

    Excel._Workbook m_objBook = null;

    Excel.Sheets m_objSheets = null;

    Excel._Worksheet m_objSheet = null;

    Excel.Range m_objRange = null;

           

    object m_objOpt = System.Reflection.Missing.Value;

    try

    {

            m_objExcel = new Excel.Application();

    m_objBook = m_objExcel.Workbooks.Open("z:\\Book1.xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);

     

            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;

            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));

     

     

            string[] info = new string[5] { "Cure", "26", "dahuzizyd.cnblogs.com", "", "按时 ?放奥斯丁奥斯丁非是否奥斯丁非" };

            m_objRange = m_objSheet.get_Range("B1", m_objOpt);

            m_objRange.Value = info[0];

            m_objRange = m_objSheet.get_Range("E1", m_objOpt);

            m_objRange.Value = info[1];

            m_objRange = m_objSheet.get_Range("B2", m_objOpt);

            m_objRange.Value = info[2];

            m_objRange = m_objSheet.get_Range("E2", m_objOpt);

            m_objRange.Value = info[3];

            m_objRange = m_objSheet.get_Range("A3", m_objOpt);

            m_objRange.Value = info[4];

                                   

            m_objExcel.DisplayAlerts = false;

     

            m_objBook.SaveAs("z:\\Book2.xls", m_objOpt, m_objOpt,

            m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,

                                            m_objOpt, m_objOpt, m_objOpt, m_objOpt);

     

    }

    catch (Exception ex)

    {

            MessageBox.Show(ex.Message);

    }

    finally

    {

            m_objBook.Close(m_objOpt, m_objOpt, m_objOpt);

            m_objExcel.Workbooks.Close();

            m_objExcel.Quit();

            System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);

            System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);

            m_objBook = null;

            m_objExcel = null;

            GC.Collect();

    }

     

    可以看到,使用Excel要进行一部分的编码,好在这部分还不太复杂,但是最大的问题就在于当报表需求变更时,要重新编译部署,而且当格子特别多的时候,要这样硬编码还是挺痛苦的一件事。不过使用Excel毕竟给我们提供了一种选择,可以在开发时对多种方案权衡利弊,使用最适合项目的。

  • 相关阅读:
    转 | 禁忌搜索算法(Tabu Search)求解带时间窗的车辆路径规划问题详解(附Java代码)
    Branch and price and cut求解传统VRP问题以及VRPTW问题
    标号法(label-setting algorithm)求解带时间窗的最短路问题(ESPPRC)
    运筹学从何学起?如何快速入门精确式算法?
    转 | 模拟退火算法(SA)和迭代局部搜索(ILS)求解TSP的Java代码分享
    用Python画论文折线图、曲线图?几个代码模板轻松搞定!
    45. 截取“测试数据”后面的内容
    44. 更改oracle字符集编码american_america.zh16gbk 改为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    18. 浏览器关闭页面时弹出“确定要离开此面吗?”
    6. concat_ws用法
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/ExcelReport_1.html
Copyright © 2011-2022 走看看