作为C#处理Excel的强大的开源组件,NPOI具有Office Excel的绝大部分功能,与收费的Spire比虽有不足,但对于一般性的处理来说还是基本够用,这也是NPOI至今仍作为众多C#堆码人员的选择的原因。

收费软件能够提供更多的功能给用户,这也是它的卖点。Spire的DataTable数据导入,就是NPOI所不具备的,而导入DataTable数据,对于C#来说是经常遇到的,所以NPOI用起来虽然也能够想办法处理,却没有那么方便。

下面的代码,仿照Spire的DataTable数据导入,提供大家一个参照。

/// <summary>
/// NPOI把DataTable的数据写入到指定的Sheet中
/// </summary>
/// <param name="sourceData">要写入的数据表</param>
/// <param name="sheet">当前要写入的Sheet</param>
/// <param name="rowStart">当前要写入的Sheet的起始行号(行计数从1起)</param>
/// <param name="colStart">当前要写入的Sheet的起始列号(列计数从1起)</param>
/// <param name="IsWriteColumnName">DataTable的列名称是否写入Sheet</param>
/// <param name="cellStyle">单元格格式</param>
/// <returns>返回标题行数和写入的表行数的合计</returns>
private int DataTableToSheet_NPOI(DataTable sourceData, ISheet sheet, int rowStart, int colStart, bool IsWriteColumnName, ICellStyle cellStyle = null)
{//Sheet的总行数int WriteRowCount = rowStart - 1;  //已有行数,同时为新行号(NPOI计数从0起)ICell cell;//是否写入列名,则写入DataTable的列名,已有行后的下一行写入列名if (IsWriteColumnName){//sheet表创建新的一行,即已有行后的第一行IRow ColumnNameRow = sheet.CreateRow(WriteRowCount);//进行写入DataTable的列名for (int colunmNameIndex = 0; colunmNameIndex < sourceData.Columns.Count; colunmNameIndex++){cell = ColumnNameRow.CreateCell(colStart - 1 + colunmNameIndex);cell.SetCellValue(sourceData.Columns[colunmNameIndex].ColumnName.ToString());SetValue(cell, sourceData.Columns[colunmNameIndex].ColumnName);if (cellStyle != null)cell.CellStyle = cellStyle;}WriteRowCount++;}//写入数据for (int row = 0; row < sourceData.Rows.Count; row++){//sheet表创建新的一行IRow newRow = sheet.CreateRow(WriteRowCount);for (int column = 0; column < sourceData.Columns.Count; column++){cell = newRow.CreateCell(colStart - 1 + column);SetValue(cell, sourceData.Rows[row][column]);if (cellStyle != null)cell.CellStyle = cellStyle;}WriteRowCount++;  //下一行号}return WriteRowCount;
}
private void SetValue(ICell cell,object value)
{Type type = value.GetType();switch (type.Name){case "Boolean":cell.SetCellValue((bool)value);break;case "String":cell.SetCellValue(value.ToString());break;case "DateTime":cell.SetCellValue((DateTime)value);break;case "Int32":cell.SetCellValue((int)value);break;case "Single":cell.SetCellValue((double)value);break;case "Double":cell.SetCellValue((double)value);break;default:cell.SetCellValue(value.ToString());break;}
}

以上示例亲测通过。关于单元格格式,还可以增加一个标题格式(列名格式处理),这个处理没有问题吧。

