ASP.NET MVC中Excel的操作

ASP.NET MVC中Excel的操作

Excel数据的导入和导出

Excel数据导入和导出操作,本文针ASP.NET MVC,为自己做一个记录。

Excel数据的导入

对Excel数据的导入方法有很多,针对使用过的方法做一个总结,所有方法的前提基本都是要先把Excel保存到服务器端,这个方法比较简单,文件的保存,返回路径即可:

//前端代码
<form action="" method="post" enctype="multipart/form-data">
	<input name="myfile" type="file" accept="application/vnd.ms-excel">
</form>
//后台代码
HttpPostedFileBase file = Request.Files["myfile"];
file.SaveAs("保存路径.xlsx");//保存文件
  1. NPOI ,NPOI是源于一个用于读取xls,doc,ppt文档的POI 项目,POI是Java项目,后面因为有.Net的市场,于是将POI移植到.Net上;
  2. LinqToExcel, 感觉这个库文件用起来简单,实用,操作方便,而且结合了Linq的查询特性,excel版本不仅支持03,而且连wps表格都支持(后缀名为.et),csv文件更不在话下了;
  3. OLEDB,用OLEDB方式读取EXCEL的速度是非常快的。但是当Excel数据量很大时。会非常占用内存,当内存不够时会抛出内存溢出的异常,需要安装([AccessDatabaseEngine];
  4. Microsoft.Office.Interop.Excel ,首先服务器需要安装office软件;

NPOI

首先下载DLL,然后添加引用

  1. using NPOI.SS.UserModel;
  2. using NPOI.HSSF.UserModel;
  3. using NPOI.XSSF.UserModel;
DataTable dt = new DataTable();
IWorkbook workbook = null;  //新建IWorkbook对象  
string extension = System.IO.Path.GetExtension(fullPath);
FileStream fileStream = new FileStream(fullPath,FileMode.Open,FileAccess.Read);
if (extension ==".xlsx") // 2007版本  
{
	workbook = new XSSFWorkbook(fileStream);  //xlsx数据读入workbook  
}
else if (extension ==".xls") // 2003版本  
{
	workbook = new HSSFWorkbook(fileStream);  //xls数据读入workbook  
}
ISheet sheet = workbook.GetSheetAt(0);  //获取第一个工作表  
IRow row;//新建当前工作表行数据  
for (int i = 0; i < sheet.LastRowNum; i++)  //对工作表每一行  
{
	row = sheet.GetRow(i);   //row读入第i行数据  
	if (row != null)
	{
    	if (row.LastCellNum >= 3)
    	{
         	DataRow rows = dt.NewRow();
         	rows[0] = row.GetCell(0).ToString();
         	rows[1] = row.GetCell(1).ToString();
         	dt.Rows.Add(rows);
         }
	}
}
fileStream.Close();
System.IO.File.Delete(fullPath);
return dt;

LinqToExcel

//直接转接实体类
 public List<Admin_Login> GetImportData(string fileName)
{
	List<Admin_Login> List = new List<Admin_Login>();
	var excelFile = new ExcelQueryFactory(fileName);
	//对应列头
	excelFile.AddMapping<Admin_Login>(x => x.UserName, "UserName");
	excelFile.AddMapping<Admin_Login>(x => x.Power, "Power");
	excelFile.AddMapping<Admin_Login>(x => x.CreateTime, "CreateTime");
    //SheetName
    var excelContent = excelFile.Worksheet<Admin_Login>(0);
	int rowIndex = 1;
    //检查数据正确性
    foreach (var row in excelContent)
    {
     	var model = new Admin_Login();
        model.UserName = row.UserName;
        model.Power = row.Power;
        model.CreateTime = row.CreateTime;              
        List.Add(model);
        rowIndex += 1;
    }
     return List;
}

OLEDB

public static DataSet Get_ExcelSheet_Source(string P_str_Excel, string P_str_SheetName)
{
	DataSet myds = new DataSet();//实例化数据集对象
	//--HDR = Yes;”指示第一行中包含列名,而不是数据,
	//-----"IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。
	//---------Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对Excel97。
    string P_str_OledbCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + P_str_Excel + ";Extended Properties=Excel 8.0;";
    OleDbConnection oledbcon = new OleDbConnection(P_str_OledbCon);//实例化Oledb数据库连接对象
    string P_str_ExcelSql = "";//定义变量,用来记录要执行的Excel查询语句
    OleDbDataAdapter oledbda = null;//实例化Oledb数据桥接器对象
    P_str_ExcelSql = string.Format("select * from [{0}]", P_str_SheetName);//记录要执行的Excel查询语句
    oledbda = new OleDbDataAdapter(P_str_ExcelSql, P_str_OledbCon);//使用数据桥接器执行Excel查询
    oledbda.Fill(myds, P_str_SheetName);//填充数据
    return myds;
}

你可能感兴趣的:(ASP.NET,MVC)