GithubHelp home page GithubHelp logo

alibaba / easyexcel Goto Github PK

View Code? Open in Web Editor NEW
31.1K 595.0 7.4K 25.79 MB

快速、简洁、解决大文件内存溢出的java处理Excel工具

Home Page: https://easyexcel.opensource.alibaba.com

License: Apache License 2.0

Java 100.00%
excel poi jxl xls xlsx java oom

easyexcel's Issues

支持excel 模板吗?

例如:我有一个excel模板(很多格式之类的都在模板里面做), 然后用easyexcel 用调用这个模板吗?
然后向模板 写入数据 吗?

获得RowModel的全部字段,包括继承下来的字段

目前,从RowModel中获取字段的方式是使用getDeclaredFields,这会导致只能获取到该类的字段,获取不到从父类继承下来的字段。该代码位于/com/alibaba/excel/metadata/ExcelHeadProperty.java

/**
     * 初始化每列
     */
    private void initColumnProperties() {
        if (this.headClazz != null) {
            Field[] fields = this.headClazz.getDeclaredFields();
            List<List<String>> headList = new ArrayList<List<String>>();
            for (Field f : fields) {
                initOneColumnProperty(f);
            }
            //对列排序
            Collections.sort(columnPropertyList);
            if (head == null || head.size() == 0) {
                for (ExcelColumnProperty excelColumnProperty : columnPropertyList) {
                    headList.add(excelColumnProperty.getHead());
                }
                this.head = headList;
            }
        }
    }

有时会有一种需求,即根据用户输入的不同,输出字段有略微差异的表。比如,导出某公司所有员工的表时,根据操作用户的权限,部分员工(如人力资源部门的员工)可以看到工资字段,而其他员工看不到。这时,使用继承,将所有员工都可以看到的字段放到父类里面去,将特殊员工才能看到的字段放到子类里面,根据操作对象返回不同的类,是解决这一问题的一种方法。因此,获取父类继承下来的字段在有些时候是比较有用的。使用commons包里面的反射函数,可以很方便地获取到从父类继承下来的字段

用mac电脑新建的excel导入读取有问题

数据使用mac版本的office新建的excel,读取有问题,拿到windows系统也读取有问题。用windows系统创建的excel,在mac上读取无问题。

导入数据.xlsx

15:35:09.799 [main] INFO cn.com.service.ExcelService - 当前sheet:1 当前行:0 data:[姓名, xing'ming, 性别, ingbie, 职能, zhi'nneg, 手机, null, null, null, null, null, null, null, null, null, null, null, null, null]
15:35:09.806 [main] INFO cn.com.service.ExcelService - 当前sheet:1 当前行:1 data:[出生日期, shou'ji, 邮箱, you'xiang, chu'shegn'ri'qi, 固定电话, gu'ding'dian'hua, null, null, null, null, null, null, null, null, null, null, null, null, null]
15:35:09.807 [main] INFO cn.service.ExcelService - 当前sheet:1 当前行:2 data:[null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]


如何添加超链接?

如题,如何给某个cell添加超链接?
poi是可以的,如下代码所示:
cell = row.createCell(colNumber)。 cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("HYPERLINK(\"" + "Http://www.google.ca"+ "\",\"" + "Google Canada"+ "\")"); 或cell.setCellFormula("HYPERLINK(\"[workbook.xls]'sheet2'!A1\",\"homepage\")"); //HYPERLINK("#明细!A1","homepage")
我查看了一下源代码,好像没有把这个功能带过来,也就是没有实现。

关于Excel重复续写

我看ExcelBuilderImpl.addContent()方法里面有
int rowNum = this.context.getCurrentSheet().getLastRowNum();
这么一个方法,但是我读取已经保存好的Excel,结果rowNum还是从0开始,这个地方可以帮忙看下吗?
我这边的测试方法是,对同一个Excel,执行多次输出。

导入报数组越界

