У меня есть файл Excel- (xlsx-) с двумя ячейками:
- А1 - это число со значением "5,3"
- B1 - формула = "Число:" & A1
Когда я открываю этот Excel-файл в немецком LibreOffice или Excel, тогда оба показывают мне содержимое ячейки через запятую:
Когда я читаю содержимое с помощью Apache POI (версия 3.17; new DataFormatter(Locale.GERMAN).formatCellValue(cell, formulaEvaluator)
), числовая ячейка A1 правильно форматируется как «5,3», но объединенная ячейка B1 неожиданно форматируется с точкой в качестве разделителя.
Вот мой пример кода:
import java.io.File;
import java.util.Locale;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class MiniPoiTest {
public static void main(String[] args) throws Exception {
// doesn't change anything
// LocaleUtil.setUserLocale(Locale.GERMAN);
// read workbook
File xlsxFile = new File("string-concat.xlsx");
Workbook workbook = WorkbookFactory.create(xlsxFile);
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
formulaEvaluator.clearAllCachedResultValues();
Sheet sheet = workbook.getSheetAt(0);
// read two cells
Row row = sheet.getRow(0);
Cell numericCell = row.getCell(0);
Cell concatenatedCell = row.getCell(1);
// print numeric cell
String numericCellValue = new DataFormatter(Locale.GERMAN).formatCellValue(numericCell,
formulaEvaluator);
System.out.println("Value in " + numericCell.getAddress().formatAsString()
+ " (numeric cell): '" + numericCellValue + "'");
// print concatenated cell
String concatenatedCellValue = new DataFormatter(Locale.GERMAN)
.formatCellValue(concatenatedCell, formulaEvaluator);
System.out.println("Value in " + concatenatedCell.getAddress().formatAsString()
+ " (concatenated cell): '" + concatenatedCellValue + "'");
System.out.println("Formula in " + concatenatedCell.getAddress().formatAsString()
+ " (concatenated cell): '" + concatenatedCell.getCellFormula() + "'");
}
}
Результат при выполнении примера кода:
Value in A1 (numeric cell): '5,3'
Value in B1 (concatenated cell): 'Number: 5.3'
Formula in B1 (concatenated cell): '"Number: "&A1'
Есть ли какая-нибудь хитрость, чтобы получить составное содержимое B1, также отформатированное с немецким цифровым разделителем ("Number: 5,3")?