最近主要做导入excel

在网上查询了代码

   public FileResult DownLoadExcelJiZuChaXunGenRenXiaoFeiJiLu()
{
DataTable dt = (DataTable)Session["datatable"];//获取需要导出的datatable数据
//创建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.RowStyle.FillBackgroundColor = "";
for (int i = ; i < dt.Columns.Count; i++)
{
row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
}
//将数据逐步写入sheet1各个行
for (int i = ; i < dt.Rows.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
for (int j = ; j < dt.Columns.Count; j++)
{
rowtemp.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString().Trim());
}
}
string strdate = DateTime.Now.ToString("yyyyMMddhhmmss");//获取当前时间
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(, SeekOrigin.Begin);
return File(ms, "application/vnd.ms-excel", strdate + "Excel.xls");
}

首先导出用到的npoi插件

返回一个fileresult

首先第一步是获取需要导出的datatable数据

然后创建excel文件对象

再添加一个sheet

给sheet添加第一行的头部标题

然后再将数据逐步写入sheet1各个行,最后写入客户端

============================================

现在就是我需要的功能导入

在视图页中有一个<input type="file" name="file1" id="file">

这个就是选择要导入的excel文件

然后还有一个<button type="submit"> 此按钮就是确认导入的提交操作

控制器中写的代码:

首先获取到视图传过来的文件  HttpPostFileBase file =request.Files["file1"];

httppostfilebase 表示对客户端已上载的文件的单独访问

stream streamfile=file.inputstream; 获取一个stream对象,该对象指向一个上载文件,准备读取该文件的内容。

导入文件也同样用的npoi插件。

下载npoi插件,里面有五个dll,都要引用,因为包含了 上传".xls" 和上传 ".xlsx"

其中HSSFWorkbook 用于xls文件导入类。

XSSFWorkbook用于xlsx文件导入类。

我自己在导入的时候进行判断了一下,当为不同类型文件时执行不同的代码,大致代码一样,只是处理类不一样。

  /// <summary>
/// Excel导入
/// </summary>
/// <returns></returns>
public DataTable ImportExcelFile(string filePath)
{
//初始化信息
#region
HttpPostedFileBase file = Request.Files["file1"];
Stream streamfile = file.InputStream;
DataTable dt = new DataTable();
var houzhuiname = Path.GetExtension(file.FileName);
try
{
if (houzhuiname == ".xls")
{
HSSFWorkbook hssfworkbook = new HSSFWorkbook(streamfile);
dt = ImExport(dt, hssfworkbook);
}
else
{
XSSFWorkbook hssfworkbook = new XSSFWorkbook(streamfile);
dt = ImExport(dt, hssfworkbook);
}
}
catch
{
}
#endregion
TjPackageRequest request = new TjPackageRequest
{
CreatTime = DateTime.Now,
};
this.HosService.ImportDB(dt, request);
return dt;
}

其中的ImExport()是进行不同文件导入方法。

 #region 两种不同版本的操作excel
/// <summary>
/// Excel2007的版本,扩展名是.xlsx
/// </summary>
/// <param name="dt"></param>
/// <param name="hssfworkbook"></param>
/// <returns></returns>
private static DataTable ImExport(DataTable dt, XSSFWorkbook hssfworkbook)
{
NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
{
//dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());]
dt.Columns.Add(sheet.GetRow().Cells[j].ToString());
}
while (rows.MoveNext())
{
XSSFRow row = (XSSFRow)rows.Current;
DataRow dr = dt.NewRow();
for (int i = ; 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);
}
dt.Rows.RemoveAt();
return dt;
}
/// <summary>
/// Excel2003以前(包括2003)的版本
/// </summary>
/// <param name="dt"></param>
/// <param name="hssfworkbook"></param>
/// <returns></returns>
private static DataTable ImExport(DataTable dt, HSSFWorkbook hssfworkbook)
{
NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt();
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
for (int j = ; j < (sheet.GetRow().LastCellNum); j++)
{
dt.Columns.Add(sheet.GetRow().Cells[j].ToString());
//dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
}
while (rows.MoveNext())
{
HSSFRow row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();
for (int i = ; 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);
}
dt.Rows.RemoveAt();
return dt;
} #endregion

上面代码有点重复了,只是处理类不一样。写了两遍

ImportDB()这个方法就是进行操作数据库的操作了。前面几步就已经将excel文件的内容都存放在 了 datatable里了,后面就是在数据库里添加datatable里的数据。

在导入操作中,最后有一句dt.Rows.RemoveAt(0);这句话就是将excel文件中的首行标题删除,只留下数据。

在dal中就是循环dt里的数据进行添加了。

mvc 导入,导出excel的更多相关文章

  1. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  2. Mvc导入导出Excel

    @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2&g ...

  3. .NET导入导出Excel

    若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...

  4. NPOI导入导出Excel

    .net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交  代码:  第一步. 在页面里面加入2个隐藏的iframe, 如下 ...

  5. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  6. asp.net core web的导入导出excel功能

    这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...

  7. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  8. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  9. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

随机推荐

  1. 第四周作业-yjw

    运动策略分析 首先我们可以得到我方击球手质心的位置,球的质心的位置,对方球门中心位置.同时以桌面边缘为坐标轴,建立笛卡尔坐标系.可以明确的一点是,击球手的运动为曲线,球进框的运动为直线,或者折线. 击 ...

  2. cordova 下载更新

    function UpdateForAndroid(downloadUrl) { $ionicLoading.show({ template: "已经下载:0%" }); var ...

  3. LR录制Flex+Web,登录功能之登录密码出错的处理

    在LR中录制好更改密码脚本,Controller中使用少量用户进行:单用户多迭代.多用户单迭代.多用户多迭代,运行正常,于是使用490Vuser+2iteration修改980个用户的密码,部分 Vu ...

  4. mybatis if test 不为空字符串或null

    <if test="type !=null and type !=''"> AND l.type=#{type,jdbcType=INTEGER} </if> ...

  5. spring加载hibernate映射文件的几种方式。转自:http://blog.csdn.net/huiwenjie168/article/details/7013618

    在Spring的applicationContext.xml中配置映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少时,可以用sessionF ...

  6. 原生js通过prottype写的一个简单拖拽

    <!DOCTYPE html> <head> <meta charset="utf-8"/> <title></title&g ...

  7. Python笔记总结week4

      1. Built-in functions 函数可能遇到的问题:下面例子函数改变了函数需要传入的参数 li = [11,22,33,44] def f1(arg): arg.append(55) ...

  8. Objective-C( Foundation框架 一 NSNumber(NSValue))

    NSNumber: 是OC中处理数字的一个类 NSValue是NSNumber的子类 如何处理: 把int,float,double  包装成一个对象 使用NSNumber的好处: 可以把基本数据类型 ...

  9. 动态获取R.drawable.xx资源

    String imageName = "index_fragmen"+getColor();final int resId = context.getResources().get ...

  10. ASP.NET MVC 多语言实现——URL路由

    考虑实现一个完整的基于asp.net mvc的多语言解决方案,从路由到model再到view最后到数据库设计(先挖好坑,后面看能填多少). 我所见过的多语言做得最好的网站莫过于微软的msdn了,就先从 ...