背景:

出门在外,一切以健康为主,学习为辅,健康搞好了,学习也不能拉下,在外工作期间,我们在做数据导出的时候,自己封了一个类,利用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)的更多相关文章

  1. mvc导出excel 之 新

    前段时间做的mvc导出excel 老大说要进行优化,我原来导出是用npoi插件进行导出,格式是将数据放入到datatable中,然后进行导出. 说要优化的时候就想着将datatable数据导出格式改为 ...

  2. ASP.NET MVC导出excel

    ASP.NET MVC导出excel 要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式 ...

  3. Mvc 导出 Excel

    Mvc 导出 Excel 之前接触过Webform,winfrom 的导出Excel方法 ,优点:省事.缺点:服务器必须安装Office 这几天做项目 和 大牛学习了一下 新的方法,自己加以总结.希望 ...

  4. MVC 导出Excel 的其中一方法(View导出excel)

    场景:mvc下导出excel 思路:使用View导出excel 步骤: 1.导出标签添加事件 $("#export_A").click(function(){ //省略代码.... ...

  5. ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  6. MVC导出Excel,提供下载Excel

    类1: using System.Collections.Generic;using System.Data;using System.Web.Mvc;using System.IO;using Sy ...

  7. MVC学习笔记---MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  8. spring mvc 导出 excel

    // js 触发导出 excel 方法 导出当前页的数据 含有条件查询的结果 // js 框架使用的 是 easyui function doExport(){ var optins = $(&quo ...

  9. mvc导出EXCEL

    /// <summary> /// 导出EXCEL /// </summary> /// <returns></returns> public Acti ...

随机推荐

  1. linux shell脚本通过参数名传递参数值

    平常在写shell脚本都是用$1,$2....这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护.Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚 ...

  2. android一句话搞定图片加载

    http://square.github.io/picasso/ Picasso.with(context).load("http://i.imgur.com/DvpvklR.png&quo ...

  3. Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)

    Tomcat启动时报如下错误:     java.lang.OutOfMemoryError: PermGen space 解决办法:     配置相关内存大小.其中按照启动tomcat的不同方式,分 ...

  4. java web 学习 --第十天(Java三级考试)

    第九天学习内容:http://www.cnblogs.com/tobecrazy/p/3470195.html 需求概述 创建程序模块,读取并显示数据库中的书籍信息.当前有如下需求:需要显示数据库中所 ...

  5. ffmpeg-20160803-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  6. [转]AndroidStudio导出jar包

    原文链接:http://blog.csdn.net/hjq842382134/article/details/38538097# 1. 不像在Eclipse,可以直接导出jar包.AndroidStu ...

  7. ios调用c#后台接口报文格式

    - NSString *soapMessage = - [NSString stringWithFormat: - @"<?xml version=\"1.0\" ...

  8. 【python】dict的注意事项

    1. key不能用list和set 由于列表是易变的,故不可做key.如果使用会报错 但是元组可以做key 2.遍历方法 for key in somedict: pass 速度快,但是如果要删除元素 ...

  9. 51nod 1116 K进制下的大数 (暴力枚举)

    题目链接 题意:中文题. 题解:暴力枚举. #include <iostream> #include <cstring> using namespace std; ; ; ch ...

  10. QRTZ_表注释

    QRTZ_CALENDARS 存储Quartz的Calendar信息QRTZ_CRON_TRIGGERS 存储CronTrigger,包括Cron表达式和时区信息QRTZ_FIRED_TRIGGERS ...