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> | ||||
| 
 | ||||
|     <properties> | ||||
|         <poi.version>3.15</poi.version> | ||||
|         <poi.version>4.1.1</poi.version> | ||||
|         <jexcel.version>1.0.6</jexcel.version> | ||||
|     </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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user