基于NPOI的扩展
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的扩展的更多相关文章
- 【EXCEL终极总结分享】基于NPOI扩展封装的简易操作工具类库(简单灵活易用,支持导出、导入、上传等常见操作)
对于EXCEL的导入.导出,我之前已分享过多次,比如: 第一种方案:<我写的一个ExcelHelper通用类,可用于读取或生成数据>这个主要是利用把EXCEL当成一个DB来进行获取数据,导 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility
1. ExcelUtility功能: 1.将数据导出到EXCEL(支持XLS,XLSX,支持多种类型模板,支持列宽自适应) 类名:ExcelUtility. Export 2.将EXCEL ...
- 基于NPOI导出和导入Excel
概述 NPOI,顾名思义,就是POI的.NET版本.NPOI就是用.NET语言编写的一套数据导出Excel的开源项目,支持XML.xls.xlsx.ppt等格式..NET不仅实现Excel导出还可以实 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)
ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续2篇-模板导出综合示例)
自ExcelUtility类推出以来,经过项目中的实际使用与不断完善,现在又做了许多的优化并增加了许多的功能,本篇不再讲述原理,直接贴出示例代码以及相关的模板.结果图,以便大家快速掌握,另外这些示例说 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)
上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...
- 【个人使用.Net类库】(3)Excel文件操作类(基于NPOI)
Web开发工作中经常要根据业务的需要生成对应的报表.经常采用的方法如下: 将DataTable导出至Excel文件; 读取模板Excel文件; 修改模板Excel文件对应的内容. 因此,便想到封装一个 ...
- ExtJS4.2学习(13)基于表格的扩展插件---rowEditing
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-24/182.html --------------- ...
- Google Cardboard的九轴融合算法——基于李群的扩展卡尔曼滤波
Google Cardboard的九轴融合算法 --基于李群的扩展卡尔曼滤波 极品巧克力 前言 九轴融合算法是指通过融合IMU中的加速度计(三轴).陀螺仪(三轴).磁场计(三轴),来获取物体姿态的方法 ...
随机推荐
- 北京Python开发培训怎么选?
北京的地理优势和经济优势基本无需多言,作为全国机会最多的地方,吸引了无数的北漂前赴后继.作为中国互联网中心之一,北京有海量Python岗位正在等待大家淘金. 近几年中,Python一直是市场上最受欢迎 ...
- 通过git向github提交项目
按顺序学习 https://www.cnblogs.com/forget406/p/6045499.html#top https://blog.csdn.net/xiaoputao0903/artic ...
- ionic使用cryptojs加密 复制到黏贴版 使用md5
npm install crypto-js npm install --save @types/crypto-js import * as crypto from "crypto-js&qu ...
- 第三节:numpy之数组数学运算
- codeforeces近日题目小结
题目源自codeforeces的三场contest contest/1043+1055+1076 目前都是solved 6/7,都差了最后一题 简单题: contest/1043/E: 先不考虑m个限 ...
- 背包again
Gy最近学习了01背包问题,无聊的他又想到了一个新的问题,给定n个物品的价值,和01背包一样,每个物品只能选1次或0次,求最小不能被得到的价值. 输入 第一行一个正整数T(T <= 100),表 ...
- noip2013 Day2 T2 花匠 解题报告
题目: 3289 花匠 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大, ...
- [转]十五天精通WCF——第九天 高级玩法之自定义Behavior
终于我又看完了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面言归正传, 看看这 ...
- iOS:解决pod的Insecure world writable dir问题
当我们运行pod setup的命令的时候,有时候会碰到这个警告: /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.33.1/lib/cocoapods/execut ...
- Python获取当前系统时间
Python获取当前系统时间 import time #返回当前时间 def GetNowTime(): return time.strftime("%Y-%m-%d %H:%M:% ...