com.alibaba.excel.read.exception.ExcelAnalysisException: com.alibaba.excel.read.exception.ExcelAnalysisException: java.lang.IndexOutOfBoundsException: Index: 882, Size: 882 at com.alibaba.excel.read.SaxAnalyserV07.execute(SaxAnalyserV07.java:85) at com.alibaba.excel.read.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:51) at com.alibaba.excel.read.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:45) at com.alibaba.excel.ExcelReader.read(ExcelReader.java:64) at read.v07.Read2007Xlsx.withModelMultipleSheet(Read2007Xlsx.java:151) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) Caused by: com.alibaba.excel.read.exception.ExcelAnalysisException: java.lang.IndexOutOfBoundsException: Index: 882, Size: 882 at com.alibaba.excel.read.SaxAnalyserV07.parseXmlSource(SaxAnalyserV07.java:117) at com.alibaba.excel.read.SaxAnalyserV07.execute(SaxAnalyserV07.java:73) ... 26 more Caused by: java.lang.IndexOutOfBoundsException: Index: 882, Size: 882 at java.util.LinkedList.checkElementIndex(LinkedList.java:555) at java.util.LinkedList.get(LinkedList.java:476) at com.alibaba.excel.read.v07.RowHandler.endCellValue(RowHandler.java:111) at com.alibaba.excel.read.v07.RowHandler.endElement(RowHandler.java:131) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2967) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643) at com.alibaba.excel.read.v07.XmlParserFactory.parse(XmlParserFactory.java:28) at com.alibaba.excel.read.SaxAnalyserV07.parseXmlSource(SaxAnalyserV07.java:109) ... 27 more

按示例读取execl报错

电脑mac High Sierra,读取的是xlsx.

报错信息:

java.io.FileNotFoundException: /var/folders/4c/kjkl6r0s5qgglzswfzjkl6sh0000gn/T/easyexcel/-4268776904857236582/xl/worksheets/sheet3.xml (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at com.alibaba.excel.read.SaxAnalyserV07$1.startElement(SaxAnalyserV07.java:178)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1339)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
    at com.alibaba.excel.read.v07.XmlParserFactory.parse(XmlParserFactory.java:28)
    at com.alibaba.excel.read.SaxAnalyserV07.initSheetSourceList(SaxAnalyserV07.java:166)
    at com.alibaba.excel.read.SaxAnalyserV07.start(SaxAnalyserV07.java:151)
    at com.alibaba.excel.read.SaxAnalyserV07.<init>(SaxAnalyserV07.java:61)
    at com.alibaba.excel.read.ExcelAnalyserImpl.getSaxAnalyser(ExcelAnalyserImpl.java:28)
    at com.alibaba.excel.read.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:49)
    at com.alibaba.excel.ExcelReader.read(ExcelReader.java:55)

不允许模板中@ExcelProperty名字重复吗

首先感谢作者开源此工具。用起来确实很方便
刚编写的Issues不小心点了关闭,重新发下。
模板中这样写没问题

    @ExcelProperty(value = {"协议支付","本期新增客户数量"},index = 1)
    private String p2;

    @ExcelProperty(value = {"协议支付","本期减少客户数量"},index = 2)
    private int p3;

    @ExcelProperty(value = {"协议支付","本期净增客户数量"},index = 3)
    private long p4;

    @ExcelProperty(value = {"协议支付","累计签约客户数量"},index = 4)
    private String p5;

    @ExcelProperty(value = {"商业委托支付","上期末存量客户数量1"},index = 5)
    private String p6;

    @ExcelProperty(value = {"商业委托支付","本期新增客户数量1"},index = 6)
    private String p7;

    @ExcelProperty(value = {"商业委托支付","本期减少客户数量1"},index = 7)
    private String p8;

    @ExcelProperty(value = {"商业委托支付","本期净增客户数量1"},index = 8)
    private String p9;

    @ExcelProperty(value = {"商业委托支付","累计签约客户数量1"},index = 9)
    private String p10;

但是这样写就报错

    @ExcelProperty(value = {"协议支付","本期新增客户数量"},index = 1)
    private String p2;

    @ExcelProperty(value = {"协议支付","本期减少客户数量"},index = 2)
    private int p3;

    @ExcelProperty(value = {"协议支付","本期净增客户数量"},index = 3)
    private long p4;

    @ExcelProperty(value = {"协议支付","累计签约客户数量"},index = 4)
    private String p5;

    @ExcelProperty(value = {"商业委托支付","上期末存量客户数量"},index = 5)
    private String p6;

    @ExcelProperty(value = {"商业委托支付","本期新增客户数量"},index = 6)
    private String p7;

    @ExcelProperty(value = {"商业委托支付","本期减少客户数量"},index = 7)
    private String p8;

    @ExcelProperty(value = {"商业委托支付","本期净增客户数量"},index = 8)
    private String p9;

    @ExcelProperty(value = {"商业委托支付","累计签约客户数量"},index = 9)
    private String p10;

错误信息:

java.lang.IllegalStateException: Cannot add merged region B2:G2 to sheet because it overlaps with an existing merged region (A2:F2).
	at org.apache.poi.xssf.usermodel.XSSFSheet.validateMergedRegions(XSSFSheet.java:432)
	at org.apache.poi.xssf.usermodel.XSSFSheet.addMergedRegion(XSSFSheet.java:369)
	at org.apache.poi.xssf.usermodel.XSSFSheet.addMergedRegion(XSSFSheet.java:323)
	at org.apache.poi.xssf.streaming.SXSSFSheet.addMergedRegion(SXSSFSheet.java:390)
	at com.alibaba.excel.write.context.GenerateContextImpl.appendHeadToExcel(GenerateContextImpl.java:122)
	at com.alibaba.excel.write.context.GenerateContextImpl.buildCurrentSheet(GenerateContextImpl.java:101)
	at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:52)
	at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:52)
	at function.write.ExcelWriteIndexTest.testDaTong(ExcelWriteIndexTest.java:129)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

如果必须不能重复,是否可以考虑引入Alias,毕竟名字重复列很正常,或者说我用的不对,烦请说明。

读取excel依旧会产生OOM

读取一个50几M的excel文件(这个文件也是用easyexcel生成的),在执行read方法时,还是会产生OOM

解析效率越来越慢是什么原因呢

首先说明一下;
字段比较多,30个多,excel文件12w行多;基本都是String类型,部分String还是特别长那种。

CurrentName:workbook
CurrentName:fileVersion
CurrentName:workbookPr
CurrentName:mc:AlternateContent
CurrentName:mc:Choice
CurrentName:x15ac:absPath
CurrentName:bookViews
CurrentName:workbookView
CurrentName:sheets
CurrentName:3
CurrentName:name
CurrentName:sheetId
CurrentName:r:id
CurrentName:calcPr
CurrentName:extLst
CurrentName:ext
CurrentName:x15:workbookPr
09:46:01.038,当前行:1000
09:46:01.647,当前行:2000
09:46:02.506,当前行:3000
09:46:03.691,当前行:4000
09:46:05.174,当前行:5000 时差 5秒内

09:46:06.969,当前行:6000
09:46:09.326,当前行:7000
09:46:12.556,当前行:8000
09:46:17.643,当前行:9000
09:46:25.334,当前行:10000 时差20秒;

09:46:33.416,当前行:11000
09:46:42.668,当前行:12000
09:46:53.480,当前行:13000
09:47:07.068,当前行:14000
09:47:21.796,当前行:15000,耗时接近60秒

09:47:37.288,当前行:16000
09:47:54.542,当前行:17000
09:48:13.341,当前行:18000
09:48:34.387,当前行:19000
09:48:58.630,当前行:20000 时差接近90秒

09:49:27.398,当前行:21000
09:49:57.990,当前行:22000
09:50:28.021,当前行:23000
09:51:00.486,当前行:24000
09:51:34.667,当前行:25000 时差 90秒

09:52:09.690,当前行:26000
09:52:44.884,当前行:27000
09:53:20.641,当前行:28000
09:53:59.985,当前行:29000
09:53:59.985,当前行:29000
09:54:41.963,当前行:30000 时差 180多秒,

