2012-03-07 36 views
5

Nếu tôi mở MS Excel (giả định) hoặc LibreOffice Calc (thử nghiệm), tôi có thể nhập nội dung vào ô và thay đổi phông chữ của phần văn bản trong ô, chẳng hạn như làm, trong một tế bào,:Apache POI: Phông chữ một phần của ô

văn bản này là đậmvăn bản này được in nghiêng

một lần nữa, hãy để tôi nhắc lại, rằng chuỗi này có thể tồn tại trong các định dạng trình bày trong một tế bào.

Mức độ tuỳ chỉnh này có thể đạt được với Apache POI không? Chỉ tìm kiếm dường như cho thấy cách áp dụng phông chữ cho toàn bộ ô.

Cảm ơn

=== CẬP NHẬT ===

Như đã đề cập dưới đây, tôi đã kết thúc đi với HSSFRichTextString (như tôi đang làm việc với HSSF). Tuy nhiên, sau khi áp dụng phông chữ (tôi đã cố gắng in đậm và gạch chân), văn bản của tôi sẽ không thay đổi. Đây là những gì tôi đã cố gắng. Để đưa mọi thứ vào bối cảnh, tôi đang làm việc liên quan đến thể thao, trong đó nó phổ biến để hiển thị một trận đấu ở dạng "xa lộ" @ "hometeam", và tùy thuộc vào một số điều kiện bên ngoài, tôi muốn tạo một hoặc chữ đậm khác. Mã của tôi trông giống như sau:

String away = "foo"; 
    String home = "bar"; 
    String bolden = "foo" 
    HSSFRichTextString val = new HSSFRichTextString(away+"@"+home); 

    if(bolden.equals(home)) { 
     val.applyFont(val.getString().indexOf("@") + 1, val.length(), Font.U_SINGLE); 
    } else if(bolden.equals(away)) { 
     val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE); 
    } 
    gameHeaderRow.createCell(g + 1).setCellValue(val); 

Như bạn có thể thấy, đây là một đoạn mã từ một chức năng phức tạp hơn sẽ được hiển thị, nhưng gánh nặng của việc này là mã thực tế. Như bạn có thể thấy, tôi đang làm val.applyFont cho một phần của một chuỗi, và sau đó thiết lập một giá trị ô bằng chuỗi. Vì vậy, tôi không hoàn toàn chắc chắn những gì tôi đã làm sai ở đó. Mọi lời khuyên đều được đánh giá cao.

Cảm ơn

KFJ

Trả lời

5

POI không hỗ trợ nó, lớp bạn đang muốn tìm RichTextString. Nếu ô của bạn là một văn bản, bạn có thể lấy RichTextString cho nó, sau đó áp dụng phông chữ cho các phần khác nhau của nó để làm cho các phần khác nhau của văn bản trông khác nhau.

+0

Cảm ơn bạn đã trả lời câu hỏi của tôi. Tôi đang làm việc, và đây là một dự án phụ, vì vậy tôi sẽ cố gắng tối nay, và nếu nó hoạt động, tôi sẽ đánh dấu câu trả lời của bạn :) –

+0

Wow. Mất nhiều thời gian hơn tôi mong đợi. Xin lỗi vì điều đó. Dù sao thì nó cũng không thành công. Không có lỗi hoặc bất cứ điều gì, nhưng văn bản vẫn chưa được định dạng. Tôi sẽ sửa bài viết của tôi ở đây và cho bạn thấy những gì đang xảy ra. –

+0

Nếu bạn áp dụng phông chữ đó cho toàn bộ ô (thông qua kiểu), có giống như bạn mong đợi không? (Đó sẽ là một cách hay để kiểm tra xem bạn có đúng phông chữ) không? – Gagravarr

1

Bạn sẽ bị cạn kiệt nếu làm việc với SXSSFWorkbook, vì nó không hỗ trợ định dạng như vậy. Kiểm tra tại đây. http://apache-poi.1045710.n5.nabble.com/RichTextString-isn-t-working-for-SXSSFWorkbook-td5711695.html

+0

Tôi đánh giá cao nhận xét và tôi muốn cập nhật chủ đề này nhưng đây là cả câu hỏi cũ và đã có câu trả lời được chấp nhận.Tôi luôn được chào đón với các thành viên mới vào vũ trụ StackExchange, nhưng bạn có thể muốn nhấp vào "trợ giúp" -> "Tham quan" ở đầu trang. –

+0

Cảm ơn bạn rất nhiều vì điều này! Tôi hiểu, rằng nó thực sự nên là một bình luận và không cung cấp câu trả lời cho câu hỏi, nhưng nó đã cứu buổi tối của tôi. Cảm ơn bạn rất nhiều! – bsiamionau

0
val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE); 

Bạn không nên vượt qua Font.U_SINGLE-applyFont, nhưng mới một chữ, chẳng hạn như new HSSFFont(), sau đó setUnderline(Font.U_SINGLE).

dụ:

HSSFFont f1 = new HSSFFont(); 
f1.setUnderline(Font.U_SINGLE); 
val.applyFont(0, val.getString().indexOf("@"), f1); 
Các vấn đề liên quan