C#开源组件NPOI处理Excel导入DataTable数据至Sheet相关推荐

  1. .net excel导入mysql_.NET Core使用NPOI将Excel中的数据批量导入到MySQL - 追逐时光者 - 博客园...

    前言: 在之前的几篇博客中写过.NET Core使用NPOI导出Word和Excel的文章,今天把同样我们日常开发中比较常用的使用Excel导入数据到MySQL数据库中的文章给安排上.与此同时还把NP ...

  2. C# 使用 NPOI 处理Excel导入单元格内容是公式问题

    C# 使用 NPOI 处理Excel导入单元格内容是公式问题 引言:今天在处理业务的时候,碰到导入Excel数据不成功的问题,那么就在这里做下笔记吧. 首先,我们有以下的数据.整块业务逻辑的代码在最后 ...

  3. 将Excel表格导入mysql数据表_如何把Excel导入mysql数据表的方法详解

    把Excel导入mysql数据表其实是一件非常的简单的事情了,我们可以通过多种方法来实现了,下面我们来看一些关于小编整理的把Excel导入mysql数据表的方法了. 方法一 把Excel导入mysql ...

  4. NPOI 读取excel到DataTable 读取隐藏列 读取公式列

    处理思路: 1.打开excel 用NPOI进行读取: 2.读取第一个Sheet: 读取过程中: a.先设置相应列 不隐藏 b.读取Cell时 先判断是否的包含公式 相应代码如下: public sta ...

  5. office工具包开源了,使用Excel导入导出非常方便

    2019独角兽企业重金招聘Python工程师标准>>> common.office 详细介绍 java组件,实现Excel,word,pdf等常用office的 **#目前只完善Ex ...

  6. C# winform Excel导入保存数据两种方法

    方法一::微软自带excel 操作类 项目运行:设置 Any CPU 引用:System.Data.OleDb 点击事件导入按钮: private void buttonX25_Click(objec ...

  7. npoi使用Excel模板下载数据

    C# 使用npoi下载Excel文件时,在有些复杂场景下需要对Excel数据及表头进行特殊处理.如合并表头,对某些列设置特殊数值格式. 这就需要提前定制Excel模板,做好特殊处理,程序只需要填入数据 ...

  8. excel 导入文本数据乱码问题

    1.数据导入 打开 Excel,执行"数据"->"自文本",选择 CSV 文件,出现文本导入向导,选择"分隔符号",下一步,勾选&qu ...

  9. excel导入oracle数据表,Excel数据导入到Oracle表

    Excel数据通过plsql导入到Oracle2012-10-22 00:00比特网悠虎 关键字:Oracle Excel数据通过plsql导入到Oracle 1 准备Excel导入数据 2 把Exc ...

最新文章

  1. 中间件ROS/CyberRT/AutoSAR对比
  2. linux+bash+参数脚本名,linux – Bash中的脚本参数
  3. php 中文相等_php判断字符串是否相等
  4. CoolQ/DingTalk 实现CI/CD消息推送到群
  5. 修改cmdline 把内存改成512MB
  6. Python批量修改Excel文件格式:加粗、颜色交替、渐变背景色填充
  7. ArcGIS水文分析实战教程(14)提取水库湖泊等面状水系
  8. 谱减法matlab程序_从零开始的matlab学习笔记——(2)基本运算
  9. 如何解决BIOS自动更新,不断循环更新,无法进入系统
  10. 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践
  11. KVM设备透传与重定向
  12. 高速内部总线HSIB和设备总线DB
  13. 使用python的模拟退火算法估计heston期权定价模型的五个参数(新)
  14. 并发——锁升级(偏向锁,轻量级锁,重量级锁,及常见锁)
  15. 2017字节跳动秋招编程题-头条校招
  16. 简单的图书管理系统(类的练习)
  17. 南卡315打假!揭露山寨耳机“十宗罪”!
  18. 百度语音合成模型Deep Voice3
  19. 基于Autojs的66联盟快手版辅助
  20. onblur事件不支持冒泡的解决办法

热门文章

  1. Nboot与Eboot
  2. 长沙国储电脑城-学生买电脑-被坑记
  3. qq手机令牌 for android3.3 官方安装版,腾讯手机管家app下载 腾讯手机管家(原QQ手机管家) for Android v8.8.3 官方安卓版 下载-脚本之家...
  4. git中全局设置用户名
  5. 财产、人身、养老保险公司
  6. 51Nod ProjectEuler 48
  7. NASA完成审查 下周三宇航员搭SpaceX载人龙飞船升空
  8. 网闸——(好)物理隔离网闸——入门篇
  9. 实现一个类似QQ的社交聊天工具
  10. Windows桌面图标被白块挡住大部分