add readExcel for "NO fields"

This commit is contained in:
lxyer 2018-09-21 01:19:20 +08:00
parent a10f7e3680
commit 352c5934e3
3 changed files with 115 additions and 2 deletions

View File

@ -10,6 +10,11 @@
<build>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<resources>
<resource>
<directory>res</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>

View File

@ -232,15 +232,31 @@ public class ExcelKit {
return readExcel(file, fields, -1, null);
}
//read excel sheet[0] no fields
public static List<Map> readExcel(File file) throws IOException {
return readExcel(file, null, -1, null);
}
//read excel by sheetName
public static List<Map> readExcel(File file, String[] fields, String sheetName) throws IOException {
return readExcel(file, fields, -1, sheetName);
}
//read excel by sheetName no fields
public static List<Map> readExcel(File file, String sheetName) throws IOException {
return readExcel(file, null, -1, sheetName);
}
//read excel all sheet
public static Map<String, List<Map>> readExcelAll(File file, String[] fields) throws IOException {
return readExcelAll(file, fields, -1);
}
//read all excel no fields
public static Map<String, List<Map>> readExcelAll(File file) throws IOException {
return readExcelAll(file, null, -1);
}
//read excel sheet[0]
private static List<Map> readExcel(File file, String[] fields, int lastRowNum, String sheetName) throws IOException {
Workbook wk;
@ -291,6 +307,10 @@ public class ExcelKit {
* @author Lxyer 2016/8/1 10:32.
*/
private static List<Map> readExcel(Sheet sheet, String[] fields, int lastRowNum) throws OfficeXmlFileException {
if (fields == null || fields.length == 0){
return readExcel(sheet, lastRowNum);
}
List<Map> list = new ArrayList<>();
if (lastRowNum < 0 || lastRowNum > sheet.getLastRowNum()){
lastRowNum = sheet.getLastRowNum();
@ -315,8 +335,7 @@ public class ExcelKit {
continue;
}
int cellType = cell.getCellType();
if (cellType == 0){
if (cell.getCellTypeEnum() == CellType.NUMERIC){
map.put(fields[j], (long)cell.getNumericCellValue()+"");
}else {
map.put(fields[j], cell.getStringCellValue());
@ -327,6 +346,48 @@ public class ExcelKit {
return list;
}
/**
*
* @author Lxyer 2016/9/21 00:38.
*/
private static List<Map> readExcel(Sheet sheet, int lastRowNum) throws OfficeXmlFileException {
List<Map> list = new ArrayList<>();
if (lastRowNum < 0 || lastRowNum > sheet.getLastRowNum()){
lastRowNum = sheet.getLastRowNum();
}
int t = 0;
r:for (int i=0; i<=lastRowNum; i++){
Row row = sheet.getRow(i);
if (row == null) continue ;
short cellNum = row.getLastCellNum();
//空跳过/连续三行为空结束
if (isEmptyRow(row, 3)) {
if (t++ > 3) break;
continue ;
}
Map map = new HashMap();
for (int j=0; j < cellNum; j++){
String field = (char)((j/26 ==0? ' ' : 'a')+j/26) + "" +(char)('a'+j%26);
field = field.replace(" ","");
Cell cell = row.getCell(j);
if (cell == null){
map.put(field, "");
continue;
}
if (cell.getCellTypeEnum() == CellType.NUMERIC){
map.put(field, (long)cell.getNumericCellValue()+"");
}else {
map.put(field, cell.getStringCellValue());
}
}
list.add(map);
}
return list;
}
//空跳过/连续三行为空结束
private static boolean isEmptyRow(Row row, int len){
for (int i = 0; i< row.getLastCellNum() && i < len; i++) {

View File

@ -0,0 +1,47 @@
package com.lxyer.excel;
import com.lxyer.excel.poi.ExcelKit;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author: liangxianyou at 2018/9/15 7:52.
*/
public class ExcelKitTest {
//read excel by fields
@Test
public void readTest() throws IOException {
/*String sql1 = "select a, b, c from Sheet1";
String sql2 = "select a, b, c from Sheet1 where a=1 order by b";
String sql3 = "select a, b, c from Sheet1 s1, Sheet2 s2 order by";
String sql4 = "select a, b, c from Sheet1 s1, Sheet2 s2 where order by";
String select = sql1.substring(0,sql1.indexOf("from")).replace("select", "").replace(" ", "");
System.out.println(sql1.substring(0,sql1.indexOf("from")).replace("select", "").replace(" ", ""));
*/
String[] fields ={"a", "b", "c"};
File file = new File("res/test.xlsx");
List<Map> list = ExcelKit.readExcel(file, fields);
System.out.println(list.size());
}
//read excel no fields
@Test
public void readTest2() throws IOException {
List<Map> list = ExcelKit.readExcel(new File("res/test.xlsx"));
list.forEach(x->{
x.forEach((k,v)->{
System.out.println(String.format("%s:%s", k, v));
});
});
}
}