背景:

出门在外,一切以健康为主,学习为辅,健康搞好了,学习也不能拉下,在外工作期间,我们在做数据导出的时候,自己封了一个类,利用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. Java集合中List的用法

    List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列. List可以精确的控制每个元素的插入位置 ...

  2. linux琐碎知识点

    1.awk的使用方式,pattern支持正则表达式 awk 'pattern{action}' {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找 ...

  3. buffer正确的拼接方式

    var chunks = []; var size = 0; res.on('data',function(chunk){ chunks.push(chunk); size+= chunk.lengt ...

  4. nyoj130 相同的雪花

    相同的雪花 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 You may have heard that no two snowflakes are alike. ...

  5. Divide and conquer:K Best(POJ 3111)

     挑选最美的珠宝 题目大意:挑选k个珠宝使得∑a/∑b最大,输出组合数 最大化平均值的标准题型,二分法就好了,一定要注意范围(10e-7),如果是10e-8就会tle,10e-6就是wa #inclu ...

  6. jQuery取复选框值、下拉列表里面的属性值、取单选按钮的属性值、全选按钮、JSON存储、*去空格

    1.jquery取复选框的值<!--引入jquery包--> <script src="../jquery-1.11.2.min.js"></scri ...

  7. Cannot change version of project facet Dynamic Web Module to 3.0

    背景描述: 最近在开发项目时,老是报错说:Project is not Dynamic Web Module 3.0.右击项目选择属性进行修改时出现以下错误: 这让我很是恼火,后来终于找到了万能的解决 ...

  8. Vi文档

    Vi简介 Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序. Vi不是排版程序,只是一个纯粹的文本编辑程序. Vi是全屏幕文本编辑器,它没有菜单,只有命令. Vi不是基于窗口的,所以, ...

  9. RedHat下安装MySQL

    下载mysql 解压tar -xvf mysql-5.7.16-1.el6.x86_64.rpm-bundle.tar 安装MySQL-server包 rpm -ivh mysql-community ...

  10. spring集成activeMQ

    1.安装activehttp://activemq.apache.org/activemq-5140-release.html2.运行D:\apache-activemq-5.14.0\bin\win ...