Convert Excel 2007 to CSV - Java example

In the last article, we examined how to convert XLS to CSV in Java. When it comes to converting Excel 2007, 2012 (XLSX) documents, we need to slightly take a different approach. We will explain how to convert XLSX to CSV, and in order to do this, we will use the following libraries:
  • Apache POI v3.8
  • OpenCSV (any latest version would do)

XLSX Example / JAR Files

The input XLSX file would be a similar one as of the last tutorial. The list of JAR files you would require for this example to work is provided below:
  • dom4j-1.6.1.jar
  • opencsv-2.3.jar
  • poi-3.8.jar
  • poi-ooxml-3.8.jar
  • poi-ooxml-schemas-3.8.jar
  • xmlbeans-2.3.0.jar

Excel 2007 to CSV – Full Java Example

The complete Java program that converts XLSX (Open Office Format)  to CSV format is provided below:
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import java.util.Iterator;
public class xlsx2csv {  
        public static void main(String[] args) throws Exception{
                //Read the XLSX file into FileInputStream object
                FileInputStream input_document = new FileInputStream(new File("C:\\excel_to_csv.xlsx"));
                // Access input workbook in XSSFWorkbook object
                XSSFWorkbook my_xls_workbook = new XSSFWorkbook(input_document); 
                // Access input worksheet
                XSSFSheet  my_worksheet = my_xls_workbook.getSheetAt(0); 
                // To iterate over the rows
                Iterator<Row> rowIterator = my_worksheet.iterator();
                // OpenCSV writer object to create CSV file
                FileWriter my_csv=new FileWriter("convertedCSVFile.csv");
                CSVWriter my_csv_output=new CSVWriter(my_csv); 
                //Loop through rows.
                while(rowIterator.hasNext()) {
                        Row row =; 
                        int i=0;//String array
                        //the example input xlsx has only two columns.
                        String[] csvdata = new String[2];
                        Iterator<Cell> cellIterator = row.cellIterator();
                                while(cellIterator.hasNext()) {
                                        Cell cell =; //Fetch CELL
                                        switch(cell.getCellType()) { //Identify CELL type
                                                //you need to add more code here based on
                                                //your requirement / transformations
                                        case Cell.CELL_TYPE_STRING:
                                                csvdata[i]= cell.getStringCellValue();                                              
                my_csv_output.close(); //close the CSV file
                //we created CSV from XLSX!
                input_document.close(); //close xlsx file

You must have all the JAR file mentioned above in your classpath. Otherwise, this example will not work. Also, make sure you modify the file path to point to the right Excel sheet you want to use. Depending on the number of columns in your Excel file, you will have to modify the code, marked as comments in appropriate places.

If you have a question on this tutorial, you can post it in the comments section below.

No comments: