fix excel sax bug

This commit is contained in:
Looly 2020-12-12 02:09:16 +08:00
parent 726b55a742
commit 3033114e06
5 changed files with 31 additions and 33 deletions

View File

@ -32,6 +32,7 @@
* 【poi 】 修复xdr:row标签导致的问题issue#1297@Github
* 【core 】 修复FileUtil.loopFiles使用FileFilter无效问题issue#I28V48@Gitee
* 【extra 】 修复JschUtil.execByShell返回空的问题issue#1067@Github
* 【poi 】 修复特殊的excel使用sax读取时未读到值的问题issue#1303@Github
-------------------------------------------------------------------------------------------------------------
@ -72,7 +73,7 @@
* 【core 】 修复HexUtil.format问题issue#I268XT@Gitee
* 【core 】 修复ZipUtil判断压缩文件是否位于压缩目录内的逻辑有误的问题issue#1251@Github
* 【json 】 修复JSONObject.accumulate问题
* 【core 】 修复部分xlsx文件sax方式解析空指针问题issue#1265@Github
* 【poi 】 修复部分xlsx文件sax方式解析空指针问题issue#1265@Github
* 【core 】 修复PatternPool中邮编的正则issue#1274@Github
-------------------------------------------------------------------------------------------------------------

View File

@ -745,11 +745,11 @@ public class BeanUtil {
}
/**
* 判断Bean是否为非空对象非空对象表示本身不为<code>null</code>或者含有非<code>null</code>属性的对象
* 判断Bean是否为非空对象非空对象表示本身不为{@code null}或者含有非{@code null}属性的对象
*
* @param bean Bean对象
* @param ignoreFiledNames 忽略检查的字段名
* @return 是否为空<code>true</code> - / <code>false</code> - 非空
* @return 是否为空{@code true} - / {@code false} - 非空
* @since 5.0.7
*/
public static boolean isNotEmpty(Object bean, String... ignoreFiledNames) {
@ -757,12 +757,12 @@ public class BeanUtil {
}
/**
* 判断Bean是否为空对象空对象表示本身为<code>null</code>或者所有属性都为<code>null</code><br>
* 判断Bean是否为空对象空对象表示本身为{@code null}或者所有属性都为{@code null}<br>
* 此方法不判断static属性
*
* @param bean Bean对象
* @param ignoreFiledNames 忽略检查的字段名
* @return 是否为空<code>true</code> - / <code>false</code> - 非空
* @return 是否为空{@code true} - / {@code false} - 非空
* @since 4.1.10
*/
public static boolean isEmpty(Object bean, String... ignoreFiledNames) {
@ -781,12 +781,12 @@ public class BeanUtil {
}
/**
* 判断Bean是否包含值为<code>null</code>的属性<br>
* 对象本身为<code>null</code>也返回true
* 判断Bean是否包含值为{@code null}的属性<br>
* 对象本身为{@code null}也返回true
*
* @param bean Bean对象
* @param ignoreFiledNames 忽略检查的字段名
* @return 是否包含值为<code>null</code>的属性<code>true</code> - 包含 / <code>false</code> - 不包含
* @return 是否包含值为<code>null</code>的属性{@code true} - 包含 / {@code false} - 不包含
* @since 4.1.10
*/
public static boolean hasNullField(Object bean, String... ignoreFiledNames) {

View File

@ -140,7 +140,7 @@ public class ReflectUtil {
}
/**
* 查找指定类中的指定name的字段包括非public字段也包括父类和Object类的字段 字段不存在则返回<code>null</code>
* 查找指定类中的指定name的字段包括非public字段也包括父类和Object类的字段 字段不存在则返回{@code null}
*
* @param beanClass 被查找字段的类,不能为null
* @param name 字段名
@ -422,7 +422,7 @@ public class ReflectUtil {
}
/**
* 查找指定Public方法 如果找不到对应的方法或方法不为public的则返回<code>null</code>
* 查找指定Public方法 如果找不到对应的方法或方法不为public的则返回{@code null}
*
* @param clazz
* @param methodName 方法名
@ -442,7 +442,7 @@ public class ReflectUtil {
* 查找指定对象中的所有方法包括非public方法也包括父对象和Object类的方法
*
* <p>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回<code>null</code>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回{@code null}
* </p>
*
* @param obj 被查找的对象如果为{@code null}返回{@code null}
@ -459,10 +459,10 @@ public class ReflectUtil {
}
/**
* 忽略大小写查找指定方法如果找不到对应的方法则返回<code>null</code>
* 忽略大小写查找指定方法如果找不到对应的方法则返回{@code null}
*
* <p>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回<code>null</code>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回{@code null}
* </p>
*
* @param clazz 如果为{@code null}返回{@code null}
@ -477,10 +477,10 @@ public class ReflectUtil {
}
/**
* 查找指定方法 如果找不到对应的方法则返回<code>null</code>
* 查找指定方法 如果找不到对应的方法则返回{@code null}
*
* <p>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回<code>null</code>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回{@code null}
* </p>
*
* @param clazz 如果为{@code null}返回{@code null}
@ -494,10 +494,10 @@ public class ReflectUtil {
}
/**
* 查找指定方法 如果找不到对应的方法则返回<code>null</code>
* 查找指定方法 如果找不到对应的方法则返回{@code null}
*
* <p>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回<code>null</code>
* 此方法为精准获取方法名即方法名和参数数量和类型必须一致否则返回{@code null}
* </p>
*
* @param clazz 如果为{@code null}返回{@code null}
@ -527,7 +527,7 @@ public class ReflectUtil {
}
/**
* 按照方法名查找指定方法名的方法只返回匹配到的第一个方法如果找不到对应的方法则返回<code>null</code>
* 按照方法名查找指定方法名的方法只返回匹配到的第一个方法如果找不到对应的方法则返回{@code null}
*
* <p>
* 此方法只检查方法名是否一致并不检查参数的一致性
@ -544,7 +544,7 @@ public class ReflectUtil {
}
/**
* 按照方法名查找指定方法名的方法只返回匹配到的第一个方法如果找不到对应的方法则返回<code>null</code>
* 按照方法名查找指定方法名的方法只返回匹配到的第一个方法如果找不到对应的方法则返回{@code null}
*
* <p>
* 此方法只检查方法名是否一致忽略大小写并不检查参数的一致性
@ -561,7 +561,7 @@ public class ReflectUtil {
}
/**
* 按照方法名查找指定方法名的方法只返回匹配到的第一个方法如果找不到对应的方法则返回<code>null</code>
* 按照方法名查找指定方法名的方法只返回匹配到的第一个方法如果找不到对应的方法则返回{@code null}
*
* <p>
* 此方法只检查方法名是否一致并不检查参数的一致性
@ -842,7 +842,7 @@ public class ReflectUtil {
* </pre>
*
* @param <T> 返回对象类型
* @param obj 对象如果执行静态方法此值为<code>null</code>
* @param obj 对象如果执行静态方法此值为{@code null}
* @param method 方法对象方法或static方法都可
* @param args 参数对象
* @return 结果
@ -878,7 +878,7 @@ public class ReflectUtil {
* </pre>
*
* @param <T> 返回对象类型
* @param obj 对象如果执行静态方法此值为<code>null</code>
* @param obj 对象如果执行静态方法此值为{@code null}
* @param method 方法对象方法或static方法都可
* @param args 参数对象
* @return 结果

View File

@ -137,9 +137,6 @@ public class SheetDataSaxHandler extends DefaultHandler {
// 其它标签忽略
}
/**
* s标签结束的回调处理方法
*/
@Override
public void characters(char[] ch, int start, int length) {
if (false == this.isInSheetData) {
@ -159,8 +156,11 @@ public class SheetDataSaxHandler extends DefaultHandler {
lastFormula.append(ch, start, length);
break;
}
} else{
// 按理说内容应该为"<v>内容</v>"但是某些特别的XML内容不在v或f标签中此处做一些兼容
// issue#1303@Github
lastContent.append(ch, start, length);
}
// 其它标签忽略
}
// --------------------------------------------------------------------------------------- Private method start

View File

@ -64,7 +64,7 @@ public class ExcelSaxReadTest {
@Test
@Ignore
public void readBySaxTest2() {
ExcelUtil.readBySax("d:/test/default.xlsx", -1, (sheetIndex, rowIndex, rowList) -> Console.log(rowList));
ExcelUtil.readBySax("d:/test/456789.xlsx", "0", (sheetIndex, rowIndex, rowList) -> Console.log(rowList));
}
private RowHandler createRowHandler() {
@ -140,9 +140,7 @@ public class ExcelSaxReadTest {
public void dateReadXlsTest() {
List<String> rows = new ArrayList<>();
ExcelUtil.readBySax("data_for_sax_test.xls", 0,
(i, i1, list) ->{
rows.add(StrUtil.toString(list.get(0)));
}
(i, i1, list) -> rows.add(StrUtil.toString(list.get(0)))
);
Assert.assertEquals("2020-10-09 00:00:00", rows.get(1));
@ -179,8 +177,7 @@ public class ExcelSaxReadTest {
@Test
@Ignore
public void readXlsmTest(){
ExcelUtil.readBySax("d:/test/WhiteListTemplate.xlsm", -1, (sheetIndex, rowIndex, rowlist) -> {
Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist);
});
ExcelUtil.readBySax("d:/test/WhiteListTemplate.xlsm", -1,
(sheetIndex, rowIndex, rowlist) -> Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist));
}
}