新入职后,接手的第一个任务是将excel中的数据录入数据库,这里总结一下。
public String excelInput() throws Exception {
InputStream is = new FileInputStream("D://model.xlsx");
XSSFWorkbook hssfWorkbook = new XSSFWorkbook(is);
DeviceInfo deviceInfo;
List<DeviceInfo> list = new ArrayList<DeviceInfo>();
// 循环工作表Sheet
for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {
continue;
}
// 循环行Row
for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow != null) {
deviceInfo = new DeviceInfo();
XSSFCell did = xssfRow.getCell(0);
XSSFCell didSn = xssfRow.getCell(1);
deviceInfo.setDid(String.valueOf(did));
deviceInfo.setDidSn(String.valueOf(didSn));
//将数据以对象形式插入数据库
deviceDao.insertDeviceSelective(deviceInfo);
}
}
}
}
1, 对于类似电话号码或手机一类的大数值读取问题
// 取值后会带一个E的问题
double cellValue = row.getCell(k).getNumericCellValue();
fieldValues[k] = new DecimalFormat("#").format(cellValue);
2, 对于数值型单元的纯数值和日期型的处理
case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 如果是date类型则 ,获取该cell的date值
value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else { // 纯数字
value = String.valueOf(cell.getNumericCellValue());
}