MVC execl 导入导出
MVC execl 导入导出
<input id="xls" name="xls" type="file" style="width:210px;" />
<input type="submit" value="导入" />
<a href="~/Demo/Excel_ExcelExport">导出</a> #region Excel public ActionResult Excel_Index()
{
return View();
} [HttpPost]
public ActionResult Excel_Index(FormCollection formdata)
{
ViewBag.Data = null;
ViewBag.Msg = string.Empty; if (this.HttpContext.Request.Files.Count <= || this.HttpContext.Request.Files[].ContentLength <= )
{
ViewBag.Msg = "请选择文件!";
return View();
} string fileExt = System.IO.Path.GetExtension(this.HttpContext.Request.Files[].FileName).ToLower();
if (fileExt != ".xls" && fileExt != ".xlsx")
{
ViewBag.Msg = "选择的文件格式不对!";
return View();
} ViewBag.Data = Demo.ImportFromStream(this.HttpContext.Request.Files[].InputStream); return View();
} public ActionResult Excel_ExcelExport()
{
DataTable dt = new DataTable();
DataColumn dc1 = new DataColumn("column1", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn("column2", Type.GetType("System.String"));
DataColumn dc3 = new DataColumn("column3", Type.GetType("System.String"));
DataColumn dc4 = new DataColumn("column4", Type.GetType("System.String"));
DataColumn dc5 = new DataColumn("column5", Type.GetType("System.String"));
dt.Columns.Add(dc1);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
dt.Columns.Add(dc4);
dt.Columns.Add(dc5); for (int i = ; i < ; i++)
{
DataRow dr = dt.NewRow();
dr["column1"] = "test1";
dr["column2"] = "test2";
dr["column3"] = "test3";
dr["column4"] = "test4";
dr["column5"] = "test5";
dt.Rows.Add(dr);
} byte[] bytes = Demo.ExportToBytes(dt); return File(bytes, "application/x-excel", "ExcelExport.xls");
} #endregion
NPOI插件
using NPOI.SS.UserModel; /// <summary>
/// Excel导入导出工具类
/// </summary>
public static class Demo {
/// <summary>
/// 导入Excel
/// </summary>
public static System.Data.DataTable ImportFromStream(System.IO.Stream fileStream)
{
NPOI.SS.UserModel.IWorkbook workbook;
NPOI.SS.UserModel.ISheet sheet;
System.Data.DataTable data = new System.Data.DataTable(); try
{
try
{
workbook = new NPOI.XSSF.UserModel.XSSFWorkbook(fileStream); //
}
catch
{
workbook = new NPOI.HSSF.UserModel.HSSFWorkbook(fileStream); //
} //第一个sheet工作表
sheet = workbook.GetSheetAt(); if (sheet != null)
{
//第一行
IRow firstRow = sheet.GetRow();
int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数 for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
System.Data.DataColumn column = new System.Data.DataColumn(firstRow.GetCell(i).StringCellValue);
data.Columns.Add(column);
} //最后一列的标号
int rowCount = sheet.LastRowNum;
for (int i = sheet.FirstRowNum; i <= rowCount; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue; //没有数据的行默认是null System.Data.DataRow dataRow = data.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
//if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
// dataRow[j] = row.GetCell(j).ToString();
if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
{
switch (row.GetCell(j).CellType)
{
case CellType.String: //文本
dataRow[j] = row.GetCell(j).StringCellValue;
break;
case CellType.Numeric: //数值
if (DateUtil.IsCellDateFormatted(row.GetCell(j)))
{
dataRow[j] = DateTime.FromOADate(row.GetCell(j).NumericCellValue);
}
else
{
dataRow[j] = Convert.ToDouble(row.GetCell(j).NumericCellValue);
}
break;
case CellType.Boolean: //bool
dataRow[j] = row.GetCell(j).BooleanCellValue;
break;
case CellType.Blank: //空白
dataRow[j] = "";
break;
default: dataRow[j] = "ERROR";
break;
}
}
}
data.Rows.Add(dataRow);
}
} return data;
}
catch (Exception)
{
return null;
}
} /// <summary>
/// 导入Excel
/// </summary>
public static System.Data.DataTable ImportFromBytes(byte[] fileBytes)
{
System.Data.DataTable table = null; if (fileBytes == null || fileBytes.Length <= )
{
return table;
} using (var fileStream = new System.IO.MemoryStream(fileBytes))
{
table = ImportFromStream(fileStream);
} return table;
} /// <summary>
/// 导入Excel
/// </summary>
public static System.Data.DataTable ImportFromFilename(string fileName)
{
System.Data.DataTable table = null; if (!System.IO.File.Exists(fileName))
{
return table;
} using (var fileStream = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
table = ImportFromStream(fileStream);
} return table;
} /// <summary>
/// 导出Excel
/// </summary>
public static System.IO.Stream ExportToStream(System.Data.DataTable table)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(); NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet();
NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(); IRow headRow = sheet.CreateRow();
foreach (System.Data.DataColumn column in table.Columns)
{
headRow.CreateCell(column.Ordinal).SetCellValue(string.IsNullOrWhiteSpace(column.Caption) ? column.ColumnName : column.Caption);
} int rowIndex = ; foreach (System.Data.DataRow row in table.Rows)
{
IRow dataRow = sheet.CreateRow(rowIndex); foreach (System.Data.DataColumn column in table.Columns)
{
dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
} rowIndex++;
}
workbook.Write(ms);
ms.Seek(, System.IO.SeekOrigin.Begin); sheet = null;
headerRow = null;
workbook = null; return ms;
} /// <summary>
/// 导出Excel
/// </summary>
public static byte[] ExportToBytes(System.Data.DataTable table)
{
byte[] bytes = null; using (var stream = ExportToStream(table))
{
bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
stream.Seek(, System.IO.SeekOrigin.Begin);
} return bytes;
}
}
Datatable导出Excel
//Datatable导出Excel
private static void GridToExcelByNPOI(DataTable dt, string strExcelFileName)
{
try
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1"); ICellStyle HeadercellStyle = workbook.CreateCellStyle();
HeadercellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
HeadercellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
//字体
NPOI.SS.UserModel.IFont headerfont = workbook.CreateFont();
headerfont.Boldweight = (short)FontBoldWeight.Bold;
HeadercellStyle.SetFont(headerfont); //用column name 作为列名
int icolIndex = ;
IRow headerRow = sheet.CreateRow();
foreach (DataColumn item in dt.Columns)
{
ICell cell = headerRow.CreateCell(icolIndex);
cell.SetCellValue(item.ColumnName);
cell.CellStyle = HeadercellStyle;
icolIndex++;
} ICellStyle cellStyle = workbook.CreateCellStyle(); //为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; NPOI.SS.UserModel.IFont cellfont = workbook.CreateFont();
cellfont.Boldweight = (short)FontBoldWeight.Normal;
cellStyle.SetFont(cellfont); //建立内容行
int iRowIndex = ;
int iCellIndex = ;
foreach (DataRow Rowitem in dt.Rows)
{
IRow DataRow = sheet.CreateRow(iRowIndex);
foreach (DataColumn Colitem in dt.Columns)
{ ICell cell = DataRow.CreateCell(iCellIndex);
cell.SetCellValue(Rowitem[Colitem].ToString());
cell.CellStyle = cellStyle;
iCellIndex++;
}
iCellIndex = ;
iRowIndex++;
} //自适应列宽度
for (int i = ; i < icolIndex; i++)
{
sheet.AutoSizeColumn(i);
} //写Excel
FileStream file = new FileStream(strExcelFileName, FileMode.OpenOrCreate);
workbook.Write(file);
file.Flush();
file.Close(); MessageBox.Show(m_Common_ResourceManager.GetString("Export_to_excel_successfully"), m_Common_ResourceManager.GetString("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
ILog log = LogManager.GetLogger("Exception Log");
log.Error(ex.Message + Environment.NewLine + ex.StackTrace);
//记录AuditTrail
CCFS.Framework.BLL.AuditTrailBLL.LogAuditTrail(ex); MessageBox.Show(m_Common_ResourceManager.GetString("Export_to_excel_failed"), m_Common_ResourceManager.GetString("Information"), MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally { workbook = null; } }
Datatable导出Excel
Excel文件导成Datatable
/// <summary>
/// Excel文件导成Datatable
/// </summary>
/// <param name="strFilePath">Excel文件目录地址</param>
/// <param name="strTableName">Datatable表名</param>
/// <param name="iSheetIndex">Excel sheet index</param>
/// <returns></returns>
public static DataTable XlSToDataTable(string strFilePath, string strTableName,int iSheetIndex)
{ string strExtName = Path.GetExtension(strFilePath); DataTable dt = new DataTable();
if (!string.IsNullOrEmpty(strTableName))
{
dt.TableName = strTableName;
} if (strExtName.Equals(".xls") || strExtName.Equals(".xlsx"))
{
using (FileStream file = new FileStream(strFilePath, FileMode.Open, FileAccess.Read))
{
HSSFWorkbook workbook = new HSSFWorkbook(file);
ISheet sheet = workbook.GetSheetAt(iSheetIndex); //列头
foreach (ICell item in sheet.GetRow(sheet.FirstRowNum).Cells)
{
dt.Columns.Add(item.ToString(),typeof(string));
} //写入内容
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
while(rows.MoveNext())
{
IRow row = (HSSFRow)rows.Current;
if (row.RowNum == sheet.FirstRowNum)
{
continue;
} DataRow dr = dt.NewRow();
foreach (ICell item in row.Cells)
{
switch (item.CellType)
{
case CellType.Boolean:
dr[item.ColumnIndex] = item.BooleanCellValue;
break;
case CellType.Error:
dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
break;
case CellType.Formula:
switch (item.CachedFormulaResultType)
{
case CellType.Boolean:
dr[item.ColumnIndex] = item.BooleanCellValue;
break;
case CellType.Error:
dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
break;
case CellType.Numeric:
if (DateUtil.IsCellDateFormatted(item))
{
dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
}
else
{
dr[item.ColumnIndex] = item.NumericCellValue;
}
break;
case CellType.String:
string str = item.StringCellValue;
if (!string.IsNullOrEmpty(str))
{
dr[item.ColumnIndex] = str.ToString();
}
else
{
dr[item.ColumnIndex] = null;
}
break;
case CellType.Unknown:
case CellType.Blank:
default:
dr[item.ColumnIndex] = string.Empty;
break;
}
break;
case CellType.Numeric:
if (DateUtil.IsCellDateFormatted(item))
{
dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
}
else
{
dr[item.ColumnIndex] = item.NumericCellValue;
}
break;
case CellType.String:
string strValue = item.StringCellValue;
if (string.IsNullOrEmpty(strValue))
{
dr[item.ColumnIndex] = strValue.ToString();
}
else
{
dr[item.ColumnIndex] = null;
}
break;
case CellType.Unknown:
case CellType.Blank:
default:
dr[item.ColumnIndex] = string.Empty;
break;
}
}
dt.Rows.Add(dr);
}
}
} return dt;
}
Excel文件导成Datatable
MVC execl 导入导出的更多相关文章
- .NET MVC+angular导入导出
cshtml: <form class="form-horizontal" id="form1" role="form" ng-sub ...
- 2020-06-30 pol实现execl导入导出
1.导入依赖 <!-- 解析表格 --> <dependency> <groupId>org.apache.poi</groupId> <arti ...
- 基于NPOI的Execl导入导出例子
源地址:http://bbs.csdn.net/topics/390830774
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出
本文示例代码下载: 链接:http://pan.baidu.com/s/1jHBdgCA 密码:hzh7 ps:Vs数据库脚本在解压目录下,修改web.config数据库链接,示例代码包含:导入,导出 ...
- 用MVC导入导出
导入导出对于刚做的人一脸懵逼,但是明白思路之后就感觉非常容易,我也是研究了好久,才总算做了出来,放在这里给大家分享一下 一.先看下导出 视图脚本 <script type ="text ...
- .NET导入导出Excel
若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...
- NPOI导入导出Excel
.net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交 代码: 第一步. 在页面里面加入2个隐藏的iframe, 如下 ...
- ssm框架之将数据库的数据导入导出为excel文件
在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...
随机推荐
- [python]glob模块中的glob()函数为什么返回空列表??
最近在学习语音的知识,看一个语音合成实现的相关工具包的源代码,碰到了glob()函数.然后开启了我与这个函数相爱想杀的一个下午. 摘自官网解释: https://docs.python.org/2/l ...
- js判断页面从何种浏览器打开
问题 有时项目需要根据不同的设备进行不同的处理,需要判断到底是哪种设备打开了项目. 移动端浏览器检测 移动终端浏览器版本信息: var browser = { versions: function ( ...
- Win10每次开机总是自动弹出MSN网址导航如何取消
Win10每次开机总是自动弹出MSN网址导航如何取消 近来有用户在升级Win10系统后,每次开机总是会自动弹出MSN中文网的网址导航.如果不想要开机打开MSN网址导航,那么应该怎么设置来取消呢?对此, ...
- c++运算符重载-如何决定作为成员函数还是非成员函数
The Decision between Member and Non-member The binary operators = (assignment), [] (array subscripti ...
- flink学习笔记-各种Time
说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...
- P1969 积木大赛
题意:给你一段序列,一次操作:[l,r]内所有数+1 初始序列全为0 现在给你最后序列,问最少操作几次能达到这样的序列 蒟蒻表示秒想到------差分啊 每次差分必有一个+1,一个-1 把差分数组求出 ...
- CF959C Mahmoud and Ehab and the wrong algorithm 构造
Mahmoud was trying to solve the vertex cover problem on trees. The problem statement is: Given an un ...
- Git 的简单测试
Git 简介 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开 ...
- Hello World 十大秘密
#include <stdio.h> int main(int argc, char* argv[], char* env[]) { printf("Hello World\n& ...