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);
#region 设置数字为文本形式,避免长数字转为科学计数法而丢失0
string strStyle = "<style>td{mso-number-format:'\\@';}</style>";
oStringWriter.WriteLine(strStyle);
#endregion
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,以导入模式读取数据。
asp.net Excel导入&导出的更多相关文章
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- ASP.NET Core导入导出Excel文件
ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...
- ASP.NET- 使用NPOI导入导出标准Excel
尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
- 利用反射实现通用的excel导入导出
如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...
- Excel导入导出的业务进化场景及组件化的设计方案(上)
1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...
- 关于Excel导入导出的用例设计
目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...
- Excel导入导出帮助类
/// <summary> /// Excel导入导出帮助类 /// 记得引入 NPOI /// 下载地址 http://npoi.codeplex.com/rele ...
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
随机推荐
- BZOJ 2721: [Violet 5]樱花
(X-N)(Y-N)=N^2 #include<cstdio> using namespace std; const int mod=1e9+7; int n,cnt,isprime[10 ...
- [每日App一]QQ主题要逆天!轻轻松松月入30万!
听从吾师秦刚(微信或QQ:1111884)酋长的建议,谋哥(微信viyi88)我开始新的征程,每日更新一篇干货文章(要坚持啊!否则被酋长鄙视了). 好了,废话不多说,今天我给大家揭秘一个你从来想也木有 ...
- Web - DOM
1. 简介 DOM(Document Object Mode)是一套web标准,地那一了访问HTML文档的一套属性.方法和事件 其本质: 网页 与 脚本语言 沟通的桥梁 脚本语言通过DOM对象来访问H ...
- C++ POST方式访问网页
bool PostContent(CString strUrl, const CString &strPara, CString &strContent, CString &s ...
- java EL详解
转自:http://www.codeceo.com/article/java-el-usage.html 一.EL简介 1.语法结构 ${expression} 2.[]与.运算符 EL 提供.和[] ...
- 使用Gson解析JSON数据
本文使用gson对json进行解析处理 首先,下载gson包 ,本文使用(gson-1.6.jar) package com.whroid.java.json; import com.google.g ...
- BZOJ 4554 [Tjoi2016&Heoi2016]游戏 ——二分图
出原题,直接二分图匹配即可. #include <cstdio> #include <vector> #include <cstring> using namesp ...
- Java--消除重复数字后的最大值
描述: 一个长整型数字,消除重复的数字后,得到最大的一个数字. 如12341 ,消除重复的1,可得到1234或2341,取最大值2341. 42234,消除4 得到4223 或者 2234 ,再消除2 ...
- linux信号-------初涉
一.信号的本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是进程 ...
- SPI设备的驱动
主要包括两个SPI设备步骤:register_chrdevspi_register_driver关键点1:spi_board_info可以去已经运行的板子下面找例子:/sys/bus/spi/driv ...