- 背景:需要通过读取excel中的内容,插入到数据库中。
- 使用poi来读取excel
- 引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
- 遍历行列
/**
* 读取excel文件,遍历行列
*
* @param path
*/
public static void readRowColumn(String path) throws IOException {
File xlsFile = new File(path);
/**
* 这里根据不同的excel类型
* 可以选取不同的处理类:
* 1.XSSFWorkbook
* 2.HSSFWorkbook
*/
// 获得工作簿
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(xlsFile));
// 获得工作表
XSSFSheet sheet = workbook.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();
for (int i = 0; i < rows; i++) {
// 获取第i行数据
XSSFRow sheetRow = sheet.getRow(i);
// 获取第0格数据
XSSFCell cell = sheetRow.getCell(0);
// 调用toString方法获取内容
System.out.println(cell);
}
}
- 运行效果
- 原始数据
-
123456 12345678901
- 结果
-
123456.0 1.2345678901E10
通过运行结果可以看到,读出来的excel内容已经被处理过了
-
处理办法【两种】
-
(1)方法1:使用NumberFormat 来做格式处理
-
double d = cell_0.getNumericCellValue(); NumberFormat nf = NumberFormat.getInstance(); String s = nf.format(d); if (s.indexOf(",") >= 0) { //这种方法对于自动加".0"的数字可直接解决 //但如果是科学计数法的数字就转换成了带逗号的,例如:12345678912345的科学计数法是1.23457E+13, // 经过这个格式化后就变成了字符串“12,345,678,912,345”,这也并不是想要的结果,所以要将逗号去掉 s = s.replace(",", ""); }
(2)方法2:在获取该字段时,将其转换为对应的类型字符串
-
double d = cell_0.getNumericCellValue(); //将double类型转换为对应的字段类型 map.put("id", Double.valueOf(d).longValue()+"");