poi 讀寫Excel小工具 部分原始碼
功能 如果匹配條件相同 則把路徑2 的值賦值到路徑一
部分原始碼
//獲取表名
public static String[] getSheetNames(String filePath) {
String[] s = null;
Workbook wb1 = null;
InputStream in = null;
try {
in = new FileInputStream(filePath);
wb1 = WorkbookFactory.create(in);
s = new String[wb1.getNumberOfSheets()];
for (int i = 0; i < wb1.getNumberOfSheets(); i++) {
s[i] = wb1.getSheetName(i);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "當前excel表不能解析~" + filePath,
"錯誤", JOptionPane.ERROR_MESSAGE);
} finally {
try {
wb1.close();
in.close();
} catch (Exception e2) {
}
}
return s;
}
public boolean transferSimple(String path1, String path2,
String sheetname1, String sheetname2, List<String> mates,
String[] values, String follow) {
// 記錄空行
List<Integer> nullRow = new ArrayList<Integer>();
POIExcelUtil a = new POIExcelUtil(path1.trim());
POIExcelUtil b = new POIExcelUtil(path2.trim());
// 獲取表民
Sheet s1 = a.wb.getSheet(sheetname1.trim());
Sheet s2 = b.wb.getSheet(sheetname2.trim());
isSheetNull(s1, s2);
// 匹配條件 mate A:B C:D 匹配賦值必須有: 沒有則程式提前結束
if (!mateString(mates, values)) {
return false;
}
// map 存資料 使存入的資料有序
Map<String, LinkedList<String>> map = new LinkedHashMap<String, LinkedList<String>>();
// 左表和元資料進行匹配 相同存入map
for (int i = 0; i <= s1.getLastRowNum(); i++) {
Row row1 = s1.getRow(i);
// 獲取 aindex1的系列值 aindex2 aindex3
String cellvalue1 = "";
boolean isNull = false;
// 根據匹配條件去拼接
for (int k = 0; k < mates.size(); k++) {
String p = mates.get(k).split(":")[0];
int index1 = columnNumber(p);
// 出現空指標異常
Cell cell1 = null;
try {
cell1 = row1.getCell(index1);
} catch (NullPointerException e) {
// TODO: handle exception 如果 getCell如果為空行 解決問題
System.out.println("出現空行問題");
isNull = true;
}
// 先設定Cell的型別,然後就可以把純數字作為String型別讀進來了
if (null != cell1) {
setCellType(cell1);
if (null == cell1.getStringCellValue()
|| "".equals(cell1.getStringCellValue())) {
cellvalue1 += " ||";
} else {
cellvalue1 += cell1.getStringCellValue() + "||";
}
} else {
cellvalue1 += " ||";
}
}
// 如果出現空指標異常 也就是空行
if (isNull) {
// 記錄空行 迴圈結束
nullRow.add(i);
continue;
}
// 如果匹配成功 mateId++ 如果一直匹配不到 mateId=0 ->map+
matesALl(mates, values, s2, map, cellvalue1, follow, row1);
// 遍歷 row2把 row2這一行存入linkedList H I
}
if (isString(follow)) {
transferPOIwritee(a, sheetname1, map, mates, values, nullRow,
follow);
} else {
transferPOIwritee(a, sheetname1, map, mates, values, nullRow);
}
return true;
}