.net mvc利用NPOI导入导出excel
1、导出Excel :
首先引用NPOI包
(Action一定要用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 ==
select new
{
customer_id = o.id,
customer_name = o.name
}).ToList(); //创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); //貌似这里可以设置各种样式字体颜色背景等,但是不是很方便,这里就不设置了 //给sheet1添加第一行的头部标题
NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow();
row1.CreateCell().SetCellValue("编号");
row1.CreateCell().SetCellValue("姓名");
//....N行 //将数据逐步写入sheet1各个行
for (int i = ; i < checkList.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
rowtemp.CreateCell().SetCellValue(checkList[i].customer_id.ToString());
rowtemp.CreateCell().SetCellValue(checkList[i].customer_name.ToString());
//....N行
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(, 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")
这里有一篇专门介绍设置样式的文章:
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:
首先说一些前台吧,mvc上传注意必须加 new { enctype = "multipart/form-data" }
@using (@Html.BeginForm("StockInExcel", "StockInList", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="block-detail">
<table>
<tr>
<td class="pop-name">
选择文件:
</td>
<td class="pop-value">
<input type="text" name="ExcelName" id="ExcelName" readonly="readonly" onclick="file.click();" />
<input type="file" id="file" name="file" onchange="javascript: document.getElementById('ExcelName').value = document.getElementById('file').value;" style="display:none" />
<input type="button" id="Choose" name="Choose" value="选择" onclick="file.click();" />
</td>
</tr>
</table>
</div>
<input type="submit" id="submit" name="submit" value="开始导入" />
}
后台实现:得出DataTable:
[HttpPost]
public void StockInExcel()
{
string filePath = "";
//存入文件
if (Request.Files["file"].ContentLength > )
{
filePath = Server.MapPath("~/Upload/") + System.IO.Path.GetFileName(Request.Files["file"].FileName);
Request.Files["file"].SaveAs(filePath);
} try
{
IWorkbook hssfworkbook;
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new XSSFWorkbook(file);
} NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(); DataTable table = new DataTable();
IRow headerRow = sheet.GetRow();//第一行为标题行
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 + ); 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);
}
}
catch (Exception e)
{
throw e;
} } /// <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();
}
}
}
独立除一个方法 ExcelToDatatable
public DataTable ExcelToDatatable(string filePath)
{
try
{
IWorkbook workbook = null;
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
if (Path.GetExtension(filePath) == ".xls")
workbook = new HSSFWorkbook(file);
else if (Path.GetExtension(filePath) == ".xlsx")
workbook = new XSSFWorkbook(file);
} NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt(); DataTable table = new DataTable();
IRow headerRow = sheet.GetRow();//第一行为标题行
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 + ); 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;
}
catch (Exception e)
{
throw e;
return null;
}
}
得到DataTable后,就想怎么操作就怎么操作了。
.net mvc利用NPOI导入导出excel的更多相关文章
- ASP.Net MVC利用NPOI导入导出Excel
因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// <s ...
- net mvc 利用NPOI导入导出excel
1.导出Excel : 首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...
- .net利用NPOI导入导出Excel
NPOI在.net中的操作Excel 1.读取 using (FileStream stream = new FileStream(@"c:\客户资料.xls", FileMode ...
- NPOI导入导出Excel
.net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交 代码: 第一步. 在页面里面加入2个隐藏的iframe, 如下 ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- Java利用POI导入导出Excel中的数据
首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...
- .Net core NPOI导入导出Excel
最近在想.net core NPOI 导入导出Excel,一开始感觉挺简单的,后来真的遇到很多坑.所以还是写一篇博客让其他人少走一些弯路,也方便忘记了再重温一遍.好了,多的不说,直接开始吧. 在.Ne ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
- NPOI 导入导出excel 支持 03 07
因为微软的office成本太高了,所以开发项目的时候电脑上没安装office,而是安装了wps.但开发语言用的是C#,所以直接调用微软的office组件是很方便的,但一方面慢,一方面成本高,所以从网上 ...
随机推荐
- Shopex4.85商派2014年商业模板和商业插件共600多套仅售600元送分销王2代SEO排名神具。
这批shopex商业插 件+模板都是本人从官方模板网站收购.高价.交换.以及收藏得来.本人因现实工作太忙不得不转手出售这批源代码,限时低价出售给和我一样从事shopex 系统网店电子商务的兄弟姐妹们, ...
- Spring Mvc + Mybatis + sqlserver maven
mybatis config datasource: <!-- 配置数据源 使用的是Druid数据源 --> <bean name="dataSource" c ...
- 移植mbed到目标板
上一篇我们导出了mbed基本环境到mdk,根据实际目标还需要做些修改.手头的硬件是ebox平台,芯片STM32F103C8T6,调试器jlink,默认使用UART1. 导出时所选择的NUCLEO-F1 ...
- 物理引擎-Physx的源代码去哪里找
前几天无意中看到了Physx开源了,就连自己的领导也高兴了一下,让本道士去下载源代码琢磨一下,顺便做几个例子跑起来.结果没成想这个nvidia的github上的源代码被移除了,而且csdn,pudn上 ...
- 非root用户 gcc安装
亲测 可以安装 过程并不复杂 但可能需要一些时间 认真一点 按照步骤 一定可以成功哒 其他版本可以将ftp.gnu.org/gnu/gcc/敲入浏览器,找到自己需要的文件:[安装过4.9.0:成功:用 ...
- 004_Intelij 使用,Anonymous Apex
插件安装好之后,就可以正常添加cloud 项目: 注意:免费使用是30天,为了不去买license,在过期后,去修改下机器的日期,这个日期是在安装后的一个月内,改好日期后,启动Intelij 少一个截 ...
- C#:复杂条件判断类型(练习)
/// <summary> /// 文件类型 /// </summary> public enum FileType { Courseware, //"课件" ...
- Dom编程
Dom编程 Dom是一种用于HTML和XML文档的编程接口,是HTML页面的模型,将每个标签都做为一个对象,JavaScript通过调用DOM中的属性.方法就可以对网页中的文本框.层等元素进行编程控制 ...
- Vmware10如何打开vmware11建立的虚拟机
先说一下办法: 使用文本工具打开VMware 虚拟机配置文件(*.vmx文件),找到"virtualHW.version"一行,将值11修改为10保存即可. 修改之前: 硬件兼容性 ...
- 用hexdump获取event的输出信息
当我们在调试输入设备时,如:键盘,触摸屏 会使用到hexdump工具.其内容如下: 1. 键盘: # cat /dev/input/event0 | hexdump 0000000 f6a6 4e15 ...