忍者ブログ

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

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

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


今回は 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












PR

コメント

コメントを書く