您的位置:首页 > 编程语言 > ASP

asp.net读取Excel文件的两种方法,NPOI方法

2014-02-28 14:28 567 查看
~_~一个程序员的淘宝店: 点击打开链接

第一种方法:传统方法,采用OleDB读取EXCEL文件,

优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用

private DataSet GetConnect_DataSet2(string fileName)
{
DataSet myDataSet = new DataSet();
//创建一个数据链接
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + fileName + ";Extended Properties=Excel 8.0";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [Sheet1$] ";
//try
//{
myConn.Open();
//打开数据链接,得到一个数据集
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
//创建一个 DataSet对象
myDataSet = new DataSet();
//得到自己的DataSet对象
myCommand.Fill(myDataSet, "CodeTable");
//关闭此数据链接
myConn.Close();
//}
//catch (Exception ex)
//{

//}
return myDataSet;
}


第二种方法:用第三方组件:NPOI组件,推荐使用此方法

先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用。

NPOI 是 POI 项目的 .NET 版本。POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。

使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。

NPOI采用的是Apache 2.0许可证(poi也是采用这个许可证),这意味着它可以被用于任何商业或非商业项目,你不用担心因为使用它而必须开放你自己的源代码,所以它对于很多从事业务系统开发的公司来说绝对是很不错的选择。
当然作为一个开源许可证,肯定也是有一些义务的,例如如果你在系统中使用NPOI,你必须保留NPOI中的所有声明信息。对于源代码的任何修改,必须做出明确的标识。

//config中配置的上传的Excel路径
static object basePath = ConfigurationManager.AppSettings["FilePath"];
#region 读取Excel文件
/// <summary>
/// 读取Excel文件到table中
/// </summary>
/// <param name="filePath">excel文件路径</param>
/// <returns></returns>
public static DataTable ReadExcel(string fileName)
{
DataTable dt = new DataTable();
string filePath = "";
if (basePath != null)
{
filePath = HostingEnvironment.MapPath((basePath.ToString() + fileName));
dt = ImportExcelFile(filePath);
}
//文件是否存在
if (System.IO.File.Exists(filePath))
{

}
return dt;
}
public static DataTable ImportExcelFile(string filePath)
{
HSSFWorkbook hssfworkbook;
#region//初始化信息
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
}
catch (Exception e)
{
throw e;
}
#endregion

NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
DataTable dt = new DataTable();
rows.MoveNext();
HSSFRow row = (HSSFRow)rows.Current;
for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
{
//dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
//将第一列作为列表头
dt.Columns.Add(row.GetCell(j).ToString ());
}
while (rows.MoveNext())
{
row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();
for (int i = 0; i < row.LastCellNum; i++)
{
NPOI.SS.UserModel.ICell cell = row.GetCell(i);
if (cell == null)
{
dr[i] = null;
}
else
{
dr[i] = cell.ToString();
}
}
dt.Rows.Add(dr);
}
return dt;
}
#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: