java读取excel之xlsl超大文件


数据量小的,可以使用普通api来做, 但是当数据量非常大时,普通的就不行了,不过我的这个代码可以完美解决此问题
资源截图
代码片段和文件信息
package com.askingdata.excel.util;

import java.io.File;
import java.util.ArrayList;
import java.util.linkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Cellstyle;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtil {

/**
 * 读取xlsx文件,不适用于读取大文件
 */
public static List> read(String filePath) throws Exception {
List> result = new ArrayList<>();
Workbook wb = new XSSFWorkbook(new File(filePath));
for (Sheet sheet : wb) {
for (Row row : sheet) {
List rowData = getRowData(row);
result.add(rowData);
}
}
wb.close();
return result;
}

/**
 * 读取xlsx文件,不适用于读取大文件
 * 
 * @return map: key->sheet name value->rowData
 */
public static Map>> readMultiSheet(String filePath)
throws Exception {
Map>> result = new linkedHashMap<>();
Workbook wb = new XSSFWorkbook(new File(filePath));
for (Sheet sheet : wb) {
List> sheetResult = new ArrayList<>();
for (Row row : sheet) {
List rowData = getRowData(row);
sheetResult.add(rowData);
}
result.put(sheet.getSheetName() sheetResult);
}
wb.close();
return result;
}

/**
 * 以SAX方式读取xlsx文件,读取后将结果全部加载到内存,适用于读取较大文件
 * 
 * @param filePath
 *            文件路径
 * @param minColumns
 *            补齐到多少列,-1表示不补齐
 */
public static Listject>> readBigFile(String filePath int minColumns)
throws Exception {
File xlsxFile = new File(filePath);
OPCPackage p = OPCPackage.open(xlsxFile.getPath() PackageAccess.READ);
Xlsx2ListData xlsx2ListData = new Xlsx2ListData(p minColumns null);
Listject>> result = xlsx2ListData.process();
p.close();
return result;
}

/**
 * 以SAX方式读取xlsx文件,读取每一行调用RowDataProcesser,适用于读超大文件
 * 
 * @param filePath
 *            文件路径
 * @param minColumns
 *            补齐到多少列,-1表示不补齐
 * @param rowDataProcesser
 *            处理每一行的数据
 */
public static void readBigFile(String filePath int minColumns
RowDataProcesser rowDataProcesser) throws Exception {
File xlsxFile = new File(filePath);
OPCPackage p = OPCPackage.open(xlsxFile.getPath() PackageAccess.READ);
Xlsx2ListData xlsx2ListData = new Xlsx2ListData(p minColumns
rowDataProcesser);
xlsx2ListData.process();
p.close();
}

private static List getRowData(Row row) {
List rowData = new ArrayList<>();
int cellNum = row.getLastCellNum();
for (int i = 0; i < cellNum; i++) {
Cell cell = row.getCell(i);
if (cell == null) {
rowData.add

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-08-18 17:52  ExcelUtil
     文件         737  2016-07-30 14:36  ExcelUtil.classpath
     文件         368  2016-07-30 13:51  ExcelUtil.project
     目录           0  2016-08-18 17:52  ExcelUtil.settings
     文件          57  2016-07-30 14:16  ExcelUtil.settingsorg.eclipse.core.resources.prefs
     文件         587  2016-07-12 11:04  ExcelUtil.settingsorg.eclipse.jdt.core.prefs
     目录           0  2016-08-18 17:52  ExcelUtilin
     目录           0  2016-08-18 17:52  ExcelUtilincom
     目录           0  2016-08-18 17:52  ExcelUtilincomaskingdata
     目录           0  2016-08-18 17:52  ExcelUtilincomaskingdataexcel
     目录           0  2016-08-18 17:52  ExcelUtilincomaskingdataexcelutil
     文件        5234  2016-08-16 14:37  ExcelUtilincomaskingdataexcelutilExcelUtil.class
     文件        2355  2016-08-17 19:21  ExcelUtilincomaskingdataexcelutilMain$1.class
     文件        5833  2016-08-17 19:21  ExcelUtilincomaskingdataexcelutilMain.class
     文件        1417  2016-08-17 19:18  ExcelUtilincomaskingdataexcelutilMain2$1.class
     文件        6099  2016-08-17 19:18  ExcelUtilincomaskingdataexcelutilMain2.class
     文件         248  2016-08-12 16:04  ExcelUtilincomaskingdataexcelutilRowDataProcesser.class
     文件        3583  2016-08-12 16:04  ExcelUtilincomaskingdataexcelutilXlsx2ListData$SheetToList.class
     文件        4953  2016-08-12 16:04  ExcelUtilincomaskingdataexcelutilXlsx2ListData.class
     目录           0  2016-08-18 17:52  ExcelUtilin est
     文件        2654  2016-08-18 16:38  ExcelUtilin estHufan.class
     文件        1488  2016-08-12 16:04  ExcelUtilin estMain$1.class
     文件         675  2016-08-12 16:04  ExcelUtilin estMain.class
     目录           0  2016-08-18 17:53  ExcelUtildoc
     目录           0  2016-08-18 17:52  ExcelUtillib
     文件      185140  2016-05-21 18:07  ExcelUtillibcommons-io-2.4.jar
     文件      398520  2016-04-16 20:08  ExcelUtillibmongo-2.10.1.jar
     文件     2528204  2016-07-12 12:27  ExcelUtillibpoi-3.14-20160307.jar
     文件     1286511  2016-07-12 12:36  ExcelUtillibpoi-ooxml-3.14-20160307.jar
     文件     5919795  2016-07-12 12:48  ExcelUtillibpoi-ooxml-schemas-3.14-20160307.jar
     文件     1367760  2016-07-30 11:16  ExcelUtillibxercesImpl.jar
............此处省略16个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)