2012-03-07 29 views
5

オープンしているMS Excel(またはこれを想定している)やLibreOffice Calc(テスト済み)をクラックさせると、セルにstuffを入力したり、セル内のテキストの一部のフォントを変更することができます。 1つのセルに、やって:このテキストは、このテキストは再びApache POI:パーシャルセルフォント

をイタリックにする大胆とある

は、この文字列に1つのセルのような形式で存在することができることを、私はあらためて表明しましょう。

このレベルのカスタマイズはApache POIで達成できますか?検索は、セル全体にフォントを適用する方法を示しているようです。

おかげ

=== === UPDATE

以下示唆したように、私は(私はHSSFで働いているとして)HSSFRichTextString一緒に行くことになりました。しかし、フォントを適用した後(私は太字とアンダーラインを試しました)、私のテキストは変わりません。これは私が試みたものです。文脈を踏まえて、私はスポーツ関連のものに取り組んでいます。これは、 "awayteam" @ "hometeam"の形式で試合を表示するのが一般的です。特定の外部条件に応じて、もう一方は太字です。

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); 

あなたが見ることができるように、これはコードのスニペットが表示されているよりも多くの複雑な関数からですが、これの矛先は、実際のコードです:私のコードは次のようになります。ご覧のとおり、val.applyを使用して文字列の一部を入力してから、その文字列でセルの値を設定しています。だから、私がそこで何をやったのかが完全にはわかっていない。アドバイスをいただければ幸いです。

おかげ

KFJ

答えて

5

POIがそれをサポートし、あなたが探しているクラスがRichTextStringです。セルがテキストの場合は、そのテキストのRichTextStringを取得し、フォントのさまざまな部分にフォントを適用して、テキストの異なる部分を異なるように見えるようにすることができます。

+0

は私の質問に答えてくれてありがとう。私は仕事中です。これはサイドプロジェクトのためのものです。今夜はこれを試してみましょう。もしうまくいけば、私はあなたの答えをチェックマークします:) –

+0

うわー。それは私が予想していたよりもずっと時間がかかりました。申し訳ありません。とにかく、うまくいかなかった。エラーはありませんが、テキストはフォーマットされていません。私はここに私の投稿を編集し、何が起こっているかを示します。 –

+0

そのフォントを(スタイルを使って)セル全体に適用すると、期待通りに見えますか? (それはあなたが正しいフォントを持っているかどうかを確認するのに良い方法です) – Gagravarr

1

SXSSFWorkbookを使用している場合は、このような書式設定をサポートしていないため、排水されます。 ここで確認してください。 http://apache-poi.1045710.n5.nabble.com/RichTextString-isn-t-working-for-SXSSFWorkbook-td5711695.html

+0

コメントをいただきありがとうございます。このスレッドを更新したままにしておきたいと思いますが、これは古い質問でもあり、すでに受け入れられている回答です。私はいつもStackExchangeユニバースの新メンバーを歓迎していますが、ページの上部にある "ヘルプ" - > "ツアーを見る"をクリックしてください。 –

+0

ありがとうございました!私はそれが実際にコメントでなければならないことを理解し、その質問に対する答えを提供しないが、それは私の夕方を救った。どうもありがとうございます! – bsiamionau

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

あなたは、のようなnew HSSFFont()、その後、setUnderline(Font.U_SINGLE)をフォントをapplyFontFont.U_SINGLEを渡すが、新しいべきではありません。

例:

HSSFFont f1 = new HSSFFont(); 
f1.setUnderline(Font.U_SINGLE); 
val.applyFont(0, val.getString().indexOf("@"), f1);