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. 简述cookie ,localStrage,sessionStorage的区别?

    1.cookie: 是一个回话跟踪技术,信息存储在用户硬盘,可以做全局变量. 什么是会话:用户进入网站,开始浏览到结束的这样的一个过程,称为一次会话. 会话跟踪技术:浏览器和服务器之间进行多次请求数据 ...

  2. Python-暑期实训day 1

    python基础: 一 编程语言 什么是编程语言? 上面提及的能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质.在编程的世界里,计算机更像是人的奴隶,人类 ...

  3. js 简单模板引擎

    代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...

  4. P1638 逛画展

    题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a和b,代表他要看 ...

  5. Exception总结

    NO.1 java.lang.NullPointerException 程序遇上了空指针 NO.2 java.lang.ClassNotFoundException 指定的类不存在 NO.3 java ...

  6. 使用redis和简单token机制校验身份的思路

    1. 登录时生成token, 以token为键,以用户信息为值,存储在redis中,设置key过期时间 2. 需要身份验证的接口,带上token 3. 接口校验redis中token是否存在 4. 存 ...

  7. 10.mysql事务管理及python操作

    在用户操作MySQL过程中,对于一般简单的业务逻辑或中小型程序而言,无需考虑应用MySQL事务.但在比较复杂的情况下,往往用户在执行某些数据操作过程中,需要通过一组SQL语句执行多项并行业务逻辑或程序 ...

  8. 基本数据类型:布尔型(bool)和空值None

    一.布尔型(bool) 布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断: 一件事情成立就是True,不成立就是False,也可以将bool值归类为数字, 是因 ...

  9. git 的简单使用(5)

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

  10. 第六节:numpy之数组拼接