2011-08-04 56 views
8

tôi có:Làm thế nào để gọi một Macro từ thư viện Apache POI trong Java?

  • Macro có tên là "quá trình" mà làm tất cả các công việc xử lý đối với các bảng tính của tôi.

  • Tôi muốn mã Java sử dụng Apache POI, để gọi macro này để có thể xử lý các trang tính cho tôi.

  • Tôi làm cách nào để gọi Macro trong Apache POI trong Java?

:: Chú ý ::

  • Tôi đang sử dụng import org.apache.poi.ss.usermodel trong Apache POI.

  • Vui lòng cung cấp mã mẫu. (Tôi mới vào Apache POI và Java chính nó.)

Trả lời

10

Tôi không nghĩ rằng đây là có thể. POI là thư viện để đọc/chỉnh sửa các tệp Office, macro là một con thú khác. Bạn sẽ phải thực hiện một Visual Basic cho ứng dụng thông dịch viên vào POI để thực hiện điều này. Các macro đã có trong sổ làm việc Excel của bạn được giữ nguyên, nhưng bạn không thể thêm sổ mới hoặc gọi các sổ hiện có.

+0

Tôi đã có Macro trong tệp mà tôi đang chỉnh sửa. ** Tôi chỉ muốn thực thi macro với Java POI! ** –

+13

** Không thể ** – Jacob

+0

Xin lưu ý rằng phiên bản hiện tại của POI có hỗ trợ cho các hàm Excel thông thường. – parasietje

4

Tôi nghĩ, bạn không thể.

Macros

Macros không thể được tạo ra. Tuy nhiên, đọc và viết lại các tệp macro chứa sẽ bảo vệ an toàn các macro.

Apache POI Limitations

+0

Tôi đã có Macro trong tệp của mình mà tôi đang chỉnh sửa. ** Tôi chỉ muốn thực hiện macro với Java POI! ** –

+9

Lặp đi lặp lại cho biết mục tiêu của bạn sẽ không làm cho nó kỳ diệu xảy ra. – Ben

6

Bạn có thể sử dụng công cụ khác như com4j. Tôi đã tạo một POC ngay hôm nay và hoạt động như một sự quyến rũ. Chỉ cần làm theo các bước sau:

  1. Tải về phiên bản cuối cùng here
  2. Sử dụng Apache Ant xây dựng mẫu: samples \ trội
  3. Với mã được tạo ra bởi Tlbimp (nó chỉ là một phần của com4j), tạo ra một ứng dụng nhỏ và viết mã như:

    // Starts excel and open an existing workbook 
    _Application app = ClassFactory.createApplication(); 
    app.setVisible(0, true); 
    _Workbook wb = app.getWorkbooks().open("c:\\test.xlsx", null, null, null, null, null, null, null, 
         null, null, null, null, null, null, null, 0); 
    
    // run a macro 
    Variant macro = new Variant(Variant.Type.VT_BSTR); 
    macro.set("my_macro"); 
    wb.getApplication().run(macro, null, null, null, null, null, null, null, null, null, null, null, 
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
         null, null, null, null); 
    
    // Save the excel file and quit 
    Variant saveBeforeExit = new Variant(Variant.Type.VT_BOOL); 
    saveBeforeExit.set(1); 
    wb.close(saveBeforeExit, Variant.getMissing(), Variant.getMissing(), 0); 
    app.quit(); 
    
  4. ví dụ khác: com4j tutorials

+3

Có thực sự hữu ích không? Có ai xác nhận điều này không? –

Các vấn đề liên quan