mirror of
https://gitee.com/dromara/hutool.git
synced 2025-05-02 20:02:49 +08:00
fix excel sax bug
This commit is contained in:
parent
726b55a742
commit
3033114e06
@ -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)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
@ -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) {
|
||||
|
@ -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 结果
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user