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模板填充数据的更多相关文章

  1. 详解python操作生成excel表格,并且填充数据

    最近在研究python操作excel表格的问题,首先读取excel表格觉得平时用的多,不怎么有难度,就是pyhon生成excel表格的时候,平时不怎么用,所以重点研究了一下,现总结如下: 1.首先用到 ...

  2. NPOI通过DataTable导出和读取Excel

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...

  3. 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)

    本次随笔主要讲述着工作中是如何解决数据导出的,对于数据导出到excel在日常工作中大家还是比较常用的,那导出到word呢,改如何处理呢,简单的页面导出问题应该不大,但是如果是标准的公文导出呢,要保证其 ...

  4. 根据EXCEL模板填充数据

    string OutFileName = typeName+"重点源达标率" + DateTime.Now.ToString("yyyy-MM-dd");    ...

  5. 读取excel模板填充数据 并合并相同文本单元格

    try             { string OutFileName = "北京市国控企业污染源废气在线比对监测数据审核表" + DateTime.Now.ToString(& ...

  6. POI3.10读取Excel模板填充数据后生成新的Excel文件

    private final DecimalFormat df = new DecimalFormat("#0.00"); public void test(){ String fi ...

  7. 尝试做一个.NET模板填充导出Excel工具

    园友好,最近晚辈延续上篇后尝试进阶做成Excel模板填充数据生成工具 MiniExcel Template. 主要特点 同样以Stream流.延迟查询避免全部数据载入内存情况,做到1GB内存降低到只需 ...

  8. 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)

    DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...

  9. 将DataTable内容导出到Excel表格的两种方法

    方法一:循环DataTable单元格内容拼接字符串,利用StreamWriter的Write方法将字符串写入Excel文件中 这种方法很实现很简单.拼接字符串时,每个单元格之间添加'\t'(表示一个占 ...

随机推荐

  1. Ubuntu 配置 nfsserver

    https://help.ubuntu.com/lts/serverguide/network-file-system.html#nfs-installation 网络文件系统 (NFS) NFS 允 ...

  2. 数据库DCL、DDL、DML、DQL

    SQL三部分:data manipulation language      DCL: (控制)管理用户权限(GRANT.REVOKE),数据库整体配置      DDL: (定义)作用于数据库,表, ...

  3. 【Nginx安装】CentOS7安装Nginx及配置

    [Nginx安装]CentOS7安装Nginx及配置 2018年03月05日 11:07:21 阅读数:7073 Nginx是一款轻量级的网页服务器.反向代理服务器.相较于Apache.lighttp ...

  4. hdu-5720 Wool(区间并+扫描线)

    题目链接: Wool Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 262144/262144 K (Java/Others) Pr ...

  5. python中的编码和解码

    计算机中常见的编码方式有多种,英文一般是ascii编码,其他有unicode,utf-8,gbk,utf-16等编码. 常见编码方式: ASCII编码:ASCII是早期的编码,包含英文字母.数字和 ...

  6. The Castle

    链接 分析:先暴力求出联通块数和最大联通块包含多少,接着对于每个位置判断去掉其上下左右的四个位置的墙之后的最大联通块数,并且记得先选最西,然后选最南的顺序了来输出 /* PROB:castle ID: ...

  7. Runnable、Callable、Future和FutureTask之二:源码解析

    一.Callable与Future类图 1.类图 许多任务实际上都是存在延迟的计算,对于这些任务,Callable是一种更好的抽象:它会返回一个值,并可能抛出一个异常.Callable接口: V ca ...

  8. Bootstrap-CSS:代码

    ylbtech-Bootstrap-CSS:代码 1.返回顶部 1. Bootstrap 代码 Bootstrap 允许您以两种方式显示代码: 第一种是 <code> 标签.如果您想要内联 ...

  9. iconMoon---小图标小记

    IcoMoon 是一个免费的图标库.可以下载自己需要的图标 三.使用流程.操作演示 进入主页,点击下图所示区域开始: 每个图标你都是可以自己进行标记的(移上去会看到Edit, 点击之),然后—— 注: ...

  10. 线程间操作无效: 从不是创建控件“xxxxxxxx”的线程访问它。

    方法一: Control.CheckForIllegalCrossThreadCalls = false; 方法二:(推荐) this.Invoke(new MethodInvoker(() => ...