.net mvc利用NPOI导入导出excel
发布时间:2020-12-13 20:13:04 所属栏目:PHP教程 来源:网络整理
导读:因近期项目做到,所以记录1下: 1、导出Excel : 首先援用NPOI包,从这里下载》download (Action1定要用FileResult) /// summary /// 批量导出需要导出的列表 /// /summary /// returns/returns public FileResult ExportStu2() { //获得list数据 var chec
因近期项目做到,所以记录1下: 1、导出Excel : 首先援用NPOI包,从这里下载》download (Action1定要用FileResult) /// <summary>
/// 批量导出需要导出的列表
/// </summary>
/// <returns></returns>
public FileResult ExportStu2()
{
//获得list数据
var checkList = (from oc in db.OrganizeCustoms
join o in db.Organizes.DefaultIfEmpty() on oc.custom_id equals o.id
where oc.organize_id == 1
select new
{
customer_id = o.id,customer_name = o.name
}).ToList();
//创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加1个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
//貌似这里可以设置各种样式字体色彩背景等,但是否是很方便,这里就不设置了
//给sheet1添加第1行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
row1.CreateCell(0).SetCellValue("编号");
row1.CreateCell(1).SetCellValue("姓名");
//....N行
//将数据逐渐写入sheet1各个行
for (int i = 0; i < checkList.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
rowtemp.CreateCell(0).SetCellValue(checkList[i].customer_id.ToString());
rowtemp.CreateCell(1).SetCellValue(checkList[i].customer_name.ToString());
//....N行
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(0,SeekOrigin.Begin);
DateTime dt = DateTime.Now;
string dateTime = dt.ToString("yyMMddHHmmssfff");
string fileName = "查询结果" + dateTime + ".xls";
return File(ms,"application/vnd.ms-excel",fileName);
} 前台直接写便可实现:@Html.ActionLink("点击导出Excel","ExportStu2") 这里有1篇专门介绍设置样式的文章:http://www.cnblogs.com/puzi0315/p/3265958.html http://blog.csdn.net/xhccom/article/details/7687264 http://blog.csdn.net/bestreally/article/details/23257851 2、导入Excel: 首先说1些前台吧,mvc上传注意必须加 new { enctype = "multipart/form-data" } <td>
@using (@Html.BeginForm("ImportStu","ProSchool",FormMethod.Post,new { enctype = "multipart/form-data" }))
{
<text>选择上传文件:(工作表名为“Sheet1”,“电脑号”在A1单元格。)</text>
<input name="file" type="file" id="file" />
<input type="submit" name="Upload" value="批量导入第1批名册" />
}
</td> 后台实现:只传路径得出DataTable:/// <summary>
/// Excel导入
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public 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
using (NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0))
{
DataTable table = new DataTable();
IRow headerRow = sheet.GetRow(0);//第1行动标题行
int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells
int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1
//handling header.
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);
table.Columns.Add(column);
}
for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = table.NewRow();
if (row != null)
{
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = GetCellValue(row.GetCell(j));
}
}
table.Rows.Add(dataRow);
}
return table;
}
} 补充1个类:/// <summary>
/// 根据Excel列类型获得列的值
/// </summary>
/// <param name="cell">Excel列</param>
/// <returns></returns>
private static string GetCellValue(ICell cell)
{
if (cell == null){ return string.Empty; }
switch (cell.CellType)
{
case CellType.BLANK:
return string.Empty;
case CellType.BOOLEAN:
return cell.BooleanCellValue.ToString();
case CellType.ERROR:
return cell.ErrorCellValue.ToString();
case CellType.NUMERIC:
case CellType.Unknown:
default:
return cell.ToString();//This is a trick to get the correct value of the cell. NumericCellValue will return a numeric value no matter the cell value is a date or a number
case CellType.STRING:
return cell.StringCellValue;
case CellType.FORMULA:
try
{
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
e.EvaluateInCell(cell);
return cell.ToString();
}
catch
{
return cell.NumericCellValue.ToString();
}
}
} 得到DataTable后,就想怎样操作就怎样操作了。(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |