2013-08-21 41 views
5

Tôi đã viết tệp java để viết xlsm (Excel 2007).ghi vào xlsm (Excel 2007) bằng cách sử dụng apache poi

Sử dụng Thư viện POI Apache, Viết tệp xlsx là thành công. Và viết file xlsm là thành công. Nhưng tôi không thể mở tập tin xlsm vì lỗi khi mở tập tin xlsm.

Có thể viết tệp xlsm bằng Thư viện Apache POI không?

Nếu có thể viết xlsm, vui lòng cung cấp dòng hướng dẫn Cách ghi tệp xlsm bằng thư viện Apache poi.

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(); 
    } 

Cảm ơn

+1

bạn đang sử dụng phiên bản POI nào? – centic

+0

Chúng tôi đang sử dụng phiên bản poi-3.8. – user2636961

Trả lời

12

Theo tài liệu của Apache POI nó không phải là có thể tạo ra các macro: http://poi.apache.org/spreadsheet/limitations.html

Tuy nhiên nó có thể đọc và viết lại các file có chứa macro và Apache POI một cách an toàn mà vẫn duy trì các macro.

Dưới đây là một ví dụ:

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(); 
} 

Các tập tin được tạo ra sẽ không cung cấp cho bạn một lỗi.

+1

làm thế nào tôi có thể viết resultset trong tờ đặc biệt của xlsm. – Rik

2

xlsm là Excel Spreadsheet với Macros, nếu bạn không cần macro trong bảng của bạn, bạn chỉ có thể sử dụng .xlsx như phần mở rộng là tốt.

Bạn cũng có thể tạo tệp .xls (ví dụ: định dạng cũ hơn) qua HSSFWorkbook, Excel sẽ có thể mở .xls tốt. Chỉ giới hạn với cách tiếp cận này là .xls được giới hạn trong số hàng đến 65k.