using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.HSSF.Util;
using System.Data; namespace Tools
{
public static class NPOIHelper
{
/// <summary>
/// 设置表格样式,边框线为黑色实线
/// </summary>
/// <param name="hssfworkbook">Excel表格</param>
/// <returns></returns>
public static ICellStyle CreateCellStyle(IWorkbook workbook)
{
var style = workbook.CreateCellStyle();
style.BorderBottom = BorderStyle.THIN;
style.BorderLeft = BorderStyle.THIN;
style.BorderRight = BorderStyle.THIN;
style.BorderTop = BorderStyle.THIN;
style.TopBorderColor = HSSFColor.BLACK.index;
style.BottomBorderColor = HSSFColor.BLACK.index;
style.LeftBorderColor = HSSFColor.BLACK.index;
style.RightBorderColor = HSSFColor.BLACK.index;
style.VerticalAlignment = VerticalAlignment.CENTER;
return style;
} /// <summary>
/// 创建一个普通的Excel表格
/// </summary>
/// <param name="sheetName">Sheet名称</param>
/// <param name="headers">表格头部,默认取DataTable的ColumnName</param>
/// <param name="columnWidths">各列宽度(单位:字符宽度)</param>
/// <param name="rowHight">各行高度(单位:磅)</param>
/// <param name="rowCount">表格创建行数,默认取DataTable的Rows.Count</param>
/// <param name="data">数据</param>
/// <returns></returns>
public static IWorkbook CreateWorkbook(string sheetName, string[] headers, int[] columnWidths, int rowHight, int rowCount, DataTable data)
{
var hssfworkbook = new HSSFWorkbook();
CreateSheet(hssfworkbook, sheetName, headers, columnWidths, rowHight, rowCount, data);
return hssfworkbook;
} /// <summary>
/// 创建一个普通的Excel表格
/// </summary>
/// <param name="sheetName">Sheet名称</param>
/// <param name="headers">表格头部</param>
/// <param name="columnWidths">各列宽度(单位:字符宽度)</param>
/// <param name="rowHight">各行高度(单位:磅)</param>
/// <param name="rowCount">表格创建行数</param>
/// <param name="data">数据</param>
/// <returns></returns>
public static IWorkbook CreateWorkbook(string sheetName, string[] headers, int[] columnWidths, int rowHight, int rowCount, List<List<string>> data)
{
var hssfworkbook = new HSSFWorkbook();
CreateSheet(hssfworkbook, sheetName, headers, columnWidths, rowHight, rowCount, data);
return hssfworkbook;
} /// <summary>
/// 创建一个普通的sheet表格
/// </summary>
/// <param name="workbook">Excel表格</param>
/// <param name="sheetName">Sheet名称</param>
/// <param name="headers">表格头部,默认取DataTable的ColumnName</param>
/// <param name="columnWidths">各列宽度(单位:字符宽度)</param>
/// <param name="rowHight">各行高度(单位:磅)</param>
/// <param name="rowCount">表格创建行数,默认取DataTable的Rows.Count</param>
/// <param name="data">数据</param>
/// <returns></returns>
public static ISheet CreateSheet(IWorkbook workbook, string sheetName, string[] headers, int[] columnWidths, int rowHight, int rowCount, DataTable data)
{
List<string> l = null;
List<List<string>> d = null; if (data != null && data.Rows.Count > )
{
d = new List<List<string>>();
foreach (DataRow dr in data.Rows)
{
l = new List<string>();
foreach (object obj in dr.ItemArray)
{
l.Add(obj.ToZMStringOrEmpty());
}
d.Add(l);
} if (headers.IsNullOrEmpty())
{
var h = new List<string>();
foreach (DataColumn dc in data.Columns)
{
h.Add(dc.ColumnName);
} //for (var i = 0; i < data.Columns.Count; ++i )
//{
// h.Add(data.Columns[i].ColumnName);
//} headers = h.ToArray();
}
} return CreateSheet(workbook, sheetName, headers, columnWidths, rowHight, rowCount, d);
} /// <summary>
/// 创建一个普通的sheet表格
/// </summary>
/// <param name="workbook">Excel表格</param>
/// <param name="sheetName">Sheet名称</param>
/// <param name="headers">表格头部</param>
/// <param name="columnWidths">各列宽度(单位:字符宽度)</param>
/// <param name="rowHight">各行高度(单位:磅)</param>
/// <param name="rowCount">表格创建行数</param>
/// <param name="data">数据</param>
/// <returns></returns>
public static ISheet CreateSheet(IWorkbook workbook, string sheetName, string[] headers, int[] columnWidths, int rowHight, int rowCount, List<List<string>> data)
{
var sheet = workbook.CreateSheet(sheetName);
ICellStyle cellStyle = null;
ICell cell = null;
IRow row = null;
var columnCount = ; // 设置头部
if (headers.HasItem())
{
row = sheet.CreateRow();
row.Height = ;
//新建一个字体样式对象
IFont font = workbook.CreateFont();
//设置字体加粗样式
font.Boldweight = short.MaxValue;
cellStyle = CreateCellStyle(workbook);
for (var i = ; i < headers.Length; ++i)
{
cell = row.CreateCell(i, CellType.STRING);
cell.CellStyle = cellStyle;
cell.SetCellValue(headers[i]);
//使用SetFont方法将字体样式添加到单元格样式中
cell.CellStyle.SetFont(font);
cell.CellStyle.Alignment = HorizontalAlignment.CENTER;
}
columnCount = headers.Length;
} // 设置列宽
if (columnWidths.HasItem())
{
for (var i = ; i < columnWidths.Length; ++i)
{
// 设置表格宽度
sheet.SetColumnWidth(i, columnWidths[i] * );
}
} // 设置数据
if (data.HasItem())
{
rowCount = data.Count;
foreach (var array in data)
{
if (array.Count > columnCount)
{
columnCount = array.Count;
}
}
} cellStyle = CreateCellStyle(workbook);
for (var i = ; i < rowCount; ++i)
{
row = sheet.CreateRow(sheet.LastRowNum + );
row.Height = (short)(rowHight * );
for (var j = ; j < columnCount; ++j)
{
cell = row.CreateCell(j, CellType.STRING);
cell.CellStyle = cellStyle;
try
{
cell.SetCellValue(data[i][j].ToZMStringOrEmpty());
}
catch
{
cell.SetCellValue(string.Empty);
}
}
} return sheet;
}
}
}

基于NPOI的扩展的更多相关文章

  1. 【EXCEL终极总结分享】基于NPOI扩展封装的简易操作工具类库(简单灵活易用,支持导出、导入、上传等常见操作)

    对于EXCEL的导入.导出,我之前已分享过多次,比如: 第一种方案:<我写的一个ExcelHelper通用类,可用于读取或生成数据>这个主要是利用把EXCEL当成一个DB来进行获取数据,导 ...

  2. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility

    1. ExcelUtility功能:  1.将数据导出到EXCEL(支持XLS,XLSX,支持多种类型模板,支持列宽自适应)  类名:ExcelUtility. Export  2.将EXCEL ...

  3. 基于NPOI导出和导入Excel

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

  4. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

  5. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)

    自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...

  6. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)

    上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...

  7. 【个人使用.Net类库】(3)Excel文件操作类(基于NPOI)

    Web开发工作中经常要根据业务的需要生成对应的报表.经常采用的方法如下: 将DataTable导出至Excel文件; 读取模板Excel文件; 修改模板Excel文件对应的内容. 因此,便想到封装一个 ...

  8. ExtJS4.2学习(13)基于表格的扩展插件---rowEditing

    鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-24/182.html --------------- ...

  9. Google Cardboard的九轴融合算法——基于李群的扩展卡尔曼滤波

    Google Cardboard的九轴融合算法 --基于李群的扩展卡尔曼滤波 极品巧克力 前言 九轴融合算法是指通过融合IMU中的加速度计(三轴).陀螺仪(三轴).磁场计(三轴),来获取物体姿态的方法 ...

随机推荐

  1. inet_XX族函数

    在网络编程中, 经常会将网络字节转为本地字节或者将本地字节转为网络字节, 但是如果每次我们都是都通过htonl, ntohl函数需要将10进制转为整数, 甚至还用将字符串转为整数, 再转为网络字节, ...

  2. AtCoder Beginner Contest 089完整题解

    A - Grouping 2 Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement There a ...

  3. git 的简单使用(5)

    git中打标签非常简单:只需要先奇幻岛想要打标签的分支 然后使用指令 git tag <name>就可以打一个新标签 可以用指令 git tag 查看所有标签 git tag <标签 ...

  4. Codeforces 912D - Fishes

    传送门:http://codeforces.com/contest/912/problem/D 本题是一个概率问题——求数学期望. 在一个n×m的方格中,有k个“*”.每个格子里可能有0~1个“*”. ...

  5. 【Codeforces 478C】Table Decorations

    [链接] 我是链接,点我呀:) [题意] 给你r,g,b三种颜色的气球 每张桌子要放3个气球 但是3个气球的颜色不能全都一样 (允许两个一样,或者全都不一样) 问你最多能装饰多少张桌子 [题解] 先把 ...

  6. fzu 2125

    #include<stdio.h> #include<math.h> int total(int x,int m) { int sum=0; while(x>0) {   ...

  7. linux UID,GID,EUID,EGID,SUID,SGID

    SUID, SGID, sticky位可以参考: http://onlyzq.blog.51cto.com/1228/527247/ SUID属性只能运用在可执行文件上,当用户执行该执行文件时,会临时 ...

  8. 迅为4412开发板Linux驱动教程/硬件知识及原理图的使用

    视频教程下载地址:http://pan.baidu.com/s/1pJwxUfL 嵌入式研发流程介绍 • PCB研发流程介绍 – 方案,原理图(网表) – layoutproject师(gerber文 ...

  9. Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误

    这篇是计算机类的优质预售推荐>>>><Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误> 编辑推荐 纠错式学习,从"陷阱 ...

  10. @RestController注解的使用

    示例代码:/*@ResponseBody@Controller*/@RestControllerpublic class HelloController { @RequestMapping(" ...