#java #excel #apache-poi
#java #excel #apache-poi
Вопрос:
У меня есть два файла xlsx, один с ожидаемым результатом, другой был сгенерирован приложением. Визуально между файлами нет различий. Из первого файла я могу получить все данные. Но, когда я пытаюсь прочитать данные из второго файла (сгенерированного файла), все данные с форматом валюты возвращаются с пустой строкой.
Но когда я копирую все данные во вновь созданный файл, я могу его прочитать. Что не так с сгенерированным файлом и как это исправить?
public String get_CellData(int rownum, int colnum) throws Exception {
try {
cell = sheet.getRow(rownum).getCell(colnum);
String CellData = null;
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.println("The type of cell is STRING ");
CellData = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println("The type of cell is NUMERIC ");
if (DateUtil.isCellDateFormatted(cell)) {
//CellData = cell.getDateCellValue().toString();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
CellData = sdf.format(cell.getDateCellValue());
} else {
String typeCell = cell.getCellStyle().getDataFormatString();
System.out.println("typeCell: " typeCell);
if (typeCell.contains("%")) {
// DecimalFormat df5 = new DecimalFormat( "#,###,###,##0.00000");
DecimalFormat df5 = new DecimalFormat("#######.##0.00000");
Double value = cell.getNumericCellValue() * 100;
CellData = df5.format(value) "%";
System.out.println("Percent value found = " CellData.toString());
} else {
DataFormatter formatter = new DataFormatter();//("#,##0.00");
int formatIndex = cell.getCellStyle().getDataFormat();
String cellFormattedData = formatter.formatRawCellContents(cell.getNumericCellValue(), formatIndex, "#0.00");
//String cellFormattedData = formatter.formatRawCellContents(cell.getNumericCellValue(), formatIndex, "###.##");
CellData = cellFormattedData;
}
}
break;
case Cell.CELL_TYPE_BLANK:
System.out.println("The type of cell is BLANK ");
CellData = "";
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println("The type of cell is BOOLEAN ");
CellData = Boolean.toString(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println("The type of cell is FORMULA ");
System.out.println("Formula is " cell.getCellFormula());
switch (cell.getCachedFormulaResultType()) {
case Cell.CELL_TYPE_NUMERIC:
System.out.println("Last evaluated as: " cell.getNumericCellValue());
DataFormatter formatter = new DataFormatter();//("#,##0.00");
int formatIndex = cell.getCellStyle().getDataFormat();
String cellFormattedData = formatter.formatRawCellContents(cell.getNumericCellValue(), formatIndex, "#,##0.00");
CellData = cellFormattedData;
break;
case Cell.CELL_TYPE_STRING:
System.out.println("Last evaluated as "" cell.getRichStringCellValue() """);
CellData = cell.getStringCellValue();
break;
}
}
return CellData;
} catch (Exception e) {
return "";
}
}
Комментарии:
1. Где ваш код?
2. Пожалуйста, поделитесь кодом, давайте посмотрим, что вы пробовали в первую очередь?
3. Только что добавлено. Дайте мне знать, если у вас есть какие-либо идеи. Когда я использую метод, debug переходит в case Cell.CELL_TYPE_STRING и возвращает пустую строку
4. Как этот вопрос связан с Selenium ? Я что-то упустил?
5. Не могли бы вы поделиться ссылкой для просмотра автоматически сгенерированного файла?