TTEP.CN > 软件 >

如何利用ASP. NET以Excel文件形式将有用数据快速

在部队日常管理中,随时知晓装备数量质量状况是一项 经常性工作。新时代背景下,指挥员和参谋人员如何从信息 化系统产生的大量数据中分析、总结出装备变化规律,对平 时和战时都具有非常重要的指导意义。因此,从某种意义上 来说,一个信息化系统设计成功的关键,很大程度上取决于 能否把数据信息以快捷和安全的方式呈现给使用者。虽然 可以通过IE自带的页面打印功能或第3方的控件(如水晶 报表)来实现上述要求,但却因为种种原因不能很好地满足 实际需要[1]。现实生活中,由于Excel与信息的统计、分析有 密切关系,因此可通过编程将有用信息由数据库导入Excel 文档,从而实现Excel报表的自动生成。
1 相关技术介绍 ASP.NET是Microsoft公司的一款主打产品,作为.NET FrameWork框架中的一个重要组成部分,主要用于Web设 计。ASP.NET是统一的Web应用程序平台,提供了为建立 和部署企业级Web应用程序所必需的服务。ASP.NET为能 够面向任何浏览器或设备的更安全的、更强的可升级性,更 稳定的应用程序提供了新的编程模型和基础结构。
Excel是用户非常常用的Office系列软件之一,通过程序 将数据库中的数据导出为Excel文档,可方便使用人员分析 数据。Excel是由Microsoft为Windows和AppleMacintosh操 作系统电脑编写和运行的一款试算表软件,可以进行各种数 据处理、统计分析和辅助决策操作,广泛地应用于管理、统计 财经、金融等众多领域。
1.1 COM组件概述 通过C#.NET创建Excel报表之前,需要在工程中添加 一个Excel的COM组件。COM component(COM组件)是微 软公司为计算机工业的软件生产更加符合人类的行为方式 开发的一种新的软件开发技术。在COM构架下,人们可开 发出各种各样的功能专一的组件,然后将他们按照需要组合 起来,构成复杂的应用系统。由此带来的好处是多方面的: 可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同1个组件;可 以方便地将应用系统扩展到网络环境下;COM与语言、平台 无关的特性使所有的程序员均可充分发挥自己的才智与专 长编写组件模块。COM组件是代码的封装,对外提供接口, 有比脚本更强大的功能,并能提高安全性。
1.2 添加MicrosoftExcel11.0ObjectLibrary的引用 在使用COM组件之前,需要添加COM组件的引用,具 体操作方法如下:在解决方案的资源管理器窗口的“引用”菜 单中选择“添加引用”菜单项,之后选中“COM”标签项,在列 表中添加MicrosoftExcel11.0ObjectLibrary(不同版本的Of? fice所对应的COM组件也不同)。COM组件添加完毕后就 可以在应用程序中使用其提供的对象、方法来开发Excel报 表了。
1.3 Excel报表的绘制流程 由于Excel报表一般都采用表格形式来显示数据,故在 将数据填入Excel表格之前须按规定格式对原始数据进行预 处理。先提取出报表所需的数据,再将这些有用数据放入 DataSet对象中。这时,DataSet对象中存放的内容就是Excel 报表的数据源。最后,通过调用COM接口库可将数据源导 出到新建的Excel文档中[2]。Excel报表的绘制流程如图1 所示。2 主要程序设计 2.1 添加命名空间 System.Data.SqlClient命名空间提供了一个类集合,这个类集合用于访问托管空间中的SQLServer数据库。而Ex? cel命名空间则提供了Excel编程所需用的主要类,包括Ap? plication、Workbook、Worksheet及Range。Application对象表 示Excel应用程序本身。Workbook对象是Workbooks集合的 成员,表示Excel应用程序中的单个工作簿。Worksheet对象 是Worksheets集合的成员,表示Excel应用程序中的单个工 作表,其含义如表1所示。
表1 Excel主要成员对象 对象作用 Application Excel应用程序 Workbook Excel工作簿 Worksheet Excel工作表 Range Excel区域 2.2 主要代码 //从数据库导出到EXCEl[3]: /?当点击“导出到EXCEL"按钮时,弹出一个对话框, 提示用户选择保存文件的位置?/ privatevoidbuttonlClick(objectsender,EventArgse) { SaveFileDialogl.Title="请 选 择 导 出 文 件 的 存 储 路 径 "; saveFileDialogl.FilelVame=comboBox1.Text.ToString(); saveFileDialogl.Filter="EXCEL文档(?.x1s)|?. xls"; saveFileDialog1.ShowDialog(); } /?当用户点击保存文件对话框中的“保存”按钮时,将 dataGridViewl中的数据表导出到EXCEL电子表格中?/ privatevoidsaveFileDialoglFileOk (objectsender,System.ComponentModel.CancelEventArgs e) { if(saveFileDialogl.FileName! ="") { Microsoft.Office.Interop.Excel.Applicationmyxls=ne? wMicrosoft.Office.Interop.Excel.Application(); if(myxls==null) MessageBox.Show("无法创建EXCEL对象"); else { myxls.Visible=false; Workbooksworkbooks=myxls.Workbooks; //建立EXCEL工作簿 Workbookworkbook=myxls.Workbooks.Add(XIWBA? Template.xlWBATWorksheet); Worksheetworksheet=(Worksheet)hvorkbook.Workshe?ets; stringtableName=comboBoxl.Text.ToString();//读取数 据表名 //将数据表中的字段名写入EXCEL表的第一行 for(inti=0;i<ClassVariable.dataSetIn.Tables[ta? bleName].Columns.Count-1;i++) worksheet.Cells[1,i+1]=dataGridViewl.Columns[i]. HeaderText; //将数据表中的数据写入EXCEL表 for(inti=0;i<ClassVariable.dataSetIn.Tables[ta? bleName].Rows.Count;i++) for(intj=0;j<C1assVariable.dataSetIn.Tables[ta? bleName].Columns.Count-1;j++) worksheet.Cells[i+2,j+1]=C1assVariable.dataSetIn. Tables[tableName].Rows[i][j].ToString();//保存EXCEL 工作簿 workbook.Saved=true; workbook.SaveCopyAs(saveFileDialogl.FileName); /?在EXCEL保存完毕后,释放资源。释放对象的顺序 应与创建对象的顺序相反?/ System.Runtime.InteropServices.Marshal.ReleaseComObject (worksheet); Worksheet=null; System.Runtime.InteropServices.Marshal.ReleaseComObject (workbook); workbook=null; workbooks.Close(); System.Runtime.InteropServices.Marshal.ReleaseComObject (workbooks); workbooks=null; myxls.0uit()System.Runtime.InteropServices.Marshal. ReleaseComObject(myxls); myxls=null; MessageBox.Show("导出Excel成功"); }}}
最近发表
赞助商链接