今回は PhpSpreadsheet で行う「ワークシート」の「紙の大きさ」や「ページ設定」について説明したいと思います。
■ワークシートの紙の方向と大きさの設定
紙の方向と大きさの設定は、ワークシートの PageSetup オブジェクトの setOrientation() , setPaperSize() メソッドを使用して行うことができます。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->getActiveSheet(); // PageSetupオブジェクト $objPageSetup = $objSheet->getPageSetup(); // 紙の向き設定[ランドスケープ:横向き] $objPageSetup->setOrientation(PageSetup::ORIENTATION_LANDSCAPE); // 紙の大きさ設定[A4] $objPageSetup->setPaperSize(PageSetup::PAPERSIZE_A4); // [A1]セルに文字列設定 $objSheet->setCellValue('A1', 'ABCDEFG'); // [test4-1.xlsx]:Excel2007形式で保存する $objWriter = new Xlsx($objSpreadsheet); $objWriter->save('test4-1.xlsx'); ?>
setOrientation() の引数は以下の様に「PageSetupクラス」に定義されています。
// Page orientation const ORIENTATION_DEFAULT = 'default'; // デフォルト const ORIENTATION_LANDSCAPE = 'landscape'; // ランドスケープ:横向き const ORIENTATION_PORTRAIT = 'portrait'; // ポートレート :縦向き
紙の向きの設定は「ORIENTATION_LANDSCAPE」、「ORIENTATION_PORTRAIT」のどちらかに必ず設定した方がいいと思います。 私の所では「ORIENTATION_DEFAULT」にして保存した場合に、エクセルで開いてみたら、「ポートレート」になっていましたが、 デフォルトが本当に「ポートレート」かは保証できませんので。
setPaperSize() の引数は以下の様に「PageSetupクラス」に定義されています。
// 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; // まだ他にあります
上記のソースを実行してエクセルの「印刷」で開いてみました。
■ワークシートのページ設定(スケーリング)
PhpSpreadsheet のページ設定スケーリングメソッドは、図の様に、[ページ設定]ダイアログのスケーリング設定オプションを直接設定できます。
メソッド | 初期値 | 有効メソッド呼出 | 備考 |
---|---|---|---|
setFitToPage | false | ||
setScale | 100 | setFitToPage(false) | |
setFitToWidth | 1 | setFitToPage(true) | 0:FitToWidth をしない |
setFitToHeight | 1 | setFitToPage(true) | 0:FitToHeight をしない |
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->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 = new Xlsx($objSpreadsheet); $objWriter->save('test4-2.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
(エクセルの「印刷」ページを開いて、「設定」の所の一番下の「ページ設定」リンクをクリックします。)
■ワークシートのページ設定(余白)
PhpSpreadsheet のページ設定の余白設定メソッドは、図の様に、[ページ設定]ダイアログの余白設定オプションを直接設定できます。
これらのメソッドはワークシートオブジェクトから PageMarginsオブジェクト を取得し呼出します。
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Worksheet\PageMargins; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト $objSheet = $objSpreadsheet->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 = new Xlsx($objSpreadsheet); $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
コメント