什么是NPOI ?

  简而言之,NPOI就是可以在没有Office的情况下对Word或Excel文档进行读写等操作。

使用方式 :

  1、准备NPOI的dll文件

    下载链接:https://npoi.codeplex.com/releases

  2、将下载的dll文件引入项目中

  3、引用命名空间

     

须知:

  1、Excel表格分为:WorkBook(工作薄)-> Sheet(工作表) -> 行:Row 单元格:Cell。

  2、NPOI是POI的C#版本,NPOI的行和列的index都是从0开始

  3、POI读取Excel有两种格式一个是HSSF,另一个是XSSF。 HSSF和XSSF的区别如下: 
     HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. 
     XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format. 
     即:HSSF适用2007以前的版本,XSSF适用2007版本及其以上的。

       下面使用NPOI读取Excel例子:主要功能是将DataTable导入Excel,或将Excel读取到DataTable中。

代码如下:

       /// <summary>
/// 将DataTable导入到Excel
/// </summary>
/// <param name="data">要导入的数据</param>
/// <param name="filepath">导入的文件路径(包含文件名称)</param>
/// <param name="sheename">要导入的表名</param>
/// <param name="iscolumwrite">是否写入列名</param>
/// <returns>导入Excel的行数</returns>
public int DataTableToExcel(DataTable data, string filepath, string sheename, bool iscolumwrite)
{
int i = ;
int j = ;
int count = ;
ISheet sheet = null;
using (fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
//根据Excel不同版本实例不同工作铺
if (filepath.IndexOf(".xlsx") > ) // 2007版本
{
workbook = new XSSFWorkbook();
}
else if (filepath.IndexOf(".xls") > ) // 2003版本
workbook = new HSSFWorkbook(); try
{
if (workbook != null)
{
sheet = workbook.CreateSheet(sheename);
}
else
{
return -;
} if (iscolumwrite == true) //写入DataTable的列名
{
IRow row = sheet.CreateRow();
for (j = ; j < data.Columns.Count; ++j)
{
row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);
}
count = ;
}
else
{
count = ;
} for (i = ; i < data.Rows.Count; ++i)
{
IRow row = sheet.CreateRow(count);
for (j = ; j < data.Columns.Count; ++j)
{
row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());
}
count++;
}
workbook.Write(fs); //写入到excel
return count;
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
return -;
}
finally { fs.Close(); fs.Dispose(); }
}
}
       /// <summary>
/// 将Excel导入DataTable
/// </summary>
/// <param name="filepath">导入的文件路径(包括文件名)</param>
/// <param name="sheetname">工作表名称</param>
/// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>
/// <returns>DataTable</returns>
public DataTable ExcelToDataTable(string filepath, string sheetname, bool isFirstRowColumn)
{
ISheet sheet = null;//工作表
DataTable data = new DataTable(); var startrow = ;
using (fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
try
{
if (filepath.IndexOf(".xlsx") > ) // 2007版本
workbook = new XSSFWorkbook(fs);
else if (filepath.IndexOf(".xls") > ) // 2003版本
workbook = new HSSFWorkbook(fs);
if (sheetname != null)
{
sheet = workbook.GetSheet(sheetname);
if (sheet == null) //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
{
sheet = workbook.GetSheetAt();
}
}
else
{
sheet = workbook.GetSheetAt();
}
if (sheet != null)
{
IRow firstrow = sheet.GetRow();
int cellCount = firstrow.LastCellNum; //行最后一个cell的编号 即总的列数
if (isFirstRowColumn)
{
for (int i = firstrow.FirstCellNum; i < cellCount; i++)
{
ICell cell = firstrow.GetCell(i);
if (cell != null)
{
string cellvalue = cell.StringCellValue;
if (cellvalue != null)
{
DataColumn column = new DataColumn(cellvalue);
data.Columns.Add(column);
}
}
}
startrow = sheet.FirstRowNum + ;
}
else
{
startrow = sheet.FirstRowNum;
}
//读数据行
int rowcount = sheet.LastRowNum;
for (int i = startrow; i < rowcount; i++)
{
IRow row = sheet.GetRow(i);
if (row == null)
{
continue; //没有数据的行默认是null
}
DataRow datarow = data.NewRow();//具有相同架构的行
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
datarow[j] = row.GetCell(j).ToString();
}
}
data.Rows.Add(datarow);
}
}
return data;
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
return null;
}
finally { fs.Close(); fs.Dispose(); }
}
}

测试代码:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; using NPOIHelperTool;
using Bll;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable data = new DataTable();
for (int i = ; i < ; ++i)
{
data.Columns.Add("Columns_" + i.ToString(), typeof(string));
} for (int i = ; i < ; ++i)
{
DataRow row = data.NewRow();
row["Columns_0"] = "item0_" + i.ToString();
row["Columns_1"] = "item1_" + i.ToString();
row["Columns_2"] = "item2_" + i.ToString();
row["Columns_3"] = "item3_" + i.ToString();
row["Columns_4"] = "item4_" + i.ToString();
data.Rows.Add(row);
} ExcelHelper h = new ExcelHelper();
DataTable de = h.ExcelToDataTable(@"E:\Myuser.xls", "Sheet1", true);
int c = h.DataTableToExcel(data, @"E:\Test.xls", "sheet1", true);
IList<student> a = TypeUtil.ToList<student>(de);
} }
class student
{
public string Id { get; set; }
public string Name { get; set; }
public string nc { get; set; }
}
}

参考:

https://www.cnblogs.com/Raning/p/5872822.html

https://blog.csdn.net/dcrmg/article/details/52356236

http://www.cnblogs.com/Erik_Xu/archive/2012/06/08/2541957.html

作者:遥远的Ta

出处:https://www.cnblogs.com/lycb

Npoi简单读写Excel的更多相关文章

  1. C# 使用 NPOI 库读写 Excel 文件

    NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Examples,给出 ...

  2. C# 使用 NPOI 库读写 Excel 文件(转载)

    NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼 容xls 和 xlsx.官网提供了一份Examples,给出了 ...

  3. C# 中 NPOI 库读写 Excel 文件的方法【摘】

    原作:淡水网志 NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Exa ...

  4. NPOI简单操作excel

    本文仅当是个记录文件,仅供初学者参考. 首先得using几个npoi的空间名如下: using NPOI.HSSF.UserModel;using NPOI.HSSF.Util;using NPOI. ...

  5. NPOI库读写Excel文件

    //首先Nuget安装NPOI库using System; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using N ...

  6. 使用NPOI读写Excel、Word

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...

  7. NPOI读写Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...

  8. NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel

    NPOI.dll 用法.单元格,样式,字体,颜色,行高,宽度.读写excel 转载:http://yuncode.net/code/c_531e679b3896495 view source prin ...

  9. JS异步上传Excel 并使用NPOI进行读写操作

    实现功能 导入——客户端使用 ajaxfileupload.js 插件实现Excel的异步上传,并在服务端解析成JSON字符串返回页面 导出——将页面中的grid表拼接成JSON串上传至服务器,在服务 ...

随机推荐

  1. [原创]Zynq AXI-CDMA的使用

    Xilinx 提供了3种DMA AXI-DMA AXI-CDMA AXI-VDMA 使用CDMA能够满足项目需求(MM-MM),DS文档介绍如下: The Xilinx LogiCORE™ IP AX ...

  2. .net 获取配置文件AppSettings的键值

    //AppSettings.config 节点代码 <appSettings> <add key="IsUpdate" value="false&quo ...

  3. js监听用户思否在当前页面

    (function () { var t var hiddenProperty = 'hidden' in document ? 'hidden' : 'webkitHidden' in docume ...

  4. Jmeter中基本操作

    Jmeter中基本操作包括 1:线程组 2:HTTP信息头管理器 3:HTTP请求默认值 4:HTTP请求 5:查看结果树 操作步骤如下: 1.创建一个线程组 通俗的讲一个线程组,,可以看做一个虚拟用 ...

  5. pycharm 记录

    一.pycharm字体放大.缩小的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双 ...

  6. SQL增删改语句

    一,插入数据 1.使用  insert ...values 语句插入单行或多行元组数据 insert  into 表名 (列名,列名,...,列名) values 值 表名:指被插入数据的表名 列名: ...

  7. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  8. Flask速成项目:Flask实现计算机资源的实时监控

    很多人都说使用Python开发WEB应用非常方便,那么对于WEB新手来说,到底有多方便呢?本文即将展示给你Python的魔法. 本文将通过一个实例:Flask实现计算机资源的实时监控,迅速带你入门Fl ...

  9. CF.802C.Heidi and Library (hard) (费用流zkw)

    题目链接 复习了下餐巾计划问题.全忘了=-= 首先这是一道网络流.然后本题有\(n\)种建图方法,以及\(smy\) dalao还有单纯形做法. 先假设所有物品都是买入的.那么对于每一天,拆成两个点\ ...

  10. Linux 体系结构

    Linux 体系结构 Linux 嵌入式系统的组成 层次结构图   bios 1.硬件检测 2.初始化系统设备 3.装入os 4.调os向硬件发出的指令 bsp 板级支持包 硬件相关 开发板原理图 开 ...