2009-06-18 39 views
6

Tôi hiện đang làm việc trên một ứng dụng Java có sử dụng tệp excel mẫu có chứa bảng tổng hợp.Làm mới Bảng Pivot với Apache POI

Tệp mẫu cũng có bảng dữ liệu chứa bảng tổng hợp. Bảng dữ liệu này được nạp động trong ứng dụng java thông qua api Apache POI.

Khi tôi mở tệp excel, tôi phải làm mới bảng Pivot theo cách thủ công để tải dữ liệu chính xác.

Có cách nào để làm mới bảng Pivot với api POI để tôi không phải thực hiện thủ công không?

+0

Tôi có một yêu cầu và tôi tò mò làm thế nào bạn đạt được dựa bảng pivot của bạn trên bảng dữ liệu của bạn. Tôi có một bảng excel mẫu mà tôi điền với dữ liệu bằng cách sử dụng apache poi. Tuy nhiên, tôi có vấn đề dựa trên bảng tổng hợp của tôi trên dữ liệu đã điền này. bất kỳ ý tưởng ?? – Ash

+0

bất kỳ trợ giúp nào ở đây ?? – Ash

+0

Tôi cũng gặp vấn đề khi tôi điền dữ liệu vào trang tính nguồn rồi ghi tệp lên đĩa, bảng tổng hợp trong tệp kết quả không còn nguyên vẹn. Tôi đang sử dụng JXL cho mục đích này. Bất kỳ trợ giúp nào được đánh giá cao như tôi bị mắc kẹt. –

Trả lời

1

Câu trả lời cơ bản cho điều này là không. POI là trình đọc và ghi định dạng tài liệu. Cập nhật bảng Pivot là một vấn đề về động cơ excel. Chắc chắn, một ứng dụng khác có thể cố gắng sao chép hành vi của công cụ Excel ở đây, nhưng điều đó thực sự sẽ trở nên xấu xí. Tôi khuyên bạn nên sử dụng Joel's khắc phục sự cố khi truy cập các đối tượng COM excel qua dịch vụ web để hoàn thành công việc này.

3

bài này nói rằng bạn có thể bật một tùy chọn trên bảng tổng hợp sẽ gây ra nó để làm mới bản thân tự động mỗi khi bảng tính được mở ra:

How can I refresh all the pivot tables in my excel workbook with a macro?

Hy vọng rằng đây vẫn sẽ là sự thật sau khi bạn có đã sử dụng Apache POI để làm mới hoặc mở rộng các hàng dữ liệu mà trên đó các bảng tổng hợp dựa trên đó.

4

Có thể. Trong số PivotCacheDefinition, có một thuộc tính refreshOnLoad có thể được đặt thành true. Bộ nhớ cache sau đó được làm mới khi sổ làm việc được mở. More information here.

Trong POI, điều này có thể được thực hiện bằng cách gọi phương thức setRefreshOnLoad(boolean bool), có tham số boolean, trên CTPivotCacheDefinition.

EDIT: Apache POI giờ đây cung cấp khả năng tạo bảng tổng hợp và bảng tổng hợp được làm mới trên tải dưới dạng mặc định. Class XSSFPivotTable

+0

Gọi phương thức đối tượng nào? Ý tôi là 'setRefreshOnLoad (boolean bool)'. –

+0

Trên CTPivotCacheDefinition. – Solitude

+1

Điều này không hoạt động khi bảng tổng hợp đã tồn tại trong tài liệu excel (tức lànó được * đọc * qua Apache POI, không * được tạo *). Cuộc gọi đến 'myXSSFPivotTable.getPivotCacheDefinition()' luôn trả về null. – SebastianH

5

Bạn có thể kích hoạt một tùy chọn đơn giản sẽ làm mới bảng tổng hợp mỗi khi tệp được mở.

Microsoft documentation này nói:

Trong PivotTable hộp thoại Options, vào tab Data, chọn dữ liệu Refresh khi mở hộp kiểm tra tập tin.

+0

Apache POI sẽ ghi đè lên nó. –

+1

+1! Câu trả lời này không chỉ cung cấp giải pháp cho vấn đề này mà còn cho tôi thấy một tùy chọn Excel rất hữu ích ngay cả khi không làm việc với Apache POI :) Và trong trường hợp của tôi, Apache POI không ** ghi đè lên nó! Tôi không tạo hoặc điều khiển Bảng tổng hợp như vậy thông qua POI. Tôi chỉ cập nhật các trang dữ liệu nơi các biểu đồ xoay vòng quay lại. – SebastianH

+0

Tôi có thể đạt được điều tương tự trong JXL không? Tôi đang viết các bảng dữ liệu nhưng khi JXL ghi tệp, nó chỉ loại bỏ Bảng Pivot. Cần giúp đỡ về vấn đề này. –

0

này có thể làm việc:

XSSFPivotTable pivotTable = pivotSheet.getPivotTables().get(0);  
pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().setRefreshOnLoad(true); 
+0

không có phương thức getPivotTables() nào cho đối tượng XSSFPivotTable. POI thực hiện công việc đọc và ghi tài liệu Excel. Bảng Pivot nằm bên trong Excel và công cụ Excel xử lý nó. Excel Engine đảm bảo rằng khi dữ liệu thay đổi bảng Pivot được cập nhật. Có một AutoRefresh trên tải của tài liệu Excel –

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