From 79319056cdaf5bfe7b6cb7fcd85b7d2e333e6945 Mon Sep 17 00:00:00 2001 From: Echen Date: Wed, 11 Nov 2020 15:14:15 +0800 Subject: [PATCH 1/2] =?UTF-8?q?03=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E7=BB=A7=E7=BB=AD=E8=A7=A3=E6=9E=90Cell?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/analysis/v03/handlers/AbstractXlsRecordHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java b/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java index 93b3d1a..6bab1cd 100644 --- a/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v03/handlers/AbstractXlsRecordHandler.java @@ -14,6 +14,6 @@ public abstract class AbstractXlsRecordHandler implements XlsRecordHandler { @Override public boolean support(XlsReadContext xlsReadContext, Record record) { - return true; + return xlsReadContext.readWorkbookHolder().getParseCell(); } } From 53c60d6b96f163f5d4dd9571a676f0374e191733 Mon Sep 17 00:00:00 2001 From: Echen Date: Thu, 3 Jun 2021 13:58:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=87=B32.2.10=20=E4=BF=AE=E5=A4=8D=E7=89=B9=E6=AE=8Aexcel?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../handlers/AbstractCellValueTagHandler.java | 12 ++- .../v07/handlers/CellValueTagHandler.java | 5 ++ .../string/StringNumberConverter.java | 2 +- .../excel/metadata/format/DataFormatter.java | 84 +++++++++++++++--- .../excel/util/NumberDataFormatterUtils.java | 4 +- .../test/core/dataformat/DateFormatTest.java | 23 ++++- .../test/core/encrypt/EncryptDataTest.java | 23 +++-- .../easyexcel/test/temp/Lock2Test.java | 5 +- .../alibaba/easyexcel/test/temp/LockTest.java | 6 +- src/test/resources/dataformat/dataformat.xls | Bin 26112 -> 28672 bytes src/test/resources/dataformat/dataformat.xlsx | Bin 11746 -> 12460 bytes update.md | 12 +++ 13 files changed, 145 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index 831caff..9f1a4c7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.alibaba easyexcel - 2.2.6 + 2.2.10 jar easyexcel diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java b/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java index 3521e46..580e670 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v07/handlers/AbstractCellValueTagHandler.java @@ -7,6 +7,7 @@ import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder; import com.alibaba.excel.util.BooleanUtils; +import com.alibaba.excel.util.StringUtils; /** * Cell Value Handler @@ -20,6 +21,7 @@ public abstract class AbstractCellValueTagHandler extends AbstractXlsxTagHandler XlsxReadSheetHolder xlsxReadSheetHolder = xlsxReadContext.xlsxReadSheetHolder(); CellData tempCellData = xlsxReadSheetHolder.getTempCellData(); StringBuilder tempData = xlsxReadSheetHolder.getTempData(); + String tempDataString = tempData.toString(); CellDataTypeEnum oldType = tempCellData.getType(); switch (oldType) { case DIRECT_STRING: @@ -28,12 +30,20 @@ public abstract class AbstractCellValueTagHandler extends AbstractXlsxTagHandler tempCellData.setStringValue(tempData.toString()); break; case BOOLEAN: + if(StringUtils.isEmpty(tempDataString)){ + tempCellData.setType(CellDataTypeEnum.EMPTY); + break; + } tempCellData.setBooleanValue(BooleanUtils.valueOf(tempData.toString())); break; case NUMBER: case EMPTY: + if(StringUtils.isEmpty(tempDataString)){ + tempCellData.setType(CellDataTypeEnum.EMPTY); + break; + } tempCellData.setType(CellDataTypeEnum.NUMBER); - tempCellData.setNumberValue(new BigDecimal(tempData.toString())); + tempCellData.setNumberValue(BigDecimal.valueOf(Double.parseDouble(tempDataString))); break; default: throw new IllegalStateException("Cannot set values now"); diff --git a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java b/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java index 09c9264..7e685c9 100644 --- a/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java +++ b/src/main/java/com/alibaba/excel/analysis/v07/handlers/CellValueTagHandler.java @@ -3,6 +3,7 @@ package com.alibaba.excel.analysis.v07.handlers; import com.alibaba.excel.context.xlsx.XlsxReadContext; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.util.StringUtils; /** * Cell Value Handler @@ -17,6 +18,10 @@ public class CellValueTagHandler extends AbstractCellValueTagHandler { CellData tempCellData = xlsxReadContext.xlsxReadSheetHolder().getTempCellData(); switch (tempCellData.getType()) { case STRING: + // In some cases, although cell type is a string, it may be an empty tag + if(StringUtils.isEmpty(tempCellData.getStringValue())){ + break; + } String stringValue = xlsxReadContext.readWorkbookHolder().getReadCache() .get(Integer.valueOf(tempCellData.getStringValue())); if (stringValue != null && xlsxReadContext.currentReadHolder().globalConfiguration().getAutoTrim()) { diff --git a/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java b/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java index b31bc70..693c112 100644 --- a/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java +++ b/src/main/java/com/alibaba/excel/converters/string/StringNumberConverter.java @@ -47,7 +47,7 @@ public class StringNumberConverter implements Converter { } // Excel defines formatting if (cellData.getDataFormat() != null && !StringUtils.isEmpty(cellData.getDataFormatString())) { - return NumberDataFormatterUtils.format(cellData.getNumberValue().doubleValue(), cellData.getDataFormat(), + return NumberDataFormatterUtils.format(cellData.getNumberValue(), cellData.getDataFormat(), cellData.getDataFormatString(), globalConfiguration); } // Default conversion number diff --git a/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java b/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java index 0bc70d1..2c955ed 100644 --- a/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java +++ b/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java @@ -34,6 +34,8 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.poi.ss.format.CellFormat; +import org.apache.poi.ss.format.CellFormatResult; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.ExcelStyleDateFormatter; import org.apache.poi.ss.usermodel.FractionFormat; @@ -168,22 +170,58 @@ public class DataFormatter { this.decimalSymbols = DecimalFormatSymbols.getInstance(this.locale); } - private Format getFormat(Integer dataFormat, String dataFormatString) { + private Format getFormat(Double data,Integer dataFormat, String dataFormatString) { + + // Might be better to separate out the n p and z formats, falling back to p when n and z are not set. + // That however would require other code to be re factored. + // String[] formatBits = formatStrIn.split(";"); + // int i = cellValue > 0.0 ? 0 : cellValue < 0.0 ? 1 : 2; + // String formatStr = (i < formatBits.length) ? formatBits[i] : formatBits[0]; + String formatStr = dataFormatString; + + // Excel supports 2+ part conditional data formats, eg positive/negative/zero, + // or (>1000),(>0),(0),(negative). As Java doesn't handle these kinds + // of different formats for different ranges, just +ve/-ve, we need to + // handle these ourselves in a special way. + // For now, if we detect 2+ parts, we call out to CellFormat to handle it + // TODO Going forward, we should really merge the logic between the two classes + if (formatStr.contains(";") && + (formatStr.indexOf(';') != formatStr.lastIndexOf(';') + || rangeConditionalPattern.matcher(formatStr).matches() + ) ) { + try { + // Ask CellFormat to get a formatter for it + CellFormat cfmt = CellFormat.getInstance(locale, formatStr); + // CellFormat requires callers to identify date vs not, so do so + Object cellValueO = data; + if (DateUtil.isADateFormat(dataFormat, formatStr) && + // don't try to handle Date value 0, let a 3 or 4-part format take care of it + data.doubleValue() != 0.0) { + cellValueO = DateUtil.getJavaDate(data, use1904windowing); + } + // Wrap and return (non-cachable - CellFormat does that) + return new CellFormatResultWrapper( cfmt.apply(cellValueO) ); + } catch (Exception e) { + LOGGER.warn("Formatting failed for format {}, falling back",formatStr, e); + } + } + // See if we already have it cached - Format format = formats.get(dataFormatString); + Format format = formats.get(formatStr); if (format != null) { return format; } + // Is it one of the special built in types, General or @? - if ("General".equalsIgnoreCase(dataFormatString) || "@".equals(dataFormatString)) { + if ("General".equalsIgnoreCase(formatStr) || "@".equals(formatStr)) { format = getDefaultFormat(); - addFormat(dataFormatString, format); + addFormat(formatStr, format); return format; } // Build a formatter, and cache it - format = createFormat(dataFormat, dataFormatString); - addFormat(dataFormatString, format); + format = createFormat(dataFormat, formatStr); + addFormat(formatStr, format); return format; } @@ -530,7 +568,7 @@ public class DataFormatter { try { return new InternalDecimalFormatWithScale(format, symbols); } catch (IllegalArgumentException iae) { - LOGGER.debug("Formatting failed for format {}, falling back", formatStr, iae); + LOGGER.error("Formatting failed for format {}, falling back", formatStr, iae); // the pattern could not be parsed correctly, // so fall back to the default number format return getDefaultFormat(); @@ -570,7 +608,7 @@ public class DataFormatter { * @return Formatted value */ private String getFormattedDateString(Double data, Integer dataFormat, String dataFormatString) { - Format dateFormat = getFormat(dataFormat, dataFormatString); + Format dateFormat = getFormat(data, dataFormat, dataFormatString); if (dateFormat instanceof ExcelStyleDateFormatter) { // Hint about the raw excel value ((ExcelStyleDateFormatter)dateFormat).setDateToBeFormatted(data); @@ -592,8 +630,8 @@ public class DataFormatter { * @param dataFormatString * @return a formatted number string */ - private String getFormattedNumberString(Double data, Integer dataFormat, String dataFormatString) { - Format numberFormat = getFormat(dataFormat, dataFormatString); + private String getFormattedNumberString(BigDecimal data, Integer dataFormat, String dataFormatString) { + Format numberFormat = getFormat(data.doubleValue(), dataFormat, dataFormatString); String formatted = numberFormat.format(data); return formatted.replaceFirst("E(\\d)", "E+$1"); // to match Excel's E-notation } @@ -606,9 +644,9 @@ public class DataFormatter { * @param dataFormatString * @return */ - public String format(Double data, Integer dataFormat, String dataFormatString) { + public String format(BigDecimal data, Integer dataFormat, String dataFormatString) { if (DateUtils.isADateFormat(dataFormat, dataFormatString)) { - return getFormattedDateString(data, dataFormat, dataFormatString); + return getFormattedDateString(data.doubleValue(), dataFormat, dataFormatString); } return getFormattedNumberString(data, dataFormat, dataFormatString); } @@ -794,4 +832,26 @@ public class DataFormatter { } } + /** + * Workaround until we merge {@link org.apache.poi.ss.usermodel.DataFormatter} with {@link CellFormat}. Constant, non-cachable wrapper around a + * {@link CellFormatResult} + */ + private final class CellFormatResultWrapper extends Format { + private final CellFormatResult result; + + private CellFormatResultWrapper(CellFormatResult result) { + this.result = result; + } + + @Override + public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) { + return toAppendTo.append(result.text.trim()); + } + + @Override + public Object parseObject(String source, ParsePosition pos) { + return null; // Not supported + } + } + } diff --git a/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java b/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java index 09d149b..b4ba5b0 100644 --- a/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java +++ b/src/main/java/com/alibaba/excel/util/NumberDataFormatterUtils.java @@ -1,5 +1,7 @@ package com.alibaba.excel.util; +import java.math.BigDecimal; + import com.alibaba.excel.metadata.format.DataFormatter; import com.alibaba.excel.metadata.GlobalConfiguration; @@ -24,7 +26,7 @@ public class NumberDataFormatterUtils { * @param globalConfiguration * @return */ - public static String format(Double data, Integer dataFormat, String dataFormatString, + public static String format(BigDecimal data, Integer dataFormat, String dataFormatString, GlobalConfiguration globalConfiguration) { DataFormatter dataFormatter = DATA_FORMATTER_THREAD_LOCAL.get(); if (dataFormatter == null) { diff --git a/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java b/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java index f1de542..d0c308a 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/dataformat/DateFormatTest.java @@ -4,17 +4,16 @@ import java.io.File; import java.util.List; import java.util.Locale; +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; + import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.easyexcel.test.util.TestFileUtil; -import com.alibaba.excel.EasyExcel; - /** - * * @author Jiaju Zhuang */ public class DateFormatTest { @@ -44,6 +43,14 @@ public class DateFormatTest { private void readCn(File file) { List list = EasyExcel.read(file, DateFormatData.class, null).locale(Locale.CHINA).sheet().doReadSync(); + for (DateFormatData data : list) { + if (data.getDateStringCn() != null && !data.getDateStringCn().equals(data.getDate())) { + LOGGER.info("date:cn:{},{}", data.getDateStringCn(), data.getDate()); + } + if (data.getNumberStringCn() != null && !data.getNumberStringCn().equals(data.getNumber())) { + LOGGER.info("number:cn{},{}", data.getNumberStringCn(), data.getNumber()); + } + } for (DateFormatData data : list) { Assert.assertEquals(data.getDateStringCn(), data.getDate()); Assert.assertEquals(data.getNumberStringCn(), data.getNumber()); @@ -53,6 +60,14 @@ public class DateFormatTest { private void readUs(File file) { List list = EasyExcel.read(file, DateFormatData.class, null).locale(Locale.US).sheet().doReadSync(); + for (DateFormatData data : list) { + if (data.getDateStringUs() != null && !data.getDateStringUs().equals(data.getDate())) { + LOGGER.info("date:us:{},{}", data.getDateStringUs(), data.getDate()); + } + if (data.getNumberStringUs() != null && !data.getNumberStringUs().equals(data.getNumber())) { + LOGGER.info("number:us{},{}", data.getNumberStringUs(), data.getNumber()); + } + } for (DateFormatData data : list) { Assert.assertEquals(data.getDateStringUs(), data.getDate()); Assert.assertEquals(data.getNumberStringUs(), data.getNumber()); diff --git a/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java b/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java index 375f9be..b7f63cf 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/encrypt/EncryptDataTest.java @@ -3,21 +3,23 @@ package com.alibaba.easyexcel.test.core.encrypt; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; -import org.junit.BeforeClass; -import org.junit.FixMethodOrder; -import org.junit.Test; -import org.junit.runners.MethodSorters; - import com.alibaba.easyexcel.test.core.simple.SimpleData; import com.alibaba.easyexcel.test.util.TestFileUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + /** - * * @author Jiaju Zhuang */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) @@ -28,6 +30,15 @@ public class EncryptDataTest { private static File file07OutputStream; private static File file03OutputStream; + @Test + public void testformat() { + DecimalFormat decimalFormat = new DecimalFormat("0.00"); + decimalFormat.setRoundingMode(RoundingMode.HALF_UP); + BigDecimal bigDecimal = new BigDecimal("0.105"); + + System.out.println(decimalFormat.format(bigDecimal)); + } + @BeforeClass public static void init() { file07 = TestFileUtil.createNewFile("encrypt07.xlsx"); diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java b/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java index 0dcef53..9220264 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java +++ b/src/test/java/com/alibaba/easyexcel/test/temp/Lock2Test.java @@ -33,9 +33,10 @@ public class Lock2Test { @Test public void test() throws Exception { - File file = TestFileUtil.readUserHomeFile("test/test6.xls"); +// File file = TestFileUtil.readUserHomeFile("test/test6.xls"); + File file = new File("/Users/zhuangjiaju/test/签到金模板-0507-v5.xlsx"); - List list = EasyExcel.read(file).sheet(1).headRowNumber(0).doReadSync(); + List list = EasyExcel.read(file).sheet(0).headRowNumber(0).doReadSync(); LOGGER.info("数据:{}", list.size()); for (Object data : list) { LOGGER.info("返回数据:{}", JSON.toJSONString(data)); diff --git a/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java b/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java index 27f820b..ad09717 100644 --- a/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java +++ b/src/test/java/com/alibaba/easyexcel/test/temp/LockTest.java @@ -26,11 +26,7 @@ public class LockTest { public void test() throws Exception { List list = - EasyExcel.read(new FileInputStream("D:\\test\\testbug嘉惠.xlsx")).sheet().headRowNumber(0).doReadSync(); - for (Object data : list) { - LOGGER.info("返回数据:{}", JSON.toJSONString(data)); - } - list = EasyExcel.read(new File("D:\\test\\t222.xlsx")).sheet().headRowNumber(0).doReadSync(); + EasyExcel.read(new FileInputStream("/Users/zhuangjiaju/Downloads/点位配置表 (1).xlsx")).doReadAllSync(); for (Object data : list) { LOGGER.info("返回数据:{}", JSON.toJSONString(data)); } diff --git a/src/test/resources/dataformat/dataformat.xls b/src/test/resources/dataformat/dataformat.xls index 632cb1ec752ba058ef533540929c9af7b61d489e..c8afd6461f3398c3405321a0358d024cf55f2719 100644 GIT binary patch literal 28672 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 Y&iIg$Jq5&vkiMinP}{xzcDBwY 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 E16&b#pa1{> literal 11746 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