/// <summary>
/// 导出多种车辆统计表格
/// </summary>
/// <returns></returns>
[ActionName("MoreAllImport")]
public void MoreAllImport()
{
List<CarMoreStatistics> list = TempData["MoreAllExcel"] as List<CarMoreStatistics>;
if (list == null)
{
return;
}
DataTable dt = TRSLMS.Common.Reflection.GetDisplayNameToDataTable(list);
string path = Server.MapPath("~/downloads/excel/车辆整合统计表(样表).xls");
string exName = "各种车辆统计表";
GetSheel(dt, path, exName, 4);
}

/// <summary>
/// 导出Excel数据
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="path">模板路径</param>
/// <param name="exName">标题名称</param>
/// <param name="Line">第几行开始</param>
private static void GetSheel(DataTable dt, string path, string exName, int Line = 0)
{
using (FileStream fs = System.IO.File.OpenRead(path))
{
HSSFWorkbook wk = new HSSFWorkbook(fs);
fs.Close();
ISheet sheet = wk.GetSheetAt(0);
sheet.GetRow(0).GetCell(0).SetCellValue(Common.SessionManage.GROUP.NAME + exName);
IRow row = sheet.GetRow(1);
ICell cell = row.GetCell(0);
cell.SetCellType(CellType.String);
cell.SetCellValue("统计时间:" + DateTime.Now.ToString("yyyy年MM月dd日"));
NPOIHelp.FillHssfWorkbookByDataTable(dt, Line, 0, wk, 0);
NPOIHelp.ExportHSSFWorkbookByWeb(wk, exName + ".xls");
}
}
#endregion

/// <summary>
/// NPOI导出Excel
/// </summary>
public class NPOIHelp
{
/// <summary>
/// 根据数据源和偏移量填充工作表指定索引的工作薄
/// </summary>
/// <param name="dataSource">数据源</param>
/// <param name="rowOffset">行偏移量</param>
/// <param name="colOffset">列偏移量</param>
/// <param name="hssfworkbook">工作表</param>
/// <param name="sheetIndex">工作薄索引</param>
public static void FillHssfWorkbookByDataTable(DataTable dataSource, int rowOffset, int colOffset, HSSFWorkbook hssfworkbook, int sheetIndex)
{
ISheet sheet = hssfworkbook.GetSheetAt(sheetIndex);

ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
//设置单元格上下左右边框线
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;

for (int i = 0; i < dataSource.Rows.Count; i++)
{
for (int j = 0; j < dataSource.Columns.Count; j++)
{
IRow row = sheet.GetRow(i + rowOffset);

if (row == null)
row = sheet.CreateRow(i + rowOffset);
ICell newCell = row.GetCell(j + colOffset);

if (newCell == null)
{
newCell = row.CreateCell(j + colOffset);
newCell.CellStyle = cellStyle;
}
string drValue = dataSource.Rows[i][j].ToString();
string drType = dataSource.Columns[j].DataType.ToString();
switch (drType)
{
case "System.String"://字符串类型
newCell.SetCellValue(drValue);
break;
case "System.DateTime"://日期类型
DateTime dateV;
DateTime.TryParse(drValue, out dateV);
newCell.SetCellValue(dateV);

//newCell.CellStyle = dateStyle;//格式化显示
break;
case "System.Boolean"://布尔型
bool boolV = false;
bool.TryParse(drValue, out boolV);
newCell.SetCellValue(boolV);
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = 0;
int.TryParse(drValue, out intV);
newCell.SetCellValue(intV);
break;
case "System.Decimal"://浮点型
case "System.Double":
double doubV = 0;
double.TryParse(drValue, out doubV);
newCell.SetCellValue(doubV);
break;
case "System.DBNull"://空值处理
newCell.SetCellValue("");
break;
default:
newCell.SetCellValue("");
break;
}
}
}
}

/// <summary>
/// 将指定的HSSFWorkbook输出到流
/// </summary>
/// <param name="workbook"></param>
/// <param name="strFileName">文件名</param>
public static void ExportHSSFWorkbookByWeb(HSSFWorkbook workbook, string strFileName)
{
using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Position = 0;

HttpContext curContext = HttpContext.Current;

// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = Encoding.Default;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition",
//"attachment;filename=" + HttpUtility.UrlEncode(strFileName, Encoding.Default));
"attachment;filename=" + strFileName);
curContext.Response.BinaryWrite(ms.GetBuffer());
curContext.Response.End();
}

}
}

