2012-12-12 42 views
5

tôi cố gắng để chuyển đổi số vào phong cách tiền tệ châu Âu với Apache POIApache POI dữ liệu ngoại tệ Format

HSSFDataFormat cf = workbook.createDataFormat(); 
currencyCellStyle = workbook.createCellStyle(); 
currencyCellStyle.setDataFormat(cf.getFormat("#.###,#0")); 

Tôi có ví dụ số 2400 và 2,4

Những gì tôi muốn là 2400,00 và 2, 40. Nhưng POI cho tôi 2400,0 và 2,40. Khi tôi cố gắng thay đổi nó thành

currencyCellStyle.setDataFormat(cf.getFormat("#.###,00")); 

Tôi nhận được kết quả 2400,00 và 2,400. Đó cũng không phải những gì tôi muốn.

Có khả năng để có được cả hai giá trị chính xác không?

Thx và Chúc mừng

+0

Tôi nghĩ bạn cần phải đặt chuỗi định dạng thành kiểu Mỹ/Anh, sau đó mở tệp trong bản sao Excel ở ngôn ngữ Châu Âu và nó sẽ hiển thị như bạn mong đợi. Bạn đã thử điều đó chưa? – Gagravarr

+0

thx hoạt động một phần. Dấu phẩy và điểm được đặt theo kiểu châu Âu khi sử dụng "#, ###. # 0" được thay đổi khi mở trong excel thành 2.400,0. Nhưng tôi chỉ nhận được một số không sau dấu phẩy. Số đầu vào là 2400. – Logarith

+1

Điều gì sẽ xảy ra nếu bạn tạo tệp mới trong Excel, tạo kiểu cho nó theo cách bạn muốn, sau đó tải nó trong Apache POI và đọc chuỗi định dạng, bạn thấy gì ở đó? – Gagravarr

Trả lời

8

Cuối cùng Gagravarr đã đưa ra các mẹo phù hợp để giải quyết câu hỏi này.

Giải pháp cuối cùng là:

HSSFDataFormat cf = workbook.createDataFormat(); 
currencyCellStyle = workbook.createCellStyle(); 
currencyCellStyle.setDataFormat(cf.getFormat("#,##0.00\\ _€")); 

Các giải pháp đã đưa ra sau khi tạo một tập tin Excel bằng tay. Sau đó đọc nó bằng Apache Poi và chiết xuất chuỗi định dạng với

cell.getCellStyle().getDataFormatString() 

Kết quả là #, ## 0.00 \ _ €

Vì vậy, tôi sử dụng định dạng này trong đoạn mã trên, mà đã kết quả chính xác.

Thx

+0

Xin chào, tôi có cùng một vấn đề. Đọc trang này tôi nhận được chuỗi định dạng của mình, đặt giá trị đó thành biến currencyCellStyle nhưng tôi không biết cách sử dụng nó để đọc giá trị chính xác. cell.getNumericCellValue()? cell.getStringCellValue()? Bạn có thể giải thích cách bạn đọc giá trị ô bằng cách sử dụng định dạng dữ liệu bạn vừa đặt không? Cảm ơn bạn. – Andrea

+0

Tôi cũng muốn thêm rằng các ô tôi cần đọc là cả số và số được tính toán, do đó, cũng có các công thức được đánh giá. Tôi có một HSSFFormulaEvaluator để đánh giá chúng, nhưng kết quả vẫn không phù hợp với những gì Excel cho thấy kết quả (tôi đang nói về độ chính xác và làm tròn). – Andrea

+0

hi, xin lỗi tôi nghĩ rằng tôi không thể giúp bạn, bởi vì tôi không đọc các giá trị tế bào. Tôi chỉ viết với setCellValue. Ví dụ: cell.setCellStyle (currencyCellStyle) và cell.setCellValue (giá trị) – Logarith

3

Bản cập nhật của cách tiếp cận trên: Sau khi tự tạo ra tập tin với định dạng tiền tệ cần excel, chuỗi định dạng có thể thu được dưới "Custom" loại (trong hộp thoại di động Format). Bằng cách đó, chúng ta không cần đọc excel qua poi để lấy chuỗi này.

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