|
@@ -17,7 +17,7 @@ import java.util.Map;
|
|
|
/**
|
|
/**
|
|
|
* 在Sax方式读取Excel时,读取sheet标签中sheetId和rid的对应关系,类似于:
|
|
* 在Sax方式读取Excel时,读取sheet标签中sheetId和rid的对应关系,类似于:
|
|
|
* <pre>
|
|
* <pre>
|
|
|
- * <sheet name="Sheet6" sheetId="4" r:id="6"/>
|
|
|
|
|
|
|
+ * <sheet name="Sheet6" sheetId="4" r:id="rId6"/>
|
|
|
* </pre>
|
|
* </pre>
|
|
|
* <p>
|
|
* <p>
|
|
|
* 读取结果为:
|
|
* 读取结果为:
|
|
@@ -36,8 +36,8 @@ public class SheetRidReader extends DefaultHandler {
|
|
|
private final static String SHEET_ID_ATTR = "sheetId";
|
|
private final static String SHEET_ID_ATTR = "sheetId";
|
|
|
private final static String NAME_ATTR = "name";
|
|
private final static String NAME_ATTR = "name";
|
|
|
|
|
|
|
|
- private final Map<String, String> ID_RID_MAP = new HashMap<>();
|
|
|
|
|
- private final Map<String, String> NAME_RID_MAP = new HashMap<>();
|
|
|
|
|
|
|
+ private final Map<Integer, Integer> ID_RID_MAP = new HashMap<>();
|
|
|
|
|
+ private final Map<String, Integer> NAME_RID_MAP = new HashMap<>();
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 读取Wordkbook的XML中sheet标签中sheetId和rid的对应关系
|
|
* 读取Wordkbook的XML中sheet标签中sheetId和rid的对应关系
|
|
@@ -61,51 +61,74 @@ public class SheetRidReader extends DefaultHandler {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 根据sheetId获取rid
|
|
|
|
|
|
|
+ * 根据sheetId获取rid,从1开始
|
|
|
*
|
|
*
|
|
|
- * @param sheetId Sheet的ID
|
|
|
|
|
- * @return rid
|
|
|
|
|
|
|
+ * @param sheetId Sheet的ID,从1开始
|
|
|
|
|
+ * @return rid,从1开始
|
|
|
*/
|
|
*/
|
|
|
- public String getRidBySheetId(String sheetId) {
|
|
|
|
|
|
|
+ public Integer getRidBySheetId(int sheetId) {
|
|
|
return ID_RID_MAP.get(sheetId);
|
|
return ID_RID_MAP.get(sheetId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 根据sheet name获取rid
|
|
|
|
|
|
|
+ * 根据sheetId获取rid,从0开始
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param sheetId Sheet的ID,从0开始
|
|
|
|
|
+ * @return rid,从0开始
|
|
|
|
|
+ * @since 5.5.5
|
|
|
|
|
+ */
|
|
|
|
|
+ public Integer getRidBySheetIdBase0(int sheetId) {
|
|
|
|
|
+ final Integer rid = getRidBySheetId(sheetId + 1);
|
|
|
|
|
+ if(null != rid){
|
|
|
|
|
+ return rid - 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据sheet name获取rid,从1开始
|
|
|
*
|
|
*
|
|
|
* @param sheetName Sheet的name
|
|
* @param sheetName Sheet的name
|
|
|
- * @return rid
|
|
|
|
|
|
|
+ * @return rid,从1开始
|
|
|
*/
|
|
*/
|
|
|
- public String getRidByName(String sheetName) {
|
|
|
|
|
|
|
+ public Integer getRidByName(String sheetName) {
|
|
|
return NAME_RID_MAP.get(sheetName);
|
|
return NAME_RID_MAP.get(sheetName);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据sheet name获取rid,从0开始
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param sheetName Sheet的name
|
|
|
|
|
+ * @return rid,从0开始
|
|
|
|
|
+ * @since 5.5.5
|
|
|
|
|
+ */
|
|
|
|
|
+ public Integer getRidByNameBase0(String sheetName) {
|
|
|
|
|
+ final Integer rid = getRidByName(sheetName);
|
|
|
|
|
+ if(null != rid){
|
|
|
|
|
+ return rid - 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public void startElement(String uri, String localName, String qName, Attributes attributes) {
|
|
public void startElement(String uri, String localName, String qName, Attributes attributes) {
|
|
|
if (TAG_NAME.equalsIgnoreCase(localName)) {
|
|
if (TAG_NAME.equalsIgnoreCase(localName)) {
|
|
|
- final int length = attributes.getLength();
|
|
|
|
|
- String sheetId = null;
|
|
|
|
|
- String rid = null;
|
|
|
|
|
- String name = null;
|
|
|
|
|
- for (int i = 0; i < length; i++) {
|
|
|
|
|
- final String attrName = attributes.getQName(i);
|
|
|
|
|
- switch (attrName) {
|
|
|
|
|
- case SHEET_ID_ATTR:
|
|
|
|
|
- sheetId = attributes.getValue(i);
|
|
|
|
|
- break;
|
|
|
|
|
- case RID_ATTR:
|
|
|
|
|
- rid = attributes.getValue(i);
|
|
|
|
|
- break;
|
|
|
|
|
- case NAME_ATTR:
|
|
|
|
|
- name = attributes.getValue(i);
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- if (StrUtil.isNotEmpty(sheetId)) {
|
|
|
|
|
- ID_RID_MAP.put(sheetId, rid);
|
|
|
|
|
- }
|
|
|
|
|
- if (StrUtil.isNotEmpty(name)) {
|
|
|
|
|
- NAME_RID_MAP.put(name, rid);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ final String ridStr = attributes.getValue(SHEET_ID_ATTR);
|
|
|
|
|
+ if(StrUtil.isEmpty(ridStr)){
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ final int rid = Integer.parseInt(StrUtil.removePrefixIgnoreCase(ridStr, Excel07SaxReader.RID_PREFIX));
|
|
|
|
|
+
|
|
|
|
|
+ // sheet名和rid映射
|
|
|
|
|
+ final String name = attributes.getValue(NAME_ATTR);
|
|
|
|
|
+ if (StrUtil.isNotEmpty(name)) {
|
|
|
|
|
+ NAME_RID_MAP.put(name, rid);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // sheetId和rid映射
|
|
|
|
|
+ final String sheetIdStr = attributes.getValue(SHEET_ID_ATTR);
|
|
|
|
|
+ if(StrUtil.isNotEmpty(sheetIdStr)){
|
|
|
|
|
+ ID_RID_MAP.put(Integer.parseInt(sheetIdStr), rid);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|