asp.net中如何实现excel文档的转换

 我来答
stydfans
推荐于2016-03-25 · TA获得超过668个赞
知道小有建树答主
回答量:1263
采纳率:100%
帮助的人:512万
展开全部
asp.net Excel导入和导出
1、Excel数据导入到数据库中:
//该方法实现从Excel中导出数据到DataSet中,其中filepath为Excel文件的绝对路径,sheetname为表示那个Excel表; public DataSet ExcelDataSource( string filepath , string sheetname ) ...{ string strConn; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn); OleDbDataAdapter oada = new OleDbDataAdapter ( "select * from [" + sheetname + "$]", strConn ); DataSet ds = new DataSet (); oada.Fill ( ds ); return ds ; }
上面的代码实现了将Excel中的数据写进DataSet中,实现了这一步后,你可以按照自己的需要对获得DataSet进行处理,需要注意的一个问题是,你必须要指定sheetname,即Excel中的哪一个工作单需要导入,否则会出现错误。
2、如何从Excel中获得工作单(sheetname):
//获得Excel中的所有sheetname。public ArrayList ExcelSheetName ( string filepath )...{ ArrayList al = new ArrayList (); string strConn; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open (); DataTable sheetNames = conn.GetOleDbSchemaTable (System.Data.OleDb.OleDbSchemaGuid.Tables,new object[]...{null,null,null,"TABLE"}); conn.Close (); foreach ( DataRow dr in sheetNames.Rows ) ...{ al.Add ( dr[2] ); } return al;}通过这两步,就基本可以实现将Excel导入到数据库中了,具体实现中的细节问题,你可以自己在实践中获得。
3、将数据库中的数据导入Excel中,在这里我讲叙自己实践中的两个方法:
方法一:从最基本的写文件入手,将从数据库中读出来的数据写入到Excel中;
//该方法实现将数据导入到Excel文件中,其中的DataTable dt就是你需要将数据写入到Excel中的数据;public void ExportExcel( DataTable dt , StreamWriter w )...{ try ...{ for( int i = 0 ; i < dt.Columns.Count ; i ++ ) ...{ w.Write ( dt.Columns[i] ); w.Write( ' ' ); } w.Write ( " " );
object[] values = new object [dt.Columns.Count]; foreach ( DataRow dr in dt.Rows ) ...{ values = dr.ItemArray ; for ( int i = 0 ; i < dt.Columns.Count ; i++ ) ...{ w.Write ( values[i] ); w.Write ( ' ' ); } w.Write ( " " ); } w.Flush(); w.Close(); } catch ...{ w.Close(); }}
StreamWriter w就是你自己创建的一个流,创建该数据流时,你需要自己指定需要将数据写入到那个文件,即指定文件路径,要实现下载的话,就可以简单的用Response.Redirect ( "指定需要被下载的文件路径" );
方法二:该方法实现的是将数据从DataGrid中导入到Excel中:
//filename为Excel的名字,ToExcelGrid就是数据源,在此为DataGrid数据源;private void ExportExcelFromDataGrid( string filename , System.Web.UI.WebControls.DataGrid ToExcelGrid )...{ Response.Clear(); Response.Buffer= true; Response.Charset="utf-8"; Response.AppendHeader("Content-Disposition","attachment;filename="+Server.UrlEncode ( filename ) ); Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");//设置输出流为简体中文 Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 this.EnableViewState = false; System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true); System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); ToExcelGrid.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString()); Response.End();}
用该方法的时候,需要注意将DataGrid数据源中的允许翻页,允许排 序设置成"false",同时一些特殊行进行需要将其设置成不可视,如编辑行等,若不这样的话,用该方法实现的数据导入到Excel,会出现异常“需要将 XXX放入到一个具有runat=server的form窗体中”,我具体忘了XXX代表的意思,你可以在实践中尝试一下,就可以知道出现的错误。
3. .Net中导入Excel数据时应注意的事
从Excel向数据库导数据的时候,最常用的方式是使用Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:"Demo.xls; Extended Properties='Excel 8.0;HDR=YES;IMEX=1'。 但 是当一列中既有数字,又有文本的时候,总是莫名其妙的出现部分数据读不到的现象,有时是读不到文本数据,有时是读不到数字数据。这是为什么呢?原来 OleDb会智能的根据前8行的数据判断Excel的列类型,当文本数据的行数 > 数字数据的行数时,列类型被设为文本,否则为数字。那我想读到全部的数据该做些什么呢?这位同学问得好,秘密就在于IMEX=1,以导入模式读取数据。
百度网友d4d2ac2
2014-01-17 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:617
采纳率:0%
帮助的人:138万
展开全部
建议你参考下pageoffice。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
掌瞬爱A
2014-01-17 · TA获得超过1309个赞
知道小有建树答主
回答量:1137
采纳率:87%
帮助的人:383万
展开全部
你试着用npoi,操作excel比自己写强大的多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式