工作中用到 使用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. Windows | Ubuntu 18.04安装Visual Studio Code

    Visual  Studio Code是一款很好的开源跨平台代码编辑器,这里使用 tarball 格式文件来安装(免安装), 首先下载 .tar.gz 文件包,点击下载, 可自行在官网下载 将文件包解 ...

  2. P3731 [HAOI2017]新型城市化(tarjan+网络流)

    洛谷 题意: 给出两个最大团的补图,现在要求增加一条边,使得最大最大团个数增加至少\(1\). 思路: 我们求出团的补图,问题可以转换为:对于一个二分图,选择删掉一条边,能够增大其最大独立集的点集数. ...

  3. XSS小游戏

    第一关 直接在URL输入 ?name=<script>alert('xss')</script> 第二关 找源码,输入test,value值变为test,我们可以在输入框尝试x ...

  4. 20180711模拟赛T3——聚变

    文件名: fusion 题目类型: 传统题 时间限制: 3秒 内存限制: 256MB 编译优化: 无 题目描述 知名科学家小A在2118年在计算机上实现了模拟聚变的过程. 我们将她研究的过程简化. 核 ...

  5. C++使用OpenCV保存和读取XML

    代码 // save xml file cv::FileStorage file(save_transform, cv::FileStorage::WRITE); cv::Mat TransM = c ...

  6. Python进阶-XIII 导入模块和包 异常处理

    一.模块的导入 1).import # 测试一:money与my_module.money不冲突 import my_module money=10 print(my_module.money) '' ...

  7. Spring 中的异常处理

    工作中遇到这样的同事,问他活干完吗,他说开发好了,结果测试时发现各种异常情况未处理,联调测试时各种未知错误,最后联调完成比他预期的两倍工作量还多.这样的开发如果是新人还可以原谅,如果有工作经验且出现多 ...

  8. About me & 友链

    窝是图图小淘气 面对世界很好奇 啊呸 抱歉 拿错咧 重来 是他!是他!就是他! 我们滴朋友哦小哪吒! (汗 又拿错咧 菜鸡yxj 是来自美丽富饶的SDGR 的一名高中生 每天最喜欢做的事就是 花式被机 ...

  9. java导出标题多行且合并单元格的EXCEL

    场景:项目中遇到有需要导出Excel的需求,并且是多行标题且有合并单元格的,参考网上的文章,加上自己的理解,封装成了可自由扩展的导出工具 先上效果,再贴代码: 调用工具类进行导出: public st ...

  10. loj 2719 「NOI2018」冒泡排序 - 组合数学

    题目传送门 传送门 题目大意 (相信大家都知道) 显然要考虑一个排列$p$合法的充要条件. 考虑这样一个构造$p$的过程.设排列$p^{-1}_{i}$满足$p_{p^{-1}_i} = i$. 初始 ...