童話王国 -覚書-

童話王国の生活をサポートする生産特化型計算ツール作者の気まぐれ開発日誌&キャラ育成日記。

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

POI使用時の印刷余白設定

2005-01-27 10:19:38 | Java
印刷余白設定をすることになったので、メモ。
設定値はinchで指定

HSSFSheet sheet = workBook.createSheet(sheetName);
//上余白(1.5)
sheet.setMargin(HSSFSheet.TopMargin, 0.590);
//右余白(0.5)
sheet.setMargin(HSSFSheet.RightMargin, 0.197);
//下余白(1)
sheet.setMargin(HSSFSheet.BottomMargin, 0.394);
//左余白(0.5)
sheet.setMargin(HSSFSheet.LeftMargin, 0.197);
//ページ中央:水平にチェック
sheet.setHorizontallyCenter(true);
//ページ中央:垂直にチェック
sheet.setVerticallyCenter(false);

HSSFPrintSetup ps = sheet.getPrintSetup();
// 印刷方向の指定 (true:横、false:縦)
ps.setLandscape(true);
// 印刷用紙の設定
ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);
// 印刷倍率の設定
ps.setScale((short) 71);
// ヘッダー余白(1)
ps.setHeaderMargin(0.394);
// フッター余白(1)
ps.setFooterMargin(0.394);

実行結果


所で、印刷範囲設定のsetPrintAreaが環境によって使えないみたいなのですが・・・
自分の所は使えるのですが、他の人が試すとできないので困ってます

ついでに、

HSSFDataFormat format = workBook.createDataFormat();
HSSFCellStyle style = workBook.createCellStyle();
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setDataFormat(format.getFormat("#,##0.0000"));

とフォーマット指定した時も環境によって・・・(略

style.setDataFormat((short) 3); //#,##0

は大丈夫なんですけどね。
コメント

POI使用時、意図しない場所にスペースが付く件について

2004-12-16 12:51:10 | Java
POIを使用し、テンプレのExcelファイルを読み込み、編集及びシートを追加しています。
タイトルの現象が起こった場所は、テンプレのExcelシートの場所でした。
現象として、
・シート1、シート2の同じ場所に固定文字
・固定文字はセルを5個横に結合し、中央揃え
・テンプレのExelファイルの文字はシート1シート2共に「****」(社名なので伏せます)
POIを通し、処理後のシート1は「****」と表示されるのに対し、シート2は「**** 」と表示
・中央揃えをしている為、微妙に位置がずれて障害報告orz

という状態でした。
ちょっと調べてみた所、
Jakarta-POI :取得した Excel データに半角スペースが付加される現象について
というまさに、今自分がなった現象について報告している投稿がありました。

SSTDeserializer#addToStringTable の try-catch 文で、意図的に半角スペースを付加しているところがありました。
リッチテキストを完全に正しく扱いきれないために、
リッチテキスト→ノーマルテキスト
と変換しているそうです。
このときに Exception が発生したら、半角スペースを付加する仕様になっているようです。


つまり、POI使用上、発生したら回避することは無理なので、何とか誤魔化す方法を探せと言うことに。

誤魔化し方
1.POIでシート読み込み後、半角スペースが付いた場所に上書きで文字を入れる→×「**** 」
2.「****」が「**** 」となるので元のファイルを「 ****」にしてみた→×「 ****」
3.表示上は問題が無いので「 **** 」にしてみた→○「 **** 」で見た目問題なし

と言うわけで3にしました。
見た目&印刷結果が同じならばそれでいいのよ・・・
コメント

明日のために。

2004-10-15 13:12:59 | Java
よみがえり草放置。
朝、王国ログ確認。
途中、オオイワオに邪魔され、蓮球根の王国売り間に合わなかった・・・
まだ、エンゼル作れと言うことなんでしょうか


Myメモ
//int型の配列
int[] ary = new int[4];

BigDecimal.ROUND_HALF_DOWN → 五捨六入
BigDecimal.ROUND_HALF_UP → 四捨五入

double、float時に「==」を使ってはいけない。
http://www.gimlay.org/~javafaq/S029.html#S029-04

POI使用時、ヘッダー&フッターに日本語は使えない
http://www.jajakarta.org/kvasir/bbs/technical/633?msg=2#msg2192
ちなみにシート名とかは可。
日本語使うときは、
cell.setEncoding(HSSFCell.ENCODING_UTF_16);

おまけ。
文字エンコード
String test = "てすと";
String test2 = "";
try {
test2 = new String(test.getBytes("Shift_JIS"), "UTF-16");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

6.「表示形式を追加できません」エラーについて
http://www.javadrive.jp/poi/style/index6.html
Excelには制限があり「ブック内でセルの書式の組み合わせが約 4,000 を超える場合に発生します」
コメント