2013-07-29 40 views
9

Tôi đang sử dụng apache POI để thay đổi các ô trong bảng excel. Sau khi tôi thay đổi các giá trị, các ô có công thức tương ứng với các ô đã được thay đổi sẽ không cập nhật.Công thức Excel Không cập nhật ô

Khi tôi đi vào excel và bấm vào ô với công thức, và sau đó bấm vào thanh chức năng, công thức cập nhật.

Tôi có các tùy chọn tính toán được đặt để tự động cập nhật.

Ví dụ nhanh.

Row:

[A2 + A3] [1] [2]

A1 đây sẽ bằng 3

Khi tôi thay đổi nó bằng cách sử POI:

[A2 + A3] [2] [5]

A1 vẫn bằng 3 cho đến khi tôi nhấp vào ô đó.

Làm mới sổ làm việc hoặc trang tính cũng không hoạt động. Đây có phải là vấn đề với excel hoặc POI không? Bất cứ ai có thể nghĩ về một workaround?

+0

Câu hỏi của bạn không rõ ràng. Vui lòng mô tả chuỗi hoạt động chính xác, bao gồm mở và đóng trang tính trong Excel. Bạn có thực hiện các bước sau đây không? 1) Tạo trang tính; 2) Đóng Excel; 3) Chạy chương trình Java của bạn; 4) Mở lại bảng tính trong Excel? Nếu không, hãy mô tả chính xác những gì bạn làm. –

+2

Những người khác trả lời mà không có mô tả như vậy, và mô tả như vậy là một chút không liên quan trong tình huống này. – PandaBearSoup

Trả lời

20

Nếu bạn đang sử dụng workbook XSSF, bạn có thể đánh giá lại tất cả các ô công thức như sau:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

Một API tương tự tồn tại nếu bạn đang sử dụng một workbook HSSF:

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

Hoặc, tùy thuộc vào chính xác cách bạn thiết lập và những gì cụ thể bạn đang cố gắng hoàn thành, bạn sẽ có thể tìm thấy giải pháp của mình here

+0

Vâng, đây là những gì được sử dụng như một cách giải quyết khi tôi nhận thấy vấn đề.Tôi tự hỏi tại sao excel không cập nhật các ô tự động, không chỉ khi tôi nhấp vào chúng. Làm mới sổ làm việc cũng sẽ hoạt động. Có vẻ như một con bọ. Tôi sẽ chấp nhận câu trả lời này vì nó giải quyết triệt để vấn đề gốc. – PandaBearSoup

+1

@PandaBearSoup Phần [Tại sao đánh giá công thức] (http://poi.apache.org/spreadsheet/eval.html#WhyEvaluate) của tài liệu Apache POI giải thích lý do bạn cần làm điều đó, tôi khuyên bạn nên đọc kỹ – Gagravarr

2

Bạn phải kích hoạt tính toán lại một cách rõ ràng. Xem phần Tính toán lại công thức here về lý do tại sao & cách thực hiện.

9

Trong trường hợp trang tính của bạn có công thức cho tiếng nói A3=sum(A1:A2) được tính toán và nó đang làm việc tốt với A1=5, A2 =4. Bây giờ nếu thay đổi giá trị của A2 với 2 như

sh.getRow(0).getCell(0).setCellValue(2); // thiết lập A1 = 2 và thực hiện ghi hoạt động, kiểm tra giá trị của A3 nó vẫn hiển thị 9 Có vẻ như sai nhưng actully thì không. Vấn đề là Excel lưu trữ các kết quả tính toán trước đó và bạn cần kích hoạt tính toán lại để cập nhật chúng.

wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); hoặc với

wb.setForceFormulaRecalculation(true); và sau đó thực hiện Write hoạt động. Điều này sẽ cho bạn kết quả chính xác. Để biết chi tiết check here

+1

Công việc dán bản sao đẹp. –

+0

Tôi không có đủ danh tiếng để đăng bình luận cho giải pháp trên. Vì vậy, tôi đã dán giải pháp. – nilamber

+0

cảm ơn nhiều !!! wb.setForceFormulaRecalculation (true); => làm việc như một sự quyến rũ đối với tôi! –

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