プロが教える店舗&オフィスのセキュリティ対策術

POIのHSSFについてお教えください。
JDK1.5.0_12 / poi-3.0.2を使用しています。

フォントは、デフォルトでは "Arial" なので、セル毎に"MS 明朝"を指定すると、初めはMS明朝に変更できたのですが、そのうち"表示形式を追加できません。" とエクセルに表示され、エクセルが開けなくなりました。調べると、ブックに含まれるセルの書式の組み合わせが約 4,000 を超える場合に発生し、すべてのセルに同じフォントを使用すると、書式設定の組み合わせ数が減少するとのこと。HSSFで、デフォルトのフォントをワークブックまたはシート指定で直接変更することはできるのでしょうか。

下記が、今回のコードの一部です。
HSSFWorkbook wb = new HSSFWorkbook();
HSSFFont font1 = wb.createFont();
font1.setFontName("MS 明朝");
を指定し、以下を、行毎に、セルの数だけ(CellPositionを変動)繰り返しました。
HSSFCell cell = row.createCell((short)CellPosition);
HSSFCellStyle style1 = wb.createCellStyle();
style1.setFont(font1);
cell.setCellStyle(style1);

宜しくお願い致します。

A 回答 (1件)

セルの数だけスタイルを作成するのではなく、


ループ処理の外で、必要な種類のスタイルを宣言して
流用すれば良いのではないでしょうか?

※↓をループの外に置く。
> HSSFCellStyle style1 = wb.createCellStyle();
> style1.setFont(font1);

この回答への補足

kotecho様 回答ありがとうございます。

>HSSFCellStyle style1 = wb.createCellStyle();
>style1.setFont(font1);
は、ループの前に指定できるのですが、
この2行の指定だけでは、書体が変更されず、
>HSSFCell cell = row.createCell((short)cellPosition);
>cell.setCellStyle(style1);
を指定して、初めて書体が変更されるようでする。
この形式ですと、「cell」は、ループの中で個別に
指定することになってしまいます。

補足日時:2008/06/19 10:42
    • good
    • 0
この回答へのお礼

kotecho様

大変失礼致しました。
上記指定で再度テストしましたら、
13列×2000行のエクセル作成で
「MS 明朝」に全項目変更できました。
色々テストしたつもりだったのですが、
ループの中のに、
>HSSFCellStyle style1 = wb.createCellStyle();
>style1.setFont(font1);
が残ったままだったのかと思われます。
不完全なチェックまののでの問合せで
申し訳ございませんでした。
ありがとうございました。

お礼日時:2008/06/19 11:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!