今回は 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
コメント