当前位置 博文首页 > 小小舍的博客:java用excel表格批量导入之解决手机号格式等问题
因为要批量导入,所以要获取表格中的数据并拿到list集合,以便插入数据。
但读取表格内容时也遇到了坑,以下是总结后的代码,希望帮助有同样困扰的程序员。
?
/**
* 读取表格数据
* @param path 文件路径
* @param maxColIx 最大读取列
* @return
*/
public static List<List<String>> readXlsx(String path,int maxColIx){
URL url = null;
InputStream fin = null;
XSSFWorkbook xssfWorkbook = null;
try {
url = new URL(path);
fin = url.openStream();
xssfWorkbook = new XSSFWorkbook(fin);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
List<List<String>> result = new ArrayList<>();
// 循环当前页,并处理当前循环页
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
// 处理当前页,循环读取每一行 rowNum:从第几行开始读取
for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow row = xssfSheet.getRow(rowNum);
int minColIx = row.getFirstCellNum();
// int maxColIx = xssfRow.getLastCellNum();//返回的是最后一列的列数,即等于总列数
List<String> rowList = new ArrayList<String>();
for (int j = minColIx; j < maxColIx; j++) {
String str = "";
XSSFCell cell = row.getCell(j);
if (null != cell) {
switch (cell.getCellType()) {
case NUMERIC: // 数值型
DecimalFormat df=new DecimalFormat("0");
str=df.format(cell.getNumericCellValue());
System.out.print(",数字:"+str);
break;
case STRING: // 字符串型
str = cell.getStringCellValue();
System.out.print(",字符串:"+str);
break;
case FORMULA: // 公式
str = cell.getCellFormula() + "";
break;
case BLANK: // 空值
break;
case BOOLEAN: //布尔型
str = cell.getBooleanCellValue()+"";
break;
case ERROR: // 错误
break;
default:
System.out.print("未知类型 ");
break;
}
}
rowList.add(str);
}
result.add(rowList);
}
return result;
}
cs