三层+MVC导出Excel(2)
背景:
出门在外,一切以健康为主,学习为辅,健康搞好了,学习也不能拉下,在外工作期间,我们在做数据导出的时候,自己封了一个类,利用NPOI进行数据导出Excel,自我感觉良好,特给大家分享一下,希望对大家的工作能有所帮助。
开发环境:
VS2012 + Sql Service + Oracle + Starteam(TFS)
框架介绍:
三层 + MVC4
业务介绍:
保密,会用到数据处理导出。我们需要做数据模板,也就是一张固定格式的excel,从这张excel上面把一些固定的东西(一些解释、映射算法)复制到另一张目标excel上面,进行数据导出
应用介绍:
1、引用NPOI
<span style="font-size:18px;">using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;</span>2、数据导出公共类代码分享:
<span style="font-size:18px;">/// <summary>
/// 读取模板写入数据到sheet2并覆盖源文件(带sheet3的模板)
/// </summary>
/// <param name="cell_Title">数据集头部描述</param>
/// <param name="dt_model">数据集</param>
/// <param name="sheetName">Excel文件名称</param>
/// <param name="rows">行数</param>
/// <param name="isColumnWriten">已成功写入?</param>
/// <returns></returns>
publicintDataTableToExcel(string[] cellTitle,DataTabledt_model,string sheetName,int rows,bool isColumnWriten)
{
int count = 0;
HSSFSheet sheet1 = null; //初始化Excel sheet1工作簿
HSSFSheet sheet2 = null; //初始化Excel sheet2工作簿
HSSFWorkbook wk = null;
using (fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) //给新 //建excel文件赋名称,赋读写权限
{
wk = new HSSFWorkbook(fs);
fs.Close();
try
{
if (wk != null)
{
sheet1 = (HSSFSheet)wk.GetSheetAt(0);
sheet2 = (HSSFSheet)wk.GetSheet(sheetName);
}
else
return -1;
if (isColumnWriten == true)
{
IRow row = sheet2.CreateRow(rows);
for (int i = 0; i < cell_Title.Length; i++)
{
row.CreateCell(i).SetCellValue(cell_Title[i]);
}
count = 1;
}
else
{
count = 0;
}
for (int i = 0; i < dt_model.Rows.Count; i++)
{
IRow row = sheet2.CreateRow(count + rows);
for (int j = 0; j < dt_model.Columns.Count; j++)
{
bool result_dou = Regex.IsMatch(dt_model.Rows[i][j].ToString(), @"^[+-]?\d*[.]?\d*$");
bool result_int = Regex.IsMatch(dt_model.Rows[i][j].ToString(), @"^[+-]?\d*$");
if (result_dou && dt_model.Rows[i][j] != DBNull.Value && dt_model.Rows[i][j] != "")
row.CreateCell(j).SetCellValue(Convert.ToDouble(dt_model.Rows[i][j]));
else if(result_int && dt_model.Rows[i][j] != DBNull.Value && dt_model.Rows[i][j] != "") row.CreateCell(j).SetCellValue(Convert.ToInt32(dt_model.Rows[i][j]));
else
row.CreateCell(j).SetCellValue(dt_model.Rows[i][j].ToString());
}
count++;
}
sheet1.ForceFormulaRecalculation = true;
using (FileStream fsm = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
wk.Write(fsm);
fsm.Close();
}
return count;
}catch (Exception)
{
return -1;
}
}
}</span>3、Controller调用工具类进行数据导出
<span style="font-size:18px;"> bool result = true;
try
{
for (int i = 0; i < StrFieldName.Length; i++)
{
if (PrintReportsBC.ReportResult(StrFieldName[i]) > 0)
{
DataSet ds = SelectBC.Select(StrFieldName[i].ToString(), starTime, endTime);
DataTable dt = ds.Tables[0];
HSSExcelHelper hss = new HSSExcelHelper(destFileName);
hss.DataTableToExcel(null, dt, sheetName, area[i], isCreateTitle);
}
}
return result;
}
catch (Exception e)
{
return false;
}</span>4、成功导出
三层+MVC导出Excel(2)的更多相关文章
- mvc导出excel 之 新
前段时间做的mvc导出excel 老大说要进行优化,我原来导出是用npoi插件进行导出,格式是将数据放入到datatable中,然后进行导出. 说要优化的时候就想着将datatable数据导出格式改为 ...
- ASP.NET MVC导出excel
ASP.NET MVC导出excel 要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式 ...
- Mvc 导出 Excel
Mvc 导出 Excel 之前接触过Webform,winfrom 的导出Excel方法 ,优点:省事.缺点:服务器必须安装Office 这几天做项目 和 大牛学习了一下 新的方法,自己加以总结.希望 ...
- MVC 导出Excel 的其中一方法(View导出excel)
场景:mvc下导出excel 思路:使用View导出excel 步骤: 1.导出标签添加事件 $("#export_A").click(function(){ //省略代码.... ...
- ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- MVC导出Excel,提供下载Excel
类1: using System.Collections.Generic;using System.Data;using System.Web.Mvc;using System.IO;using Sy ...
- MVC学习笔记---MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- spring mvc 导出 excel
// js 触发导出 excel 方法 导出当前页的数据 含有条件查询的结果 // js 框架使用的 是 easyui function doExport(){ var optins = $(&quo ...
- mvc导出EXCEL
/// <summary> /// 导出EXCEL /// </summary> /// <returns></returns> public Acti ...
随机推荐
- Unity3d 枚举某个目录下所有资源
using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; us ...
- Java中时间日期格式化
1.与日期时间相关的类: 第一:java.util.Date; 将时间作为一个整体使用.处理时,使用Date类较为简便 第二:j ...
- json格式
$.post('text.action',{....},function(datas){ var name=datas.data[0].name; }); 如果是多个还可以用循环获取.$.post(' ...
- Effective C++ -----条款52:写了placement new 也要写 placement delete
当你写一个placement operator new ,请确定也写出了对应的placement operator delete.如果没有这样做,你的程序可能会发生隐微而时断时续的内存泄漏. 当你声明 ...
- Effective C++ -----条款30:透彻了解inlining的里里外外
将大多数inlining限制在小型.被频繁调用的函数身上.这可使日后的调试过程和二进制升级(binary upgradability)更容易,也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化 ...
- MyBatis之CRUD
1 mybatis框架介绍 1.1回顾jdbc操作数据库的过程 1.2 mybatis开发步骤 A.提供一个SqlMapperConfig.xml(src目录下),该文件主要配置数据库连接,事务,二级 ...
- 129. Sum Root to Leaf Numbers
题目: Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a nu ...
- CString 操作
CString Left( int nCount ) const; //从左边1开始获取前 nCount 个字符 CString Mid( int nFirst ) ...
- 带你熟悉CSS浮动
一.概念理解 浮动:顾名思义先浮后动,浮动的对象会先漂浮起来,离开自己原来的位置(也就是所谓的脱离文档流),后动的意思是,它的后面的元素会向它原来的位置动起来. 二.注意事项 1.当元素有浮动属性时, ...
- balabalabala
[微分享]:种子不落在肥土而落在瓦砾中,有生命力的种子决不会悲观和叹气,因为有了阻力才有磨炼.