用NPOI从DataTable到Excel,向Excel模板填充数据
DataTable---->Excel,填充数据
private IWorkbook workbook = null;
private ISheet sheet = null;
private string fileName = "";//文档路径
private FileStream fs = null; public ExcelHelper()
{
}
//构造函数
public ExcelHelper(string file)
{
this.fileName = file;
}
/// <summary>
/// DataTable到Excel,向Excel模板填充数据
/// </summary>
/// <param name="dt"></param>
/// <param name="filePath">导出EXcel存储地方</param>
/// <param name="templeteFile">Excel模板路径</param>
/// <param name="titleName">sheet标题</param>
public bool ExportExcel(DataTable dt, string filePath, string templeteFile, string titleName)
{
bool flag = false;
try
{
using (MemoryStream ms = ExportExcelForDt(dt, filePath, templeteFile, titleName))
{
using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
byte[] data = ms.ToArray();
fs.Write(data, , data.Length);
fs.Flush(); data = null;
}
}
flag = true;
}
catch
{
} return flag;
} private MemoryStream ExportExcelForDt(DataTable dt, string filePath, string templeteFile, string titleName)
{
int totalIndex = ; //每个类别的总行数
int rowIndex = ;//起始行
int dtRowIndex = dt.Rows.Count;
//工作薄
IWorkbook workbook = null;
using (FileStream fs = new FileStream(templeteFile, FileMode.Open, FileAccess.Read))
{
//判断Excel版本
if (System.IO.Path.GetExtension(templeteFile) == ".xls")
{
workbook = new HSSFWorkbook(fs);
}
else if (System.IO.Path.GetExtension(templeteFile) == ".xlsx")
{
workbook = new XSSFWorkbook(fs);
}
else
{
throw new Exception("文件类型错误");
} //获取sheet[0]
ISheet sheet = workbook.GetSheetAt(); //表头处理
IRow headerRow = sheet.GetRow();
ICell headerCell = headerRow.GetCell();
headerCell.SetCellValue(titleName); //隐藏多余行,在数据填充区,对空白部分作处理
for (int i = rowIndex + dtRowIndex; i < rowIndex + totalIndex; i++)
{
IRow dataRowH = sheet.GetRow(i);
dataRowH.Height = ;
dataRowH.ZeroHeight = true;
} //填充数据
foreach (DataRow row in dt.Rows)
{
IRow dataRow = sheet.GetRow(rowIndex); //开始列(0为标题列,从1开始)
int columnIndex = ;
#region 2
foreach (DataColumn column in dt.Columns)
{
#region 1
//列序号赋值 2018-02-17 不能要等号,否则最后一项没有
if (columnIndex > dt.Columns.Count)
{
break;
} ICell newCell = dataRow.GetCell(columnIndex);
if (newCell == null)
{
newCell = dataRow.CreateCell(columnIndex);
} string drValue = row[column].ToString();
switch (column.DataType.ToString())
{
case "System.String":
newCell.SetCellValue(drValue);
break;
case "System.DateTime":
DateTime datev;
DateTime.TryParse(drValue, out datev);
newCell.SetCellValue(datev);
break;
case "System.Boolean":
bool boolV = false;
bool.TryParse(drValue, out boolV);
break;
case "System.Int16":
case "System.Int32":
case "System.Int64":
case "Systmen.Byte":
int intV = ;
int.TryParse(drValue, out intV);
newCell.SetCellValue(intV);
break;
case "System.Decimal":
case "System.Double":
double doubV = ;
double.TryParse(drValue, out doubV);
newCell.SetCellValue(doubV);
break;
case "System.DBNull":
newCell.SetCellValue("");
break;
default:
newCell.SetCellValue("");
break;
}
columnIndex++;
#endregion }
#endregion rowIndex++;
} //格式化当前sheet,用于数据total计算
sheet.ForceFormulaRecalculation = true; using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Position = ;
sheet = null;
workbook = null; return ms;
}
}
}
用NPOI从DataTable到Excel,向Excel模板填充数据的更多相关文章
- 详解python操作生成excel表格,并且填充数据
最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...
- NPOI通过DataTable导出和读取Excel
Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...
- 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)
本次随笔主要讲述着工作中是如何解决数据导出的,对于数据导出到excel在日常工作中大家还是比较常用的,那导出到word呢,改如何处理呢,简单的页面导出问题应该不大,但是如果是标准的公文导出呢,要保证其 ...
- 根据EXCEL模板填充数据
string OutFileName = typeName+"重点源达标率" + DateTime.Now.ToString("yyyy-MM-dd"); ...
- 读取excel模板填充数据 并合并相同文本单元格
try { string OutFileName = "北京市国控企业污染源废气在线比对监测数据审核表" + DateTime.Now.ToString(& ...
- POI3.10读取Excel模板填充数据后生成新的Excel文件
private final DecimalFormat df = new DecimalFormat("#0.00"); public void test(){ String fi ...
- 尝试做一个.NET模板填充导出Excel工具
园友好,最近晚辈延续上篇后尝试进阶做成Excel模板填充数据生成工具 MiniExcel Template. 主要特点 同样以Stream流.延迟查询避免全部数据载入内存情况,做到1GB内存降低到只需 ...
- 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)
DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...
- 将DataTable内容导出到Excel表格的两种方法
方法一:循环DataTable单元格内容拼接字符串,利用StreamWriter的Write方法将字符串写入Excel文件中 这种方法很实现很简单.拼接字符串时,每个单元格之间添加'\t'(表示一个占 ...
随机推荐
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方式
如题,简单记录一下这个问题的解决的方法,导致问题的核心原因是:ajaxfileupload不支持响应头ContentType为application/json的设置.而且IE也不支持这样的格式,而当我 ...
- POJ2155 Matrix 二维线段树
关键词:线段树 二维线段树维护一个 维护一个X线段的线段树,每个X节点维护一个 维护一个Y线段的线段树. 注意,以下代码没有PushDownX.因为如果要这么做,PushDownX时,由于当前X节点的 ...
- 用Delphi7 调用.NET 2.0的WebService 所要注意的问题(Document格式和UTF8编码)
Delphi7 调用VS.NET 2005开发的基于.NET 2.0的WebService时发生了错误.查阅资料 http://www.community.borland.com/article/bo ...
- NOIP2016总结
Day1: T1:模拟: #include<iostream> #include<cstdio> #include<cstdlib> #include<cst ...
- spin_lock、spin_lock_irq、spin_lock_irqsave区别
void spin_lock(spinlock_t *lock); void spin_lock_irq(spinlock_t *lock); void spin_lock_irqsave(spinl ...
- BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心
BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心 Description Bessie烘焙了一块巧克力蛋糕.这块蛋糕是由R*C(1 <= R,C ...
- 【POJ 1151】 Altlantis
[题目链接] 点击打开链接 [算法] 线段树扫描线 推荐一篇比较容易理解的线段树扫描线的文章 : https://blog.csdn.net/u013480600/article/details/22 ...
- PHP自动发送邮件
目录 1. PHPMailer 2. 集成ThinkPHP 2.1 类库重命名 2.2 配置SMTP服务器 2.3 使用 1. PHPMailer 在自己项目引入核心类库文件 require_once ...
- JavaScript-Tool:jquery.tree.js-un
ylbtech-JavaScript-Tool:jquery.tree.js 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 0. https://www.jst ...
- vue 随笔3
在整个vue项目中index.js只能有一个 ,创建vue组件实例的代码只能写在main.js中或者index.js中,别的文件中都是使用export default 常量 或者是方法