使用C#和Excel进行报表开发(一)--开始


C#操作Excel进行报表开发系列共写了八篇,也已经有很久没有新东西了,现在整理一下,方便以后查阅,如果有写新的,会同时更新。需要注意的是因为Office的版本不同,实际的代码可能会有所不同,但是都是多几个,少几个参数,补上参数System.Reflection.Missing.Value就可以了
将Excel应用于报表开发中(一)--开始
使用C#和Excel进行报表开发(二)-操作统计图(Chart)
使用C#和Excel进行报表开发(三)-生成统计图(Chart)
使用C#和Excel进行报表开发(四)-复制单元格
使用C#和Excel进行报表开发(五)-操作单元格边框和颜色
使用C#和Excel进行报表开发(六)-操作行和列
使用C#和Excel进行报表开发(七)-设置单元格的显示格式
使用C#和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毕竟给我们提供了一种选择,可以在开发时对多种方案权衡利弊,使用最适合项目的。

原文地址:http://www.cnblogs.com/dahuzizyd/archive/2007/04/11/CSharp_Excel_Report_Chart_All.html

整个系列均为转载,转载请注明出处!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值