BAEL-3656 Read Numeric Strings in Excel Cells as a String with Apache POI
This commit is contained in:
parent
0846a55404
commit
7de715c611
|
@ -32,7 +32,7 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<poi.version>3.15</poi.version>
|
<poi.version>4.1.1</poi.version>
|
||||||
<jexcel.version>1.0.6</jexcel.version>
|
<jexcel.version>1.0.6</jexcel.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package com.baeldung.poi.excel;
|
||||||
|
|
||||||
|
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.Workbook;
|
||||||
|
|
||||||
|
public class ExcelCellFormatter {
|
||||||
|
|
||||||
|
public String getCellStringValue(Cell cell) {
|
||||||
|
DataFormatter formatter = new DataFormatter();
|
||||||
|
return formatter.formatCellValue(cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCellStringValueWithFormula(Cell cell, Workbook workbook) {
|
||||||
|
DataFormatter formatter = new DataFormatter();
|
||||||
|
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
|
||||||
|
return formatter.formatCellValue(cell, evaluator);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,128 @@
|
||||||
|
package com.baeldung.poi.excel;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
|
import org.apache.poi.ss.usermodel.CellStyle;
|
||||||
|
import org.apache.poi.ss.usermodel.DataFormat;
|
||||||
|
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.xssf.usermodel.XSSFWorkbook;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ExcelCellFormatterIntegrationTest {
|
||||||
|
private static int STRING_CELL_INDEX = 0;
|
||||||
|
private static int BOOLEAN_CELL_INDEX = 1;
|
||||||
|
private static int RAW_NUMERIC_CELL_INDEX = 2;
|
||||||
|
private static int FORMATTED_NUMERIC_CELL_INDEX = 3;
|
||||||
|
private static int FORMULA_CELL_INDEX = 4;
|
||||||
|
|
||||||
|
private String fileLocation;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void generateExcelFile() throws IOException {
|
||||||
|
|
||||||
|
Workbook workbook = new XSSFWorkbook();
|
||||||
|
|
||||||
|
Sheet sheet = workbook.createSheet("Test");
|
||||||
|
Row row = sheet.createRow(0);
|
||||||
|
Cell cell = row.createCell(STRING_CELL_INDEX);
|
||||||
|
cell.setCellValue("String Test"); // STRING cell
|
||||||
|
|
||||||
|
cell = row.createCell(BOOLEAN_CELL_INDEX);
|
||||||
|
cell.setCellValue(true); // BOOLEAN cell
|
||||||
|
|
||||||
|
cell = row.createCell(RAW_NUMERIC_CELL_INDEX);
|
||||||
|
cell.setCellValue(1234.5678); // NUMERIC cell
|
||||||
|
|
||||||
|
cell = row.createCell(FORMATTED_NUMERIC_CELL_INDEX);
|
||||||
|
cell.setCellValue(1234.5678);
|
||||||
|
CellStyle curStyle = workbook.createCellStyle();
|
||||||
|
DataFormat df = workbook.createDataFormat();
|
||||||
|
curStyle.setDataFormat(df.getFormat("$#,##0.00"));
|
||||||
|
cell.setCellStyle(curStyle); // NUMERIC cell with format rule
|
||||||
|
|
||||||
|
cell = row.createCell(FORMULA_CELL_INDEX);
|
||||||
|
cell.setCellFormula("SUM(C1:D1)"); // FORMULA cell
|
||||||
|
|
||||||
|
File tempFile = File.createTempFile("ExcelCellFormatterIntegrationTest", ".xlsx");
|
||||||
|
|
||||||
|
fileLocation = tempFile.getAbsolutePath();
|
||||||
|
|
||||||
|
FileOutputStream outputStream = new FileOutputStream(fileLocation);
|
||||||
|
workbook.write(outputStream);
|
||||||
|
workbook.close();
|
||||||
|
outputStream.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void gvieStringCell_whenGetCellStringValue_thenReturnStringValue() throws IOException {
|
||||||
|
Workbook workbook = new XSSFWorkbook(fileLocation);
|
||||||
|
Sheet sheet = workbook.getSheetAt(0);
|
||||||
|
Row row = sheet.getRow(0);
|
||||||
|
|
||||||
|
ExcelCellFormatter formatter = new ExcelCellFormatter();
|
||||||
|
assertEquals("String Test", formatter.getCellStringValue(row.getCell(STRING_CELL_INDEX)));
|
||||||
|
workbook.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void gvieBooleanCell_whenGetCellStringValue_thenReturnBooleanStringValue() throws IOException {
|
||||||
|
Workbook workbook = new XSSFWorkbook(fileLocation);
|
||||||
|
Sheet sheet = workbook.getSheetAt(0);
|
||||||
|
Row row = sheet.getRow(0);
|
||||||
|
|
||||||
|
ExcelCellFormatter formatter = new ExcelCellFormatter();
|
||||||
|
assertEquals("TRUE", formatter.getCellStringValue(row.getCell(BOOLEAN_CELL_INDEX)));
|
||||||
|
workbook.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void gvieNumericCell_whenGetCellStringValue_thenReturnNumericStringValue() throws IOException {
|
||||||
|
Workbook workbook = new XSSFWorkbook(fileLocation);
|
||||||
|
Sheet sheet = workbook.getSheetAt(0);
|
||||||
|
Row row = sheet.getRow(0);
|
||||||
|
|
||||||
|
ExcelCellFormatter formatter = new ExcelCellFormatter();
|
||||||
|
assertEquals("1234.5678", formatter.getCellStringValue(row.getCell(RAW_NUMERIC_CELL_INDEX)));
|
||||||
|
assertEquals("$1,234.57", formatter.getCellStringValue(row.getCell(FORMATTED_NUMERIC_CELL_INDEX)));
|
||||||
|
workbook.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void gvieFormualCell_whenGetCellStringValue_thenReturnOriginalFormulaString() throws IOException {
|
||||||
|
Workbook workbook = new XSSFWorkbook(fileLocation);
|
||||||
|
Sheet sheet = workbook.getSheetAt(0);
|
||||||
|
Row row = sheet.getRow(0);
|
||||||
|
|
||||||
|
ExcelCellFormatter formatter = new ExcelCellFormatter();
|
||||||
|
assertEquals("SUM(C1:D1)", formatter.getCellStringValue(row.getCell(FORMULA_CELL_INDEX)));
|
||||||
|
workbook.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void gvieFormualCell_whenGetCellStringValueForFormula_thenReturnOriginalFormulatring() throws IOException {
|
||||||
|
Workbook workbook = new XSSFWorkbook(fileLocation);
|
||||||
|
Sheet sheet = workbook.getSheetAt(0);
|
||||||
|
Row row = sheet.getRow(0);
|
||||||
|
|
||||||
|
ExcelCellFormatter formatter = new ExcelCellFormatter();
|
||||||
|
assertEquals("2469.1356", formatter.getCellStringValueWithFormula(row.getCell(FORMULA_CELL_INDEX), workbook));
|
||||||
|
workbook.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void cleanup() {
|
||||||
|
File testFile = new File(fileLocation);
|
||||||
|
if (testFile.exists()) {
|
||||||
|
testFile.deleteOnExit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue