1. First we need a util class
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.FormulaEvaluator; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; public class ExcelUtil { public static Cell getCell(Row row, int i) { Cell cell = row.getCell(i); if (null == cell) { cell = row.createCell(i); } return cell; } public static Row getRow(Sheet sheet, int i) { Row row = sheet.getRow(i); if (null == row) { row = sheet.createRow(i); } return row; } public static String getValue(Cell cell) { FormulaEvaluator evaluator = cell.getSheet().getWorkbook() .getCreationHelper().createFormulaEvaluator(); CellValue cellValue = evaluator.evaluate(cell); switch (cellValue.getCellType()) { case Cell.CELL_TYPE_BLANK: return ""; case Cell.CELL_TYPE_STRING: return cellValue.getStringValue(); case Cell.CELL_TYPE_NUMERIC: return Double.valueOf(cellValue.getNumberValue()).toString(); case Cell.CELL_TYPE_BOOLEAN: return Boolean.valueOf(cellValue.getBooleanValue()).toString(); case Cell.CELL_TYPE_ERROR: return String.valueOf(cellValue.getErrorValue()); case Cell.CELL_TYPE_FORMULA: return null; default: return null; } } }
?
2. Handler
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; public class FlatFileConversionUtil { private static String headers = "aaa~bbb~ccc~ddd"; private static String rowDelimeter = "~"; private static String colDelimeter = ","; public static void convertToFlatFile(Sheet fromSheet, String csvFileName) throws IOException { StringBuilder fileContent = new StringBuilder(); fileContent.append(headers); fileContent.append(rowDelimeter); String contents = readContents(fromSheet); fileContent.append(contents); writeToFile(csvFileName, fileContent.toString()); } /** * Write fileContent to csv file <br/> * * @param csvFileName * @param fileContent * "111,222,333~111,222,333" * @throws IOException */ private static void writeToFile(String csvFileName, String fileContent) throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(csvFileName)); String[] lines = fileContent.split(rowDelimeter); for (int i = 0; i < lines.length; i++) { String line = lines[i]; writer.write(line); if (i != (lines.length - 1)) { writer.newLine(); } } writer.flush(); writer.close(); } /** * Output like: * "111,222,333,444,555~111,222,333,444,555~111,222,333,444,555" <br/> * * @param fromSheet * @return */ private static String readContents(Sheet fromSheet) { StringBuilder contents = new StringBuilder(); for (int i = 1; i <= fromSheet.getLastRowNum(); i++) { String line = readRow(fromSheet, i, 109); contents.append(line); if (i != fromSheet.getLastRowNum()) { contents.append(rowDelimeter); } } return contents.toString(); } /** * Output like: "111,222,333,444,555" <br/> * * @param fromSheet * @param rowNum * @param colCount * @return rowData: "data" + colDelimeter + "data" */ private static String readRow(Sheet fromSheet, int rowNum, int colCount) { StringBuilder data = new StringBuilder(); Row row = ExcelUtil.getRow(fromSheet, rowNum); for (int i = 0; i < colCount; i++) { Cell cell = ExcelUtil.getCell(row, i); String cellValue = ExcelUtil.getValue(cell).trim(); data.append(cellValue); if ((colCount - 1) != i) { data.append(colDelimeter); } } return data.toString(); } }
?
3. Test case
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; 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; import org.junit.Test; public class ExcelFileConversionTest { @Test public void testConvertToCsv() throws InvalidFormatException, IOException { List<String> fileNameList = new ArrayList<String>(); fileNameList.add("excel_1.xlsx"); for (String fileName : fileNameList) { Workbook wb = WorkbookFactory.create(new File("/" + fileName)); int sheetCount = wb.getNumberOfSheets(); String fileNamePrefix = "ALM_"; String fileNameSuffix = ".csv"; for (int i = 0; i < sheetCount; i++) { Sheet sheet = wb.getSheetAt(i); String csvFileName = getCsvFileName(sheet, fileNamePrefix, fileNameSuffix); FlatFileConversionUtil.convertToFlatFile(sheet, csvFileName); } } } private String getCsvFileName(Sheet sheet, String fileNamePrefix, String fileNameSuffix) { Row row = ExcelUtil.getRow(sheet, 1); Cell cell = ExcelUtil.getCell(row, 0); String cobDate = ExcelUtil.getValue(cell); return fileNamePrefix + cobDate + fileNameSuffix; } }
?
?