NPOI导出模板样式的更多相关文章

  1. NPOI导出EXCEL样式

    public void Export(DataRequest<ExportModel> request, DataResponse<dynamic> response) { t ...

  2. NPOI导出EXCEL部分样式不起作用

    在使用NPOI导出excel的时候,设置cell样式,数据量多余6条之后,在后面几条数据没有样式(边框,对其,换行等). 原因是设置CellStyle的时候把CreateCellStyle放在循环列集 ...

  3. WeihanLi.Npoi 根据模板导出Excel

    WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据 ...

  4. .NET NPOI导出Excel详解

    NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...

  5. 使用NPOI导出Excel文件

    使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...

  6. NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters

    /******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...

  7. 基于NPOI导出和导入Excel

    概述 NPOI,顾名思义,就是POI的.NET版本.NPOI就是用.NET语言编写的一套数据导出Excel的开源项目,支持XML.xls.xlsx.ppt等格式..NET不仅实现Excel导出还可以实 ...

  8. C# NPOI导出Excel和EPPlus导出Excel比较

    系统中经常会使用导出Excel的功能. 之前使用的是NPOI,但是导出数据行数多就报内存溢出. 最近看到EPPlus可以用来导出Excel,就自己测了下两者导出上的差异. NPIO官网地址:http: ...

  9. NPOI导出Excel(含有超过65335的处理情况)

    NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...

随机推荐

  1. [No000011]Ruby之attr_reader,attr_writer,attr_accessor理解&用法

    (Ruby/Python/Perl) Ruby 语言与Python和Perl的一个很大区别,在于Ruby中,所有的实例变量都是在类中完全私有的,只能通过accessor 方法来进行变量访问,引用一段代 ...

  2. JSP第5次测试---测试分析

    1. (选择一项) A: B: C: D:  解析:构造方法方法名与类名必须相同,并且没有返回值,在对象创建时被调用:可以有带参和无参的构造方法同时出现于一个类. 2. (选择一项) A: B: C: ...

  3. HTML 学习笔记 CSS3(过度 transition)

    通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果.请把鼠标移动到下面的元素上: 先看一下这个代码 实现旋转放大的效 ...

  4. HTML 学习笔记 CSS(选择器2)

    CSS 类选择器 类选择器允许以一种独立于文档元素的方式来指定样式 CSS 类选择器 类选择器允许以一种独立于文档元素的方式来指定样式 该选择器可以单独使用 也可以和其他元素结合使用 提示 只要适当的 ...

  5. ubuntu-12.10-server安装图形界面

    1.首先你需要确定你的源文件中 /etc/apt/sources.list 已经使用Universe和Multiverse库.然后使用下面的命令来进行更新源列表和安装图形桌面. sudo apt-ge ...

  6. 让 innerHTML 进来的 script 代码跑起来

    今天来简单聊聊如何让 innerHTML 进来的 scrip 代码跑起来的问题. 前台请求一个接口,接口返回一些 HTML 标签拼接成的字符串,以供前端直接 innerHTML 生成 DOM 元素,这 ...

  7. 关于开发中 hosts 文件的修改

    这篇文章只是给自己做个笔记吧. 最近的工作经常要改 hosts 文件(C:\Windows\System32\drivers\etc\hosts),并且改完后不立即生效.小胡子哥 提到: 因为服务器设 ...

  8. 如何对于几百行SQL语句进行优化?

    1.最近在开发中遇到的一些关于几百行SQL语句做查询的问题,需要如何的解决优化SQL这确实是个问题,对于当下的ORM 框架 EF 以及其他的一些的开源的框架例如Drapper ,以及Sqlite-Su ...

  9. mvc5+ef6+Bootstrap 项目心得--创立之初

    1.mvc5+ef6+Bootstrap 项目心得--创立之初 2.mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理 3.mvc5+ef6+Bootstrap 项目心得--WebG ...

  10. Hadoop简单安装配置

    Hadoop开始设计以Linux平台为运行目标,所以这里推荐在Linux发行版比如Ubuntu进行安装,目前已经有Hadoop for Windows出来,大家自行搜下文章. Hadoop运行模式分为 ...