




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年4月19日在ASPNET中读写Excel文件有四种解决方案文档仅供参考在ASP.NET中读写Excel文件有四种解决方案在ASP.NET应用程序常常会遇到需要从Excel文件中读取数据或将数据写入Excel的需求。一般来讲,在ASP.NET中读写Excel文件有四种解决方案。1.1.1使用OLEDB使用OLEDB能够以查询数据库的方式来读取Excel文件,因为在某种程度上Excel表格能够看成是一张一张的数据表。其二者的主要区别在于所使用的数据引擎不一样。使用OLEDB访问Excel的要点是计算机上必须具有MicrosoftAccessDataComponent2.6(MADC2.6)以上版本,同时在连接字符串上必须声明“ExtendedProperties=Excel8.0”然后其它的写法就和一般的访问数据库一样了,打开连接,填充数据集,再关闭连接即可。例如下面的实现代码://创立一个数据链接stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\\sample.xls;ExtendedProperties=Excel8.0";OleDbConnectionmyConn=newOleDbConnection(strCon);stringstrCom="SELECT*FROM[Sheet1$]";myConn.Open();//打开数据链接,得到一个数据集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);//创立一个DataSet对象myDataSet=newDataSet();//得到自己的DataSet对象myCommand.Fill(myDataSet,"[Sheet1$]");//关闭此数据链接myConn.Close();代码7-1使用这种解决方案的优点是不需要其它的服务器组件,部署非常方便,可是其缺点也是明显的,用它来读取Excel格式以上的文件会存在数据丢失的情况,而且也无法生成Excel文件。1.1.2使用Office主互操作程序集另外一种解决方案是使用Office主互操作程序集,采用这种方式需要在服务器上安装Office。可是能够比较精细的控制Excel文件的方方面面,包括格式、字体、颜色等等。下面的代码演示了如何读取Excel文件中某个单元格的值:stringexcelFilePath=@"D:\Book1.xls";Excel.ApplicationmyExcel=newExcel.ApplicationClass();objectoMissing=System.Reflection.Missing.Value;myExcel.Application.Workbooks.Open(excelFilePath,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);Excel.WorkbookmyBook=myExcel.Workbooks[1];Excel.WorksheetmySheet=(Excel.Worksheet)myBook.Worksheets[1];System.Data.DataTabledt=newSystem.Data.DataTable("mytable");dt.Columns.Add("F1",System.Type.GetType("System.String"));dt.Columns.Add("F2",System.Type.GetType("System.String"));dt.Columns.Add("F3",System.Type.GetType("System.String"));dt.Columns.Add("F4",System.Type.GetType("System.String"));dt.Columns.Add("F5",System.Type.GetType("System.String"));DataSetmyDs=newDataSet();myDs.Tables.Add(dt);DataRowmyRow;myDs.Clear();for(inti=2;i<=4;i++)//第一行为标题,不读取{myRow=myDs.Tables["mytable"].NewRow();for(intj=1;j<=5;j++){Excel.Ranger=(Excel.Range)mySheet.Cells[i,j];stringstrValue=r.Text.ToString();stringaa=strValue;stringcolumnname="F"+j.ToString();myRow[columnname]=strValue;}myDs.Tables["mytable"].Rows.Add(myRow);}DataGrid1.DataSource=myDs.Tables["mytable"].DefaultView;DataGrid1.DataBind();代码7-2而下面的代码则演示了如何生成Excel文件并向其中写入值:stringfilename="";Excel.ApplicationClassoExcel;oExcel=newExcel.ApplicationClass();oExcel.UserControl=false;Excel.WorkbookClasswb=(Excel.WorkbookClass)oExcel.Workbooks.Add(System.Reflection.Missing.Value);for(inti=1;i<=5;i++){oExcel.Cells[i,1]=i.ToString();oExcel.Cells[i,2]="'第2列";oExcel.Cells[i,3]="'第3列";oExcel.Cells[i,4]="'第4列";}wb.Saved=true;filename=Request.PhysicalApplicationPath+"test.xls";oExcel.ActiveWorkbook.SaveCopyAs(filename);oExcel.Quit();System.GC.Collect();Response.Redirect(Request.ApplicationPath+"/test.xls");代码7-3实际上对于ASP.NET来讲,这并不是一个很好的解决方案,其原因是这个解决方案将客户端的组件用到了服务器上,这往往会带来一些一向不到的问题,如果在处理一个Excel文件的时候出错,那么整个线程就会死在那里,服务器上的Excel进程无法重启动,Excel文件无法删除,后面的Excel文件也无法处理,只能重启服务器,因此这是一个很大的问题。1.1.3使用ServerDocument在上一个解决方案中,使用Office主互操作程序集存在很大的问题,究其原因是因为将本应在客户端使用的Office组件用在了服务器上导致的,因为这些Office组件在设计之初就没有考虑在服务中调用的情况。对于在服务器上使用Excel文件,微软推荐的解决方案是使用ServerDocument。在具有MicrosoftVisualStudioToolsfortheMicrosoftOfficeSystem自定义的MicrosoftOfficeWord文档或MicrosoftOfficeExcel工作簿中,能够将数据存储在嵌入的数据岛中,无需启动Excel或Word即可访问数据岛。数据岛是一个XML文档,其中包含Office文档中嵌入的数据;无需实例化Office文档即可访问该XML文档。数据实际存在于两个地方,即文档和单独的嵌入数据岛中。在数据岛与文档之间使用了数据绑定以使它们保持同步。如果服务器上运行的代码修改了数据岛,则在文档打开而且文档中的代码运行时,Office文档会与数据岛进行同步。此模型具有以下几项优势:l能够将验证代码添加到独立于文档的数据中。经过将验证与文档分离,能够将数据验证代码移植到其它文档中。l数据岛使用可脱机使用的数据填充。当文档中的缓存数据项包含数据时,该文档将与数据岛进行交互。l由于能够从外部访问数据岛,因此无需实例化Office就能够修改文档中嵌入的数据,从而支持服务器上文档的快速批处理。可是,只能访问缓存中的数据,而不是文档中的所有数据。下面的代码分别演示了如何使用ServerDocument访问数据和从数据生成Excel文档:stringexpenseDoc=@"C:\ExpenseDocuments\Expenses0105.xls";ServerDocumentsd1=null;try{sd1=newServerDocument(expenseDoc);CachedDataHostItemdataHostItem1=sd1.CachedData.HostItems["DataNamespace.DataWorksheet"];CachedDataItemdataItem1=dataHostItem1.CachedData["DataCache"];System.IO.StringReaderschemaReader=newSystem.IO.StringReader(dataItem1.Schema);System.IO.StringReaderxmlReader=newSystem.IO.StringReader(dataItem1.Xml);ExpenseData.ReadXmlSchema(schemaReader);ExpenseData.ReadXml(xmlReader);}finally{if(sd1!=null){sd1.Close();}}代码7-4stringname=@"C:\Documents\WordApplication3.doc";System.IO.FileStreamfileStream=null;byte[]bytes=null;try{fileStream=newSystem.IO.FileStream(name,System.IO.FileMode.Open,System.IO.FileAccess.Read);bytes=newbyte[(int)fileStream.Length];fileStream.Read(bytes,0,(int)fileStream.Length);}finally{if(fileStream!=null){fileStream.Close();}}ServerDocumentsd1=null;try{sd1=newServerDocument(bytes,name);//Yourdatamanipulationcodegoeshere.sd1.Save();bytes=sd1.Document;//IfyouhaveaWorddocument,usetheMIMEstring:Response.ContentType="application/msword";//IfyouhaveanExcelworkbook,usetheMIMEstring://Response.ContentType="application/vnd.ms-excel";Response.AddHeader("Content-disposition","filename="+name);Response.Write(sd1);}finally{if(sd1!=null){sd1.Close();}}代码7-5相对来说,这是一个比较理想的解决方案,可是使用该方案有如下几个限制:l客户端必须安装.NETFramework2.0、OfficeToolsforVisualStudio运行时和Office。l开发嵌入于文档中的程序集,用于同步视图和数据岛中的数据,例如用数据岛数据中的某个值更新某单元格中的值,或者用某单元格中的值更新数据岛中的值。l使用专用的Excel模板。1.1.4对于Office的OpenXML格式使用OpenXMLSDK如果决定ASP.NET应用程序仅处理Office生成的OpenXML格式文档,那么使用OpenXMLSDK是一个更好的主意,因为它不需要在服务器上安装Office,对客户端也没有任何要求,只要用的是OpenXML格式的文档就能够了,因为OpenXML格式已提交国际标准化组织,因此,用户能够使用支持OpenXML的任何应用程序读取和编辑该文档。使用该方案需要下载OpenXMLSDK并使用其进行开发,当前该SDK还只是一个CTP版本。下面的代码演示了如何使用OpenXMLSDK读写OpenXML格式的Excel文件。//Howto:Getworksheetinformation.publicList<string>XLGetSheetInfo(stringfileName){//FillthiscollectionwithalistofallthesheetsList<string>sheets=newList<string>();using(SpreadsheetDocumentxlPackage=SpreadsheetDocument.Open(fileName,false)){WorkbookPartworkbook=xlPackage.WorkbookPart;Streamworkbookstr=workbook.GetStream();XmlDocumentdoc=newXmlDocument();doc.Load(workbookstr);XmlNamespaceManagernsManager=newXmlNamespaceManager(doc.NameTable);nsManager.AddNamespace("default",doc.DocumentElement.NamespaceURI);XmlNodeListnodelist=doc.SelectNodes("//default:sheets/default:sheet",nsManager);foreach(XmlNodenodeinnodelist){stringsheetName=string.Empty;sheetName=node.Attributes["name"].Value;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 超长信用债探微跟踪:超长信用的韧性撑多久
- 如何科学护理老年认知障碍
- 针对工业互联网平台的2025年入侵检测系统:异常行为分析与优化实践报告
- 智能化升级改造对城市污水处理厂设备寿命影响研究报告
- 2025年农业机械化智能化发展中的农业产业结构优化与升级报告
- 2025年餐饮业会员营销活动效果评估与客户忠诚度增长报告
- 2025年“健康中国”战略下医疗健康产业投资策略与风险控制研究报告
- 量子计算技术在金融风险模拟中的大数据分析与风险管理研究报告
- 数字孪生在城市公共空间规划中的互动体验设计报告
- 2025细胞治疗临床试验与审批流程中的临床试验伦理审查伦理学案例报告
- 湖南建筑工程定额
- 四川省成都天府新区2024年八年级下学期末物理试题附答案
- (完整版)增值税申报表带公式模板
- 期末考试卷2《心理健康与职业生涯》(原题卷)高一思想政治课(高教版2023基础模块)
- 数字图像处理与机器视觉智慧树知到期末考试答案章节答案2024年温州理工学院
- 英文经典电影赏析智慧树知到期末考试答案2024年
- 从安全意识到安全行为习惯的养成
- 七下第三单元《骆驼祥子》整本书阅读 公开课一等奖创新教学设计
- 小米创业思考
- 铁矿矿石的市场定位与销售渠道
- 坍塌事故培训课件
评论
0/150
提交评论