用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'(表示一个占 ...
随机推荐
- node js 安装时选择勾上path
勾上path则会自动配置环境变量,否则必须手动去添加nodejs的环境变量.
- Spring Boot2.0之 整合Redis集群
项目目录结构: pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...
- Python(2)(基本输入输出语句)
我们先来说输出:
- UIScrollView控件介绍
1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 (2)当展⽰示的内容较多,超出⼀一个屏幕时,⽤用户可通过滚动⼿手势来查看 ...
- 「LuoguP2434」 [SDOI2005]区间(贪心
Description 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照 ...
- 「LuoguP4753」濑 River Jumping(贪心
Description 有一条宽度为 N 的河上,小D位于坐标为 0 的河岸上,他想到达坐标为 N 的河岸上后再回到坐标为 0 的位置.在到达坐标为 N 的河岸之前小D只能向坐标更大的位置跳跃,在到达 ...
- 开发微信小程序入门前
开发微信小程序入门前 百牛信息技术bainiu.ltd整理发布于博客园 2016年09月21日晚 微信发不了微信“小程序”的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论这个事情. 作为互联 ...
- writing-mode属性
writing-mode属性 最初只是ie中的属性,只有ie支持,现在在css3中谷歌,火狐也开始支持. 所以使用的时候就需要记住两套不同的语法,ie的私有属性和css3的规范属性 如果只需要兼容到i ...
- bzoj2676
二分概率+矩乘+dp 也是二分概率,然后dp[i][j][k]表示当前到了i,有j条命,下一次的收益是k,然后矩乘转移,但是我自己的似乎wa了,抄了liu_runda的才行,具体不知道为什么 注释的是 ...
- JS获取子节点、父节点和兄弟节点的方法实例总结
转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...