工作中用到 使用XSSFWorkbook 读取excel 具体代码如下,

private (List<(string columnName, string colomnDescription)> headers, List<IList<string>> rows) ParseExcel(string excelPath, string sheetName)
{

var stream = File.OpenRead(excelPath);
using (stream)
{
var workbook = new XSSFWorkbook(stream);
var sheet = workbook.GetSheet(sheetName);
var rows = new List<IList<string>>();
var headers = new List<(string columnName, string colomnDescription)>();
var rowLimit = 10000;
var columnLimit = 100;

var firstRow = sheet.GetRow(0);
for (int k = 0; k < columnLimit; k++)
{
var cell = firstRow.GetCell(k);
if (IsEndCell(cell)) break;
var header = ParseHeader(cell.ToString());
headers.Add(header);
}

for (var i = 1; i < rowLimit; i++)
{
var row = sheet.GetRow(i);
if (IsEndRow(row)) break;
var rowData = new List<string>();
rows.Add(rowData);
for (int j = 0; j < columnLimit; j++)
{
var cell = row.GetCell(j);
if (IsEndCell(cell)) break;
rowData.Add(cell.ToString());
}
}

return (headers, rows);
}
}

private (string columnName, string colomnDescription) ParseHeader(string rawHeader)
{
var regex = new Regex(@"^\s*([^()\(\)]+)(?:(|\()([^()\(\)]+)(?:)|\))\s*$");
var match = regex.Match(rawHeader);
var columnName = match.Groups[1].Value;
var columnDescription = match.Groups[2].Value;
if (string.IsNullOrEmpty(columnName) || string.IsNullOrEmpty(columnDescription))
{
throw new Exception($"header {rawHeader} invalid");
}
return (columnName.Trim(), columnDescription.Trim());
}

private bool IsEndRow(IRow row)
{

if (row?.Cells == null) return true;
if (!row.Cells.Any()) return true;
if (string.IsNullOrEmpty(row.Cells[0]?.ToString())) return true;
return false;
}

private bool IsEndCell(ICell cell)
{
return string.IsNullOrEmpty(cell?.ToString());
}

使用XSSFWorkbook 读取excel的更多相关文章

  1. java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

    经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定.其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx这里介绍的使用poi方式(XSSF ...

  2. poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算

    /** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @C ...

  3. java的poi技术读取Excel[2003-2007,2010]

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  4. C#读取Excel的三种方式以及比较

    (1)OleDB方式 优点:将Excel直接当做数据源处理,通过SQL直接读取内容,读取速度较快. 缺点:读取数据方式不够灵活,无法直接读取某一个单元格,只有将整个Sheet页读取出来后(结果为Dat ...

  5. NPOI操作excel之读取excel数据

    NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.  一.下载引用 去NPOI官网http://npoi.codeplex. ...

  6. Java Struts2读取Excel 2003/2007/2010例子

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版. Apache POI ...

  7. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  8. java 读取Excel文件并数据持久化方法Demo

    import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util ...

  9. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

随机推荐

  1. SqlServer数据库之给表添加序号

    简单给查询表添加序号 SELECT row_number() over(order by inserttime asc) as id,* FROM [RecordDrawScore]

  2. bat弹出确认或取消窗口

    需要在bat脚本里面弹出取消/确认框提示,可以用下面的案例: 示例: @echo off setlocal enabledelayedexpansion set Vbscript=Msgbox(&qu ...

  3. skipped obstructing working copy

    svn update时报错,处理方法,将报错的文件夹压缩备份一下,然后删除报错的文件夹,重新update即可.

  4. [TCP/IP] TCP第三次握手失败怎么办

    三次握手 客户端 ==> SYN是1同步 ,ACK确认标志是0,seq序号是x ==> 服务器 客户端 <== SYN是1同步 ,ACK确认标志是1,seq序号是y,ack确认号是x ...

  5. 关于Apache本地能访问外网不能访问的问题

    title: 关于Apache本地能访问外网不能访问的问题 date: 2018-08-05 19:22:12 tags: web --- 在配置apache和tomcat时,把它们都配置好,放到服务 ...

  6. CentOS 8 正式发布!

    CentOS 8 正式发布! CentOS 8 和 RedHat Enterprise Linux 8 发行的版本是一致的,都是基于 Fedora 28 和 内核 4.18.支持传统的.新兴的工作负载 ...

  7. Linux安装docker(ubuntu16.04和centos7.4)

    ubuntu16.04版本 1.安装依赖 sudo apt-get install apt-transport-https ca-certificates software-properties-co ...

  8. Pycharm工具使用和安装

    1.安装包:https://pan.baidu.com/s/1O9JwuowlodhTR1m0VaKmhg 2.双击安装包安装: 3.选择安装目录 4.安装选项,Create Associations ...

  9. Netty入门程序(四)

    maven创建project,引入依赖: <dependency> <groupId>io.netty</groupId> <artifactId>ne ...

  10. Java基础的容错

    新手会有一些常犯的过失,一般一个新手在学习Java开发的时分,往往会挑选买书去学习,首要这样的学习功率是非常差的,比如在学习html,css的时分,是彻底不必看书的.书里大多数东西你都不了解.这是新手 ...