09:55:25.776,当前行:31000
09:56:08.334,当前行:32000
09:57:02.900,当前行:33000
09:57:58.525,当前行:34000
09:58:56.699,当前行:35000 时差250秒,4分多’

效率承递减递减,逐级递减,

不允许模板中@ExcelProperty名字重复吗

首先感谢作者开源此工具。用起来确实很方便
模板中这样写没问题

    @ExcelProperty(value = {"协议支付","本期新增客户数量"},index = 1)
    private String p2;

    @ExcelProperty(value = {"协议支付","本期减少客户数量"},index = 2)
    private int p3;

    @ExcelProperty(value = {"协议支付","本期净增客户数量"},index = 3)
    private long p4;

    @ExcelProperty(value = {"协议支付","累计签约客户数量"},index = 4)
    private String p5;

    @ExcelProperty(value = {"商业委托支付","上期末存量客户数量1"},index = 5)
    private String p6;

    @ExcelProperty(value = {"商业委托支付","本期新增客户数量1"},index = 6)
    private String p7;

    @ExcelProperty(value = {"商业委托支付","本期减少客户数量1"},index = 7)
    private String p8;

    @ExcelProperty(value = {"商业委托支付","本期净增客户数量1"},index = 8)
    private String p9;

    @ExcelProperty(value = {"商业委托支付","累计签约客户数量1"},index = 9)
    private String p10;

但是这样写就报错

    @ExcelProperty(value = {"协议支付","本期新增客户数量"},index = 1)
    private String p2;

    @ExcelProperty(value = {"协议支付","本期减少客户数量"},index = 2)
    private int p3;

    @ExcelProperty(value = {"协议支付","本期净增客户数量"},index = 3)
    private long p4;

    @ExcelProperty(value = {"协议支付","累计签约客户数量"},index = 4)
    private String p5;

    @ExcelProperty(value = {"商业委托支付","上期末存量客户数量"},index = 5)
    private String p6;

    @ExcelProperty(value = {"商业委托支付","本期新增客户数量"},index = 6)
    private String p7;

    @ExcelProperty(value = {"商业委托支付","本期减少客户数量"},index = 7)
    private String p8;

    @ExcelProperty(value = {"商业委托支付","本期净增客户数量"},index = 8)
    private String p9;

    @ExcelProperty(value = {"商业委托支付","累计签约客户数量"},index = 9)
    private String p10;

错误信息:

java.lang.IllegalStateException: Cannot add merged region B2:G2 to sheet because it overlaps with an existing merged region (A2:F2).
	at org.apache.poi.xssf.usermodel.XSSFSheet.validateMergedRegions(XSSFSheet.java:432)
	at org.apache.poi.xssf.usermodel.XSSFSheet.addMergedRegion(XSSFSheet.java:369)
	at org.apache.poi.xssf.usermodel.XSSFSheet.addMergedRegion(XSSFSheet.java:323)
	at org.apache.poi.xssf.streaming.SXSSFSheet.addMergedRegion(SXSSFSheet.java:390)
	at com.alibaba.excel.write.context.GenerateContextImpl.appendHeadToExcel(GenerateContextImpl.java:122)
	at com.alibaba.excel.write.context.GenerateContextImpl.buildCurrentSheet(GenerateContextImpl.java:101)
	at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:52)
	at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:52)
	at function.write.ExcelWriteIndexTest.testDaTong(ExcelWriteIndexTest.java:129)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

easyexcel 导出的excel 导入报错

用easyexcel导出的excel,再导入时报错:java.io.FileNotFoundException: D:\apache-tomcat-8.0.36\temp\easyexcel-4014190947417093486\xl\worksheets\sheet3.xml (系统找不到指定的文件。)
明明应该是sheet1的,这里的workbook.xml里面的sheet中的r:id会变成rId3

读取.xlsx文件出错,找不到sharedString.xml文件

qq20180814-225547 2x

我用的是mac系统,把官方的例子拷贝过来执行,报下面的错误,莫名其妙,我也不知道错误中那个文件为什么找不到,这个文件不是我的,应该是执行过程中生成的文件。
java.io.FileNotFoundException: /var/folders/p4/ytdlw57579d6tf7fndxzj84r0000gn/T/easyexcel/-4992373293564731499/xl/sharedStrings.xml (No such file or directory) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(FileInputStream.java:195) at java.io.FileInputStream.<init>(FileInputStream.java:138) at java.io.FileInputStream.<init>(FileInputStream.java:93) at com.alibaba.excel.read.SaxAnalyserV07.initSharedStringsTable(SaxAnalyserV07.java:221) at com.alibaba.excel.read.SaxAnalyserV07.start(SaxAnalyserV07.java:158) at com.alibaba.excel.read.SaxAnalyserV07.<init>(SaxAnalyserV07.java:61) at com.alibaba.excel.read.ExcelAnalyserImpl.getSaxAnalyser(ExcelAnalyserImpl.java:28) at com.alibaba.excel.read.ExcelAnalyserImpl.analysis(ExcelAnalyserImpl.java:49) at com.alibaba.excel.ExcelReader.read(ExcelReader.java:55)

能用超链接吗

你好,我想请问下,支持超链接吗?如果支持 我应该怎么加入

读取 Excel 的速度会越来越慢

读取一个有 10W+ 数据的 Excel 文件,前 5000 条很快,之后速度逐渐变慢,读到几万条的时候速度已经非常非常慢,没办法处理数据量大的文件

获取多sheet页的排序貌似也有问题

下面代码的是要把list的倒叙排???如果不是要倒叙排是不是直接用链表就可以了。。。。

`
private class SheetSource implements Comparable {

    private int id;

    private String sheetName;

    private InputStream inputStream;

    public SheetSource(int id, String sheetName, InputStream inputStream) {
        this.id = id;
        this.sheetName = sheetName;
        this.inputStream = inputStream;
    }

    public String getSheetName() {
        return sheetName;
    }

    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int compareTo(SheetSource o) {
        if (o.id == this.id) {
            return 0;
        } else if (o.id > this.id) {
            return 1;
        } else {
            return -1;
        }
    }
}

`

解析07版excels文件时,使用getLocalName无法获得实际名称,建议getQName双保险

SaxAnalyserV07.java 行,代码行170左右;
if (qName.toLowerCase(Locale.US).equals("sheet")) {
String name = null;
int id = 0;
for (int i = 0; i < attrs.getLength(); i++) {
if (attrs.getLocalName(i).toLowerCase(Locale.US).equals("name")) {// 此处LocalName.执行失效、getQName 生效;
name = attrs.getValue(i);
} else if (attrs.getLocalName(i).toLowerCase(Locale.US).equals("r:id")) {
id = Integer.parseInt(attrs.getValue(i).replaceAll("rId", ""));
try {
InputStream inputStream = new FileInputStream(XMLTempFile.getSheetFilePath(path, id));
sheetSourceList.add(new SheetSource(id, name, inputStream));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

Excel 07 读取结束时临时目录没有删除

ExcelReader调用finish时,删除临时文件成功,临时目录也应该需要删除吧,
具体代码如下

com.alibaba.excel.util.FileUtil

`
public static void deletefile(String delpath) {

    File file = new File(delpath);

    if (!file.isDirectory()) {

        file.delete();

    } else if (file.isDirectory()) {

        String[] filelist = file.list();

        for (int i = 0; i < filelist.length; i++) {

            File delfile = new File(delpath + File.separator + filelist[i]);

            if (!delfile.isDirectory()) {

                delfile.delete();

            } else if (delfile.isDirectory()) {

                deletefile(delpath + File.separator + filelist[i]);

            }

        }
     // 这里是否需要加一个
        file.delete
    }

}

`

50w大量数据导出支持么

使用easyexcel 导出几十万w量级的数据 ,多批次写达到一定量级会自动刷入么? 像 SXSSF实现了一套自动刷入数据的机制 有么。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.