excel 大文件解析原理实现

问题

目前的excel 不像之前的excel了可以支持的数据量更大,可以支持支持1048576行,16384列。

之前使用poi读取,直接报错,使用excel 事件的方式读取,还有不少的bug,关键是程序写的很复杂。

解决方案

我们知道excel 文件实际上是一个压缩包来的,我们将excel 直接改名为rar或zip文件。

我们可以将文件解压出来。

我们可以看到excel 实际上是一堆xml文件的集合。

worksheets 中实际存了 这个excel的sheets数据。

但是excel 在存数据的时候,他会将字符串数据存在在sharedString.xml 文件中。

sharedString.xml 文件数据如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst
    xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="6" uniqueCount="4">
    <si>
        <t>guangzhou</t>
    </si>
    <si>
        <t>beijing</t>
    </si>
    <si>
        <t>hujun</t>
    </si>
    <si>
        <t>c</t>
    </si>
</sst>

这个数据存放了字符串的数据。

我们看xml文件可以得知。

这里0,1,2,3 存的是 sharedString.xml 字符串的下标。

数字和日期型数据是直接存放在sheets 数据中的。

日期型数据的存储有些特殊

比如这个 他的日期实际是 2019-5-29日,这个是怎么计算的呢,他实际是从1900-0-0 开始加上43614天。

因此 明白了excel的结构 ,我们就很容易去实现读excel的代码,可以绕开poi哪些api。

直接读取xml。

实现思路

1.将文件解压。

2.读取sharedString.xml 将数据读取到list列表。

3.读取sheet.xml文件数据,遍历这个数据,将字符串的数据,去上面的列表中查找,其他类型的数据直接在sheet.xml 中读取。

原文地址:https://www.cnblogs.com/yg_zhang/p/10946943.html

时间: 2024-11-09 09:54:25

excel 大文件解析原理实现的相关文章

NSXMLParser(SAX解析)大文件解析

NSXMLParser(SAX解析)大文件解析 - (void)viewDidLoad { [ { [super viewDidLoad]; // 1.创建URL NSURL *url = HMUrl(@"video?type=XML"); // 2.创建请求 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 3.发送请求 [NSURLConnection sendAsynchronousRequest:requ

Android多线程下载大文件解析

1.多线程介绍 用过迅雷的同学都知道.迅雷有个功能叫做多线程.另一个叫离线下载,我们这里重点介绍一下多线程下载.多线程,顾名思义就是非常多歌线程同一时候在执行,为什么要提出多线程这个概念呢?由于有时候一个线程下载太慢了.举个样例,比方小时候常做的数学题,一个人挖沟须要15天,那么两个人对着挖呢? 当然数学题上面两个人的效率是不一样的,我们这里把这个问题简化了一下.仅仅是想大家明确,什么是多线程,为什么有多线程. 在多线程上出现过一个问题,为什么有要提出多线程?事实上提出多线程是为了充分利用CPU

java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) exce

产品需求 产品经理需要导出一个页面的所有的信息到 EXCEL 文件. 需求分析 对于 excel 导出,是一个很常见的需求. 最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件. 客户体验 & 服务性能 客户体验 如果导出的文件比较大,比如几十万条数据,同步导出页面就会卡主,用户无法进行其他操作. 服务性能 导出的时候,任务比较耗时就会阻塞主线程. 如果导出的服务是暴露给外部(前后端分离),这种大量的数据传输十分消耗性能. 解决方案 使用异常处理导出请求,后台 MQ 通知自己进

java 导出 excel 最佳实践,大文件 excel 避免OOM(内存溢出) 框架-02-API

项目简介 IExcel 用于优雅地读取和写入 excel. 避免大 excel 出现 oom,简约而不简单.. 特性 OO 的方式操作 excel,编程更加方便优雅. sax 模式读取,SXSS 模式写入.避免 excel 大文件 OOM. 基于注解,编程更加灵活. 写入可以基于对象列表,也可以基于 Map,实际使用更加方便. 设计简单,注释完整.方便大家学习改造. 变更日志 变更日志 v0.0.4 主要变化 引入 ExcelBs 引导类,优化使用体验. 创作缘由 实际工作和学习中,apache

C#大文件的拷贝

大文件拷贝原理:向内存申请1M空间,反复从源文件读取1M内容写入到目标文件,直到读完. 1 private void CopyBigFile() 2 { 3 string originalPath = @"E:\AdvanceCSharpProject\LearnCSharp\21.zip"; 4 string destPath = @"F:\BaiduNetdiskDownload\21.zip"; 5 //定义读文件流 6 using (FileStream f

Atitit。Tree文件解析器的原理流程与设计实现&#160;&#160;java&#160;&#160;c#&#160;php&#160;js

Atitit.Tree文件解析器的原理流程与设计实现  java  c# php js 1. 解析原理与流程1 1.1. 判断目录  ,表示服  dirFlagChar = "└├─";1 1.2. 剑豪制表符出现的位置与文件夹级别对应表1 1.3. 主要判读流程2 2. Tree结果2 3. Code----3 4. 结果5 1. 解析原理与流程 1.1. 判断目录  ,表示服  dirFlagChar = "└├─"; 其中-类似于剑豪的制表符是表示目录的..够

基于简单sql语句的sql解析原理及在大数据中的应用

李万鸿 通常sql语法解析都是以lex.yacc进行分析为基础的,是逐个字符进行分析,性能不高,如果基于没有子查询的sql语句进行解析,则速度会提高许多,在此对其原理加以说明. 一般sql语句十分复杂,包含多层嵌套,但其中有规律可循,其特点是所有的语句基本模式是一样的,即:都是SELECT  FROM  WHERE类型的简单语句,因此,可以把嵌套的语句逐条解析为这种简单语句.由于sql语句的语法是一样的,所以可以用递归的方法对语句加以解析,从而把sql语句解析为多条简单的子SQL语句.然后通过一

JS-XLS/X读取和解析Excel表格文件(xls/xlsx)的JavaScript插件

最近有一个要求,我的一个项目中解析Excel文件(与xls/xlsx扩展)在浏览器(使用JavaScript当然).所以我在网上看了一下,发现了这2个有用的库: js-xls js-xlsx 让我们看看他们是如何工作的. 兼容性 支持读取文件格式 Excel 2007+ XML Formats (XLSX/XLSM) Excel 2007+ Binary Format (XLSB) Excel 2003-2004 XML Format (XML "SpreadsheetML") Exc

EXCEL与CSV文件解析工具

package com.common.util; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.