最近主要做导入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. comparator接口与compare方法的实现

    刷leetcodecode时看到一道题需要利用自定义的比较器进行排序,最开始一头雾水,看了API终于懂了~ Arrays.sort(T[] a,Comparator<? super T>  ...

  2. Java中Sting类型对象内容不可改变

    String拥有一个特殊点叫:String对象的内容不可改变!   在调用诸如String对象的replace()等方法时,不是在原Sting对象的基础上改变对象内容,而是创建了一个新的String对 ...

  3. Python学习笔记之Beautiful Soup

    如何在Python3.x中使用Beautiful Soup 1.BeautifulSoup中文文档:http://www.crummy.com/software/BeautifulSoup/bs3/d ...

  4. UnsupportedClassVersionError 错误解决办法

    偶然遇到关于版本问题的错误,为了以后查找方便记录下来.有更好的办法欢迎大家更正. 错误内容: Exception in thread "main" java.lang.Unsupp ...

  5. 即时聊天IM之四 Android客户端IM帮助类编写

    图文无关一起娱乐: 这一篇我们开始写Android端的Smack版主类,后面Android的IM功能都是通过这个帮助类实现的 引用类库: 因为我用的是IDE是Android Studio,所以我通过g ...

  6. C#线程通信与异步委托

    线程的通知机制 AutoResetEvent是线程实现通知操作的重要方法.通常,AutoResetEvent用于通知正在等待线程已发生事件,允许线程通过发信号互相通信. AutoResetEvent时 ...

  7. sass1:

    less在处理CSS动画时,非常恶心,决定转向sass了.sass诞生得比less早,只是因为它是ruby写的,因此受众面够少.但我们不需要自己下编译器或使用命令行,我们可以koala这神器 首先几个 ...

  8. 巩固基础知识,从C# in depth开始

    真是书到用时方恨少,平时都是完成任务,书都是看个前面几章就扔书柜了.... 今天看了博客园一篇文章<我们为什么应该坚持写博客>,很有感触,觉得人生不能得过且过,以前为了各种原因,家庭,孩子 ...

  9. python 函数传递参数的多种方法

    python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值. Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递 ...

  10. 矩阵k次幂 采用三重循环

    #include<iostream> using namespace std; int main() { int n,k; ][],b[][],c[][]; while(cin>&g ...