最近主要做导入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. ThinkPHP3.2.3使用cli命令行模式

    使用tp3.2.3的cli模式时,报错.加上绝对路径还是报错.所以采用普通模式 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require ...

  2. ngui的tween的tweenFactor属性

    ngui的tween的tweenFactor属性 这个属性是用来记录动画运行的位置的.可以通过设置它来达到动画运行到一半从新设置从新开始

  3. reqwest请求api和约束(转载)

    转自:https://www.oschina.net/p/reqwest reqwest 用于浏览器异步HTTP请求.支持xmlHttpRequest, JSONP, CORS, 和 CommonJS ...

  4. JavaSript模块化-AMD规范与CMD规范

    JavaScript模块化 在了解AMD,CMD规范前,先来简单地了解下什么是模块化,模块化开发. 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处 ...

  5. 从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form 值

    .NetFrameWork 4.0 Validaterequest="false"不起作用 要恢复到2.0的ASP.NET请求验证功能的行为,要在以下设置 Web.config中 ...

  6. WordPress登陆页和后台面空白解决方法

    真没想到我居然也会碰到这么蛋疼的事情,有一天我登陆博客,输入账号密码之后登陆没有反应,之后我就试着用首页前台登陆(因为这个模板前台带登陆功能),之后成功登陆进入后台更新文章.我想算了.这小毛病就丢那吧 ...

  7. C++ 多态、虚函数机制以及虚函数表

    1.非virtual函数,调用规则取决于对象的显式类型.例如 A* a  = new B(); a->display(); 调用的就是A类中定义的display().和对象本体是B无关系. 2. ...

  8. qt 设置

    右击不同类型的文件,点属性,可以选择处理文件的工具,比如自动生成uic qrc右击工程属性,然后可以转换成QT工程翻译文件如果只读的话,可以右击换一个编辑器打开 如果翻译文件只读的话,必须直接使用字符 ...

  9. PHP发送电子邮件

    1.导入文件,如本案例把Stmp.class.php放到Common\Common目录下,代码很多,直接复制就行! <?php namespace Common\Common; class Sm ...

  10. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试 [T]

    SQL Server 2008中SQL应用系列--目录索引 前些天看到一篇文章<SQL Server 2012 - Server side paging demo using OFFSET/FE ...