忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP PHPExcel エクセルのワークシートの紙の大きさやページ設定について


今回は PHPExcel で行う「ワークシート」の「紙の大きさ」や「ページ設定」について説明したいと思います。




■ワークシートの紙の方向と大きさの設定

紙の方向と大きさの設定は、ワークシートの PageSetup オブジェクトの setOrientation() , setPaperSize() メソッドを使用して行うことができます。

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();
// PageSetupオブジェクト
$objPageSetup = $objSheet->getPageSetup();
// 紙の向き設定[ランドスケープ:横向き]
$objPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
// 紙の大きさ設定[A4]
$objPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
// [A1]セルに文字列設定
$objSheet->setCellValue('A1', 'ABCDEFG');
// [test4-1.xlsx]:Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test4-1.xlsx');
exit();
?>

setOrientation() の引数は以下の様に定義されています。

const ORIENTATION_DEFAULT   = 'default';    // デフォルト
const ORIENTATION_LANDSCAPE = 'landscape';  // ランドスケープ:横向き
const ORIENTATION_PORTRAIT  = 'portrait';   // ポートレート :縦向き

紙の向きの設定は「ORIENTATION_LANDSCAPE」、「ORIENTATION_PORTRAIT」のどちらかに必ず設定した方がいいと思います。 私の所では「ORIENTATION_DEFAULT」にして保存した場合に、エクセルで開いてみたら、「ポートレート」になっていましたが、 デフォルトが本当に「ポートレート」かは保証できませんので。

setPaperSize() の引数は以下の様に定義されています。

/* Paper size */
const PAPERSIZE_LETTER                          = 1;
const PAPERSIZE_LETTER_SMALL                    = 2;
const PAPERSIZE_TABLOID                         = 3;
const PAPERSIZE_LEDGER                          = 4;
const PAPERSIZE_LEGAL                           = 5;
const PAPERSIZE_STATEMENT                       = 6;
const PAPERSIZE_EXECUTIVE                       = 7;
const PAPERSIZE_A3                              = 8;
const PAPERSIZE_A4                              = 9;
const PAPERSIZE_A4_SMALL                        = 10;
const PAPERSIZE_A5                              = 11;
const PAPERSIZE_B4                              = 12;
const PAPERSIZE_B5                              = 13;
const PAPERSIZE_FOLIO                           = 14;
const PAPERSIZE_QUARTO                          = 15;
// まだ他にあります

上記のソースを実行してエクセルの「印刷」で開いてみました。




■ワークシートのページ設定(スケーリング)

PHPExcelのページ設定スケーリングメソッドは、図の様に、[ページ設定]ダイアログのスケーリング設定オプションを直接設定できます。

メソッド初期値有効メソッド呼出備考
setFitToPage false
setScale 100 setFitToPage(false)
setFitToWidth 1 setFitToPage(true) 0:FitToWidth をしない
setFitToHeight 1 setFitToPage(true) 0:FitToHeight をしない
<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();
// PageSetupオブジェクト
$objPageSetup = $objSheet->getPageSetup();
// FitToPageを有効設定
$objPageSetup->setFitToPage(true);
// FitToWidth:1
$objPageSetup->setFitToWidth(1);
// FitToHeight:0
$objPageSetup->setFitToHeight(0);
// [A1]セルに文字列設定
$objSheet->setCellValue('A1', 'ABCDEFG');
// [test4-2.xlsx]:Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test4-2.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。




■ワークシートのページ設定(余白)

PHPExcelのページ設定の余白設定メソッドは、図の様に、[ページ設定]ダイアログの余白設定オプションを直接設定できます。


これらのメソッドはワークシートオブジェクトから PageMarginsオブジェクト を取得し呼出します。

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();

// PageMarginsオブジェクト
$objPageMargins = $objSheet->getPageMargins();
// Top 設定
$objPageMargins()->setTop(1);
// Right 設定
$objPageMargins()->setRight(0.75);
// Left 設定
$objPageMargins()->setLeft(0.75);
// Bottom 設定
$objPageMargins()->setBottom(1);

// [A1]セルに文字列設定
$objSheet->setCellValue('A1', 'ABCDEFG');
// [test4-3.xlsx]:Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test4-3.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。


※設定値の単位がインチなので以下の計算となる

Top(1) : 1.00×2.54cm=2.540cm⇒2.5
Right(0.75) : 0.75×2.54cm=1.905cm⇒1.9













PR

コメント

コメントを書く