fix sax 03 bug

This commit is contained in:
Looly 2020-10-22 14:36:49 +08:00
parent bee588de3c
commit 7bfb8e82cf
4 changed files with 21 additions and 9 deletions

View File

@ -16,6 +16,7 @@
* 【core 】 修复FileUtil中copyFile方法断言判断参数传递错误issue#I1Z2NY@Gitee
* 【core 】 修复BeanDesc读取父类属性覆盖子类属性导致的问题pr#1175@Github
* 【aop 】 修复SimpleAspect一个重载导致的问题去掉重载的after方法issue#I1YUG9@Gitee
* 【poi 】 修复03 sax读取日期问题issue#I1Z83N@Gitee
-------------------------------------------------------------------------------------------------------------

View File

@ -1,5 +1,6 @@
package cn.hutool.poi.excel.sax;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@ -14,7 +15,19 @@ import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BlankRecord;
import org.apache.poi.hssf.record.BoolErrRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.CellValueRecordInterface;
import org.apache.poi.hssf.record.EOFRecord;
import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.LabelRecord;
import org.apache.poi.hssf.record.LabelSSTRecord;
import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.SSTRecord;
import org.apache.poi.hssf.record.StringRecord;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
@ -294,12 +307,10 @@ public class Excel03SaxReader implements HSSFListener, ExcelSaxReader<Excel03Sax
case NumberRecord.sid: // 数字类型
final NumberRecord numrec = (NumberRecord) record;
final String formatString = formatListener.getFormatString(numrec);
if (StrUtil.contains(formatString, StrUtil.DOT)) {
//浮点数
value = numrec.getValue();
} else if (StrUtil.containsAny(formatString, StrUtil.SLASH, StrUtil.COLON, "", "", "", "", "", "")) {
//日期
value = ExcelSaxUtil.getDateValue(numrec.getValue());
if(false == StrUtil.contains(formatString, '%') &&
false == "General".equalsIgnoreCase(formatString)){
// 可能为日期格式
value = DateUtil.date(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(numrec.getValue()));
} else {
final double doubleValue = numrec.getValue();
final long longPart = (long) doubleValue;

View File

@ -114,5 +114,5 @@ public interface ExcelSaxReader<T> {
*/
default T read(InputStream in, int rid) throws POIException{
return read(in, String.valueOf(rid));
};
}
}

View File

@ -106,7 +106,7 @@ public class ExcelSaxReadTest {
@Test
@Ignore
public void dateReadTest() {
ExcelUtil.readBySax("d:/test/sax_date_test.xlsx", 0, (i, i1, list) ->
ExcelUtil.readBySax("d:/test/date_test.xls", 0, (i, i1, list) ->
Console.log(StrUtil.join(", ", list)));
}