mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
fix bugs
This commit is contained in:
parent
68da52bf82
commit
30e1eb929c
@ -23,6 +23,8 @@
|
|||||||
* 【core 】 修复TemporalAccessorUtil无法格式化LocalDate带时间问题(issue#1289@Github)
|
* 【core 】 修复TemporalAccessorUtil无法格式化LocalDate带时间问题(issue#1289@Github)
|
||||||
* 【json 】 修复自定义日期格式的LocalDateTime没有包装引号问题(issue#1289@Github)
|
* 【json 】 修复自定义日期格式的LocalDateTime没有包装引号问题(issue#1289@Github)
|
||||||
* 【cache 】 get中unlock改为unlockRead(issue#1294@Github)
|
* 【cache 】 get中unlock改为unlockRead(issue#1294@Github)
|
||||||
|
* 【db 】 修复表名包含点导致的问题(issue#1300@Github)
|
||||||
|
* 【poi 】 修复xdr:row标签导致的问题(issue#1297@Github)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.hutool.db.sql;
|
package cn.hutool.db.sql;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.lang.Editor;
|
import cn.hutool.core.lang.Editor;
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
@ -98,7 +99,7 @@ public class Wrapper {
|
|||||||
|
|
||||||
//对于Oracle这类数据库,表名中包含用户名需要单独拆分包装
|
//对于Oracle这类数据库,表名中包含用户名需要单独拆分包装
|
||||||
if(field.contains(StrUtil.DOT)){
|
if(field.contains(StrUtil.DOT)){
|
||||||
final Collection<String> target = CollectionUtil.filter(StrUtil.split(field, StrUtil.C_DOT), (Editor<String>) t -> StrUtil.format("{}{}{}", preWrapQuote, t, sufWrapQuote));
|
final Collection<String> target = CollUtil.filter(StrUtil.split(field, StrUtil.C_DOT, 2), (Editor<String>) t -> StrUtil.format("{}{}{}", preWrapQuote, t, sufWrapQuote));
|
||||||
return CollectionUtil.join(target, StrUtil.DOT);
|
return CollectionUtil.join(target, StrUtil.DOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,8 @@ public class Excel07SaxReader extends DefaultHandler implements ExcelSaxReader<E
|
|||||||
private XSSFCellStyle xssfCellStyle;
|
private XSSFCellStyle xssfCellStyle;
|
||||||
// 单元格存储的格式化字符串,nmtFmt的formatCode属性的值
|
// 单元格存储的格式化字符串,nmtFmt的formatCode属性的值
|
||||||
private String numFmtString;
|
private String numFmtString;
|
||||||
|
// 是否处于sheetData标签内,sax只解析此标签内的内容,其它标签忽略
|
||||||
|
private boolean isInSheetData;
|
||||||
|
|
||||||
// 上一次的内容
|
// 上一次的内容
|
||||||
private final StrBuilder lastContent = StrUtil.strBuilder();
|
private final StrBuilder lastContent = StrUtil.strBuilder();
|
||||||
@ -195,7 +197,17 @@ public class Excel07SaxReader extends DefaultHandler implements ExcelSaxReader<E
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void startElement(String uri, String localName, String qName, Attributes attributes) {
|
public void startElement(String uri, String localName, String qName, Attributes attributes) {
|
||||||
final ElementName name = ElementName.of(localName);
|
if("sheetData".equals(qName)){
|
||||||
|
this.isInSheetData = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(false == this.isInSheetData){
|
||||||
|
// 非sheetData标签,忽略解析
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ElementName name = ElementName.of(qName);
|
||||||
this.curElementName = name;
|
this.curElementName = name;
|
||||||
|
|
||||||
if(null != name){
|
if(null != name){
|
||||||
@ -217,12 +229,24 @@ public class Excel07SaxReader extends DefaultHandler implements ExcelSaxReader<E
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void endElement(String uri, String localName, String qName) {
|
public void endElement(String uri, String localName, String qName) {
|
||||||
|
if("sheetData".equals(qName)){
|
||||||
|
// sheetData结束,不再解析别的标签
|
||||||
|
this.isInSheetData = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(false == this.isInSheetData){
|
||||||
|
// 非sheetData标签,忽略解析
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.curElementName = null;
|
this.curElementName = null;
|
||||||
if (ElementName.c.match(localName)) { // 单元格结束
|
if (ElementName.c.match(qName)) { // 单元格结束
|
||||||
endCell();
|
endCell();
|
||||||
} else if (ElementName.row.match(localName)) {// 行结束
|
} else if (ElementName.row.match(qName)) {// 行结束
|
||||||
endRow();
|
endRow();
|
||||||
}
|
}
|
||||||
|
// 其它标签忽略
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -230,6 +254,11 @@ public class Excel07SaxReader extends DefaultHandler implements ExcelSaxReader<E
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void characters(char[] ch, int start, int length) {
|
public void characters(char[] ch, int start, int length) {
|
||||||
|
if(false == this.isInSheetData){
|
||||||
|
// 非sheetData标签,忽略解析
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final ElementName elementName = this.curElementName;
|
final ElementName elementName = this.curElementName;
|
||||||
if(null != elementName){
|
if(null != elementName){
|
||||||
switch (elementName){
|
switch (elementName){
|
||||||
@ -303,7 +332,10 @@ public class Excel07SaxReader extends DefaultHandler implements ExcelSaxReader<E
|
|||||||
* @param attributes 属性列表
|
* @param attributes 属性列表
|
||||||
*/
|
*/
|
||||||
private void startRow(Attributes attributes) {
|
private void startRow(Attributes attributes) {
|
||||||
this.rowNumber = Long.parseLong(AttributeName.r.getValue(attributes)) - 1;
|
final String rValue = AttributeName.r.getValue(attributes);
|
||||||
|
if(null != rValue){
|
||||||
|
this.rowNumber = Long.parseLong(rValue) - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -399,7 +431,7 @@ public class Excel07SaxReader extends DefaultHandler implements ExcelSaxReader<E
|
|||||||
len++;
|
len++;
|
||||||
}
|
}
|
||||||
while (len-- > 0) {
|
while (len-- > 0) {
|
||||||
addCellValue(curCell++, "");
|
addCellValue(curCell++, StrUtil.EMPTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -175,4 +175,12 @@ public class ExcelSaxReadTest {
|
|||||||
|
|
||||||
ExcelUtil.getReader(file).read().forEach(Console::log);
|
ExcelUtil.getReader(file).read().forEach(Console::log);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
public void readXlsmTest(){
|
||||||
|
ExcelUtil.readBySax("d:/test/WhiteListTemplate.xlsm", -1, (sheetIndex, rowIndex, rowlist) -> {
|
||||||
|
Console.log("[{}] [{}] {}", sheetIndex, rowIndex, rowlist);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user