在XSSFWorksheet代码中未检测到空白

我正在使用下面的代码将XLSX转换为CSV并将数据上传到数据库,

import java.io.*; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class XLStoCSVConvert { static Connectivity conv; static Connection con = null; static Statement st = null; static String query=null; static void xlsx(File inputFile, File outputFile) { // For storing data into CSV files StringBuffer data = new StringBuffer(); try { FileOutputStream fos = new FileOutputStream(outputFile); // Get the workbook object for XLSX file System.out.println("working......"); XSSFWorkbook wBook = new XSSFWorkbook(new FileInputStream(inputFile)); // Get first sheet from the workbook System.out.println("working......"); XSSFSheet sheet = wBook.getSheetAt(0); Row row; Cell cell; // Iterate through each rows from first sheet Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { row = rowIterator.next(); // For each row, iterate through each columns Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: data.append(cell.getBooleanCellValue() + ","); break; case Cell.CELL_TYPE_NUMERIC: data.append(cell.getNumericCellValue() + ","); break; case Cell.CELL_TYPE_STRING: data.append(cell.getStringCellValue() + ","); break; case Cell.CELL_TYPE_BLANK: data.append("" + ","); break; default: data.append(cell + ","); } } data.append("\n"); } fos.write(data.toString().getBytes()); fos.close(); conv = new Connectivity(); con = conv.setConnection(); st = con.createStatement(); query = "LOAD DATA LOCAL INFILE \"" + outputFile + "\" INTO TABLE xLSXUpload FIELDS TERMINATED BY ',' IGNORE 1 LINES"; st.executeUpdate(query); } catch (Exception ioe) { ioe.printStackTrace(); } } public static void main(String[] args) { try { //FileOutputStream fin = new FileOutputStream("/home/raptorjd4/Desktop/RaptorTrackingSystem/mani.csv"); } catch(Exception e) { e.printStackTrace(); } File inputFile = new File("/home/raptorjd4/Desktop/XLS files/ToConsult.xlsx"); //writing excel data to csv File outputFile = new File("/home/raptorjd4/Desktop/RaptorTrackingSystem/ToConsult.csv"); xlsx(inputFile, outputFile); } } 

上面的代码上传数据到表,但空值不检测的代码和NULL值存储在表中的空白值和date格式始终存储在2033-01-02而不是1990-05-19

我在哪里做错了?

Excel不知道单元格的Date 。 该值存储为一个数字,只有格式使它成为一个date。

如果您的单元格包含值33012并指定date格式为yyyy-mm-dd则它将在Excel中显示为1990-05-19 。 当你提取数据时,你会得到这个单元格的数值。

您需要将应解释为date的数值与正常的数值区分开来。 以下面的代码片段为例。

 import org.apache.poi.ss.usermodel.DateUtil; ... case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { // append as String in the format specified in Excel // System.out.println("format: " + cell.getCellStyle().getDataFormatString()); data.append(cell); } else { data.append(cell.getNumericCellValue()); }