由于VS2003 报表种类太多了,所以此处无法上传,所以大家有communitysever的可以从里面获得然后反编译为自己所用,没有的就到网络上搜下吧,有许多资源呢!论坛上也有的。
对于VS2003 报表的表格,特别是国内的一些应用,都是一个个的格子组成的,这样要是用线来一根根画就比较麻烦,但是这类工具还都不提供表格化的报表布局定义方式。苦闷啊!#t#
一个很好的选择是VS2005的客户端报表(RDLC),但是在某几个方面还是不够灵活,例如,灵活性有限制,要想自己编码实现一些复杂逻辑还是有困难;要VS2005,对于一些还在使用VS2003的项目就只有眼馋的份了。用Excel来实现,优点在于页面布局设计灵活,同时使用代码来操作数据要更灵活,更精确。
下面是一个简单的例子,打开一个定义好的Excel文件,这个文件是作为报表的模板,然后向模板的指定格子里填充数据,形成一个报表,在web方式下可以按照指定的命名方式在服务器上生成一个excel文件,之后传送到客户端,由客户端启动excel进行打印。
- 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毕竟给我们提供了一种选择,可以在开发时对多种方案权衡利弊,使用最适合项目的。下面的代码使用一个现有的统计图Excel文件,加载这个文件,设置某一项的值和统计图的表示方式,然后保存到另一个Excel文件里。如果是VS2003Office2003,也可以选择VS2003 报表。
下面的代码说明如何一个Sheet上的选定内容拷贝到另一个Sheet
- ThisApplication.DisplayAlerts = false;
- xlSheet = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(1);
- //Excel.Range range = xlSheet.get_Range("G4",Type.Missing);
- Excel.Range range = (Excel.Range)xlSheet.Rows.get_Item(18, Type.Missing);
- Excel.Range range1 = (Excel.Range)xlSheet.Rows.get_Item(19, Type.Missing);
- range.Value = "123";
- range.Copy(range1);
- range1.Rows.Insert(XlInsertShiftDirection.xlShiftDown);