忍者ブログ

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

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

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


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



本の紹介では...
PHP8の基本構文から、クラス、DB連携、セキュリティ対策まで、しっかり習得。
PHPプログラミングの標準教科書『独習PHP』が、最新のPHP8に対応。
PHPでWebページ/アプリケーションを開発する際に必要な基礎的な知識、
PHPの基本構文から、クラス、データベース連携、セキュリティまで、詳細かつ丁寧に解説します。
...


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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クラス」に定義されています。

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

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

setPaperSize() の引数は以下の様に「PageSetupクラス」に定義されています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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 をしない
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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オブジェクト を取得し呼出します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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


関連する記事

PHP PhpSpreadsheet エクセルのワークシートのセルへのアクセスについて
PHP PhpSpreadsheet エクセルのワークシートのセルへ漢字(全角文字)の設定について
PHP PhpSpreadsheet エクセルのワークシートのセルへのアクセスについて(行・列指定)
PHP PhpSpreadsheet エクセルのワークシートのセルのスタイル設定について
PHP PhpSpreadsheet エクセルのワークシートのセルの条件付き書式設定について
PHP PhpSpreadsheet エクセルのワークシートのセルのデータ入力規則設定について
PHP PhpSpreadsheet エクセルのワークシートの紙の大きさやページ設定について
PHP PhpSpreadsheet CSVファイルの読み込み・書き込みについて
PHP PhpSpreadsheet エクセルファイルをPHPの配列データへの読み込みについて(rangeToArray)

ショッピングサイト一通りを最初から自分で作ってみることで、PHPでのシステム開発を学べる入門書です。

share











PR

コメント

コメントを書く