工作中用到 使用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. Scrum冲刺博客

    一.各个成员在Alpha阶段认领的任务 已完成 二.各个成员的任务安排 三.整个项目期的任务量 按实际考试情况以及开发情况决定,初始计划是完成登录以及个人目标版块的完整功能,其它版块共进,保证最终能够 ...

  2. Codeforces 1278F: Cards

    题目传送门:CF1278F. 题意简述: 有 \(n\) 个独立随机变量 \(x_i\),每个随机变量都有 \(p = 1/m\) 的概率取 \(1\),有 \((1-p)\) 的概率取 \(0\). ...

  3. seq命令的使用

    标题:seq命令的使用 作用:seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式.宽度.分割符号进行控制 语法: [1] seq [选项] ...

  4. USACO Cow Contest

    洛谷 P2419 [USACO08JAN]牛大赛Cow Contest https://www.luogu.org/problemnew/show/P2419 JDOJ 2554: USACO 200 ...

  5. 0x00 Wechall writeup

    目录 0x00 Wechall writeup Training: Get Sourced Training: ASCII Encodings: URL Training: Stegano I Tra ...

  6. [RN] React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题

    React Native FlatList 选中后 状态没有立即发生改变,而在下一次生效的问题 解决关键: 给 FlatList 添加 extraData={this.state} 非常关键,如果不设 ...

  7. 11/11 <Topological Sort> 207

    207. Course Schedule 我们定义二维数组 graph 来表示这个有向图,一维数组 in 来表示每个顶点的入度.我们开始先根据输入来建立这个有向图,并将入度数组也初始化好.然后我们定义 ...

  8. Graphviz学习

    (入门教程)[https://www.luogu.com.cn/blog/umr/graphviz]

  9. python读写、创建文件、文件夹等等

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  10. [LeetCode] 32. Longest Valid Parentheses 最长有效括号

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...