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


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

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

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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2015/02/23 23:19:15
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
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

回答回数504ベストアンサー獲得回数141

ポイント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ベストアンサー獲得回数1198

ポイント50pt

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

id:gizmo5 No.2

回答回数504ベストアンサー獲得回数141ここでベストアンサー

ポイント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 形式で試してみるのが良いと思います。

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

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

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

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

回答リクエストを送信したユーザーはいません