/// <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. 已Access为支持,书写一个C#写入的记录的方案

      /// <summary> /// 读取Excel文档 /// </summary> /// <param name="Path">文件名称 ...

  2. Xcode 编译的哪些错误

    1.error: macro names must be identifiers YourProject_prefix.pch 原因: 因为你弄脏了预处理器宏,在它处于<Multiple Val ...

  3. ES5特性之Object.freeze

    Object.freeze方法比Object.seal方法更严格,不仅不能扩展新对象和不可重新配置属性的特性,还不能改变对象属性的值writable(不可写)

  4. Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. ...

  5. 【转】【MySql】Waiting for table metadata lock原因分析

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...

  6. Tomcat6配置webdav协议

    Tomcat6默认是支持webdav协议的,只是webapps目录中不带例子而已.要添加支持很简单,在webapps目录中建立webdav目录,在webdav目录中建立WEB-INF目录,加入web. ...

  7. 用opencv的traincascade训练检测器

    #1,准备正负样本 正样本:可以一张图片上多个sample,也可以一张图片单独成一个sample,准备多个sample.生成描述文件如下所示: 负样本:只要不含正样本,任意图片都可以作为负样本,但是最 ...

  8. [PGM] I-map和D-separation

    之前在概率图模型对概率图模型做了简要的介绍.此处介绍有向图模型中几个常常提到的概念,之前参考的多为英文资料,本文参考的是<概率图模型-原理与技术的>中译版本.很新的书,纸质很好,翻译没有很 ...

  9. 利用uploadify+asp.net 实现大文件批量上传。

    前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...

  10. Windows Phone 8 开发资料

    Design http://aka.ms/wp8devdesign Develop http://aka.ms/wp8devdoc Test http://aka.ms/wp8testing Publ ...