Home » excel » How to create an Excel file based on CSV file using Java?

How to create an Excel file based on CSV file using Java?

Posted by: admin March 9, 2020 Leave a comment


I have a requirement to create an XLS file on the basis of a CSV file using Java.

Please suppest to me which API is best to create excel file.


How to&Answers:

I suggest you use the Apache POI framework (specifically the HSSF / XSSF API) for writing out the XLS file.

For reading a CSV file I suggest you use OpenCSV as it will take care of escaped characters etc for you.

Putting together the POI example from here and the OpenCSV example from here gives you this:

import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import au.com.bytecode.opencsv.CSVReader;

class Test {
    public static void main(String[] args) throws IOException {
        Workbook wb = new HSSFWorkbook();
        CreationHelper helper = wb.getCreationHelper();
        Sheet sheet = wb.createSheet("new sheet");

        CSVReader reader = new CSVReader(new FileReader("data.csv"));
        String[] line;
        int r = 0;
        while ((line = reader.readNext()) != null) {
            Row row = sheet.createRow((short) r++);

            for (int i = 0; i < line.length; i++)

        // Write the output to a file
        FileOutputStream fileOut = new FileOutputStream("workbook.xls");

enter image description here enter image description here


Apache POI is a library that can handle all kinds of microsoft office documents, including MS Excel. You can read the content of the csv file with simple java code and use that library to create and save a MS Excel document.


There are many check


you will get a lot of alternative. Just google.


You may try Aspose.Cells for Java. You can use this component to open a CSV file and save it as XLS file using Java. It also helps you work with different Excel file versions.

Disclosure: I work as developer evangelist at Aspose.


Using Groovy, I would do it this way:

// groovy to generate large csv file
def GROOVY_HOME = new File( System.getenv('GROOVY_HOME') )
if ( !GROOVY_HOME.canRead() ) {
  println( "Missing environment variable GROOVY_HOME: '${GROOVY_HOME}'" )

File file = new File("csv.csv")
if ( file.exists() ) {
    assert file.delete()
    assert file.createNewFile()

boolean append = true
FileWriter fileWriter = new FileWriter(file, append)
BufferedWriter buffWriter = new BufferedWriter(fileWriter)

buffWriter.write "sdiType=ReferenceValue,,,\n"
buffWriter.write "ListName,ListStartDate,Value,ValueStartDate\n"
println( "Writing to file 'csv.csv'" )

def y = 5000
while ( y-- > 0 ) {
    buffWriter.write "test" + y + ",1/1/2001,2008,1/1/2001\n"