背景:

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

    centos 7 python2.7.5升级到3.5.2 下载python3.5.2 wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2 ...

  2. C++ 中超类化和子类化常用API

    在windows平台上,使用C++实现子类化和超类化常用的API并不多,由于这些API函数的详解和使用方法,网上一大把.本文仅作为笔记,简单的记录一下. 子类化:SetWindowLong,GetWi ...

  3. Qt 文件处理

    1.删除目录下所有的文件 void deleteAllFiles(const QString& fileDir) { QDir dir(fileDir); if(!dir.exists()) ...

  4. Qt不同类之间信号槽连接

    1.类必须继承QObject. #ifndef TESTA_H #define TESTA_H #include <QObject> class TestA : public QObjec ...

  5. C++ 使用SQLite

    1.SQLite是一个完全独立的.不需要服务器.不要任何配置.支持SQL的.开源的文件数据库引擎.源代码和支持可以登录:http://www.sqlite.org/   1.1.下载sqlite3.d ...

  6. DataTemplate应用

    在WPF中,决定数据外观的是DataTemplate,即DataTemplate是数据内容的表现形式,一条数据显示成什么样子,是简单的文本还是直观的图形,就是由DataTemplate决定的.下面通过 ...

  7. 16~25.spring+hibernate简单实例 .连接数据库并进行增删改查

    1.概念 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQ ...

  8. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  9. spring mvc配置完后实现下载功能

    实现是前台: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

  10. 【leetcode】Swap Nodes in Pairs (middle)

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...