Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

write to xlsm (Excel 2007) using apache poi

I have written java file for writing xlsm(Excel 2007).

Using Apache POI Library, Writing xlsx file is success. And Writing xlsm file is success. But I can't open the xlsm file because of error when open xlsm file.

Would it feasible to write xlsm file using Apache POI Library?

If it is feasible to write xlsm, Please kindly provide guide line How to write xlsm file using Apache poi library.

XSSFWorkbook workBook = new XSSFWorkbook();
XSSFSheet sheet = workBook.createSheet("Related_SRC");
String realName = "Test.xlsm";
File file = new File("C:\\sdpApp", realName);
try {
    FileOutputStream fileOutput = new FileOutputStream(file);
        workBook.write(fileOutput);
        fileOutput.close();
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }

Thanks

like image 839
user2636961 Avatar asked Aug 21 '13 06:08

user2636961


2 Answers

According to the documentation of Apache POI it is not possible to create macros: http://poi.apache.org/spreadsheet/limitations.html

However it's possible to read and re-write files containing macros and apache poi will safely preserve the macros.

Here is an example:

String fileName = "C:\\new_file.xlsm";

try {

    Workbook workbook;
    workbook = new XSSFWorkbook(
        OPCPackage.open("resources/template_with_macro.xlsm")
    );

    //DO STUF WITH WORKBOOK

    FileOutputStream out = new FileOutputStream(new File(fileName));
    workbook.write(out);
    out.close();
    System.out.println("xlsm created successfully..");

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (InvalidFormatException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

The file that is created will not give you an error.

like image 144
Dennis De Reyer Avatar answered Sep 28 '22 12:09

Dennis De Reyer


XLSM is Excel Spreadsheet with Macros, if you don't need macros in your sheet, you can simply use .xlsx as extension as well.

You could also produce an .xls file (i.e. older format) via HSSFWorkbook, Excel should be able to open .xls just fine. Only limitation with this approach is that .xls is limited in the number of rows to 65k.

like image 21
centic Avatar answered Sep 28 '22 12:09

centic