PHPExcelで行高さの自動調整をする処理を書いています。


単純な自動調整は「setRowHeight()」で値を指定しないことで可能となりますが、これだとセル内で余裕が全くできず見栄えがよいと言えません。
そこで下記のように、①自動調整された行高さを取得、②適当な値を加える、③②で得られた値で行高さを再設定 という処理を入れようとしています。
が、なかなか思い通りの動作が得られません。

試しに現在の行高さを取得し、セルにセットして観察すると「-1」などになっています。
そのままだと扱えないような値が入ってくるのかなと思い、ピクセルに変換して試したりもしましたが、同じでした。

この処理をうまく動作させるにはどうすればよいでしょうか?
以上よろしくお願いいたします。

コードは補足へ記載します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2015/02/20 12:43:33
  • 終了:2015/02/23 23:19:15
id:kon39392

実際はDBを読み込みながらセルへセット、行高さを調整...を繰り返すような処理です。
下記は簡易化しております。


$this->load->library("phpexcel");
$objReader = new PHPExcel_Reader_Excel5();

$objPHPExcel = $objReader->load("d:\\format\\format001.xls");

$test_a = "改行を含む長文テキスト";

$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $test_a);

//罫線を引く
$rangestr = "A".$setrow.":F".$setrow;
$objPHPExcel->setActiveSheetIndex(0)->getStyle($rangestr)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//行高さの自動調整
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension($setrow)->setRowHeight();


//--↓↓ここから下の処理をうまく機能させたい↓↓

//高さに余裕を持たせる処理
//現在の行高さを取得
$rowHeight = $objPHPExcel->setActiveSheetIndex(0)->getRowDimension($setrow)->getRowHeight();
//加える
$rowHeight = $rowHeight +100;
//行高さを再設定
$objPHPExcel->setActiveSheetIndex(0)->getRowDimension($setrow)->setRowHeight($rowHeight);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('d:\\output\\output001.xls');

ベストアンサー

id:gizmo5 No.2

gizmo5回答回数484ベストアンサー獲得回数1382015/02/20 18:52:36

ポイント50pt

ここが参考になるのではないでしょうか。
http://phpexcel.codeplex.com/discussions/66215

Excel 2003 形式ではうまく動作しなくて、2007 形式だと期待通りに動作するとあります。
http://phpexcel.codeplex.com/workitem/10503

パッチは出ているようですが、こちらでは期待通りにならないとあります。
https://github.com/PHPOffice/PHPExcel/issues/165

Excel 2007 形式で試してみるのが良いと思います。

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982015/02/20 13:07:14

ポイント50pt

エクセル自体自動調節がうまくきかない場合があるから、文字数と改行数から必要な高さを割り出して自分でセットしたほうがいいですよ。

id:gizmo5 No.2

gizmo5回答回数484ベストアンサー獲得回数1382015/02/20 18:52:36ここでベストアンサー

ポイント50pt

ここが参考になるのではないでしょうか。
http://phpexcel.codeplex.com/discussions/66215

Excel 2003 形式ではうまく動作しなくて、2007 形式だと期待通りに動作するとあります。
http://phpexcel.codeplex.com/workitem/10503

パッチは出ているようですが、こちらでは期待通りにならないとあります。
https://github.com/PHPOffice/PHPExcel/issues/165

Excel 2007 形式で試してみるのが良いと思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません