使用XSSFWorkbook 读取excel
工作中用到 使用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的更多相关文章
- java使用poi(XSSFWorkbook)读取excel(.xlsx)文件
		经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定.其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx这里介绍的使用poi方式(XSSF ... 
- poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算
		/** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @C ... 
- java的poi技术读取Excel[2003-2007,2010]
		这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ... 
- C#读取Excel的三种方式以及比较
		(1)OleDB方式 优点:将Excel直接当做数据源处理,通过SQL直接读取内容,读取速度较快. 缺点:读取数据方式不够灵活,无法直接读取某一个单元格,只有将整个Sheet页读取出来后(结果为Dat ... 
- NPOI操作excel之读取excel数据
		NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 一.下载引用 去NPOI官网http://npoi.codeplex. ... 
- Java Struts2读取Excel 2003/2007/2010例子
		Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版. Apache POI ... 
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
		使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ... 
- java 读取Excel文件并数据持久化方法Demo
		import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util ... 
- JAVA使用POI读取EXCEL文件的简单model
		一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ... 
随机推荐
- python简单日志处理
			简单日志处理 import datetime import re logfile='''58.61.164.141 - - [22/Feb/2010:09:51:46 +0800] "GET ... 
- Shel脚本-初步入门之《02》
			Shel脚本-初步入门-什么是 Shell 脚本 2.什么是 Shell脚本 当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,改程序就被称为 Shell 脚本.如果在 Shell 脚本 ... 
- Skyshop.代码解析
			MarmosetInput.cginc: Input结构定义: struct Input { #if defined(MARMO_PACKED_UV) || defined(MARMO_PACKED_ ... 
- Highways POJ - 1751
			题目链接:https://vjudge.net/problem/POJ-1751 思路: 最小生成树板子,只需要多记录每个dis[x]的权值是从哪个点到x这个点的. #include <stdi ... 
- 笔记13:Python 和 Elasticsearch 构建简易搜索
			Python 和 Elasticsearch 构建简易搜索 1 ES基本介绍 概念介绍 Elasticsearch是一个基于Lucene库的搜索引擎.它提供了一个分布式.支持多租户的全文搜索引擎,它可 ... 
- Rust中的枚举及模式匹配
			这个enum的用法,比c要强,和GO类似. enum Coin { Penny, Nickel, Dime, Quarter, } fn value_in_cents(coin: Coin) -> ... 
- CF704D Captain America(上下界网络流)
			传送门 题意: 二维平面给出\(n\)个点,现在可以给每个点进行染色,染红色的代价为\(r\),染蓝色的代价为\(b\). 之后会有\(m\)个限制,形式如:\(t_i\ l_i\ d_i\),当\( ... 
- 201777010217-金云馨《面向对象程序设计(java)》第十四周学习总结
			项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu ... 
- 201871010117--石欣钰--《面向对象程序设计(java)》第十六周学习总结
			博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个作业的要求在哪里 https://www.cnblogs.com ... 
- 201871010134-周英杰《面向对象程序设计(java)》第十六周学习总结
			项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ... 
