Laravel + PhpSpreadsheet で Excel の一部を切り出して PDF 生成してみた(現場DX事例)
自己紹介
はじめまして。
日々、現場業務を支える Web アプリケーション を開発しています。
最近は Laravel + Vue を中心に、工場や製造現場で使われる帳票管理や業務効率化の仕組み を作ることが多く、「紙文化をデジタルに置き換える」ことに強い関心を持つようになりました。
特に中小企業では紙文化がまだまだ根強く残っており、多くの製造現場では簡単にペーパーレス化ができないのが現状だと感じています。
この記事では、実際のプロジェクトで取り組んだ Excelの一部を切り出してPDFを生成する仕組み の一部を紹介します。
もし、この記事が中小企業の皆さんのお役に立てれば嬉しいです。
はじめに
製造現場では、工程や作業手順を 紙の帳票で伝える運用 がまだ多く残っています。
その代表例が「指示書」です。
指示書は、作業手順や材料の情報を記載した帳票で、従来はExcelで作成し、紙に印刷して現場へ配布していました。
しかし、この紙運用には以下のような課題がありました。
- 印刷や配布作業に時間がかかる
- 修正が入るたびに再印刷が必要で、情報伝達が遅れる
- 作業記録が紙ベースなので、集計・分析がリアルタイムでできない
そこで、Webシステム+タブレットを活用して 指示書をデジタル化 する取り組みを進めています。
本記事のテーマ
今回紹介するのは、以下の機能です:
Excelファイルから必要な部分だけを抽出してPDFを生成する機能
ExcelをPDF化すればいいのでは??という疑問もあるかと思いますが、
例えば、指示書には、製造現場には不要な情報も多く記載されることもあり、もし、まるまるPDF化した場合のデメリットとしては、現場が確認する箇所が小さくなってしまったりして、指示内容が正確に伝わらない可能性があることです。
この記事で紹介すること
- Laravel + PhpSpreadsheet を用いたExcelファイル処理の方法
- 特定セルを切り出してテンプレートPDFに組み込む手順
- 現場運用を想定した活用イメージ
- 実装時の注意点と学び
使用技術スタック
分類 | 技術 |
---|---|
バックエンド | Laravel 9 |
PDF生成 | PhpSpreadsheet + mPDF |
フロント | Vue 3 + Bootstrap 5 |
インフラ | Nginx + PHP 8.0 |
mpdf/mpdf
の導入が必要です。
💻 実装例:Excel → PDF
ステップ1:ライブラリのインストール
composer require phpoffice/phpspreadsheet
composer require mpdf/mpdf
ステップ2:Excelを読み込み、必要なセルだけ抽出
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Response;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf; // mPDFラッパー
class ReportController extends Controller
{
public function exportPdf(): Response
{
$sourcePath = storage_path('app/public/sample.xlsx');
$spreadsheet = IOFactory::load($sourcePath);
$sourceSheet = $spreadsheet->getActiveSheet();
$template = new Spreadsheet();
$targetSheet = $template->getActiveSheet();
$targetSheet->setCellValue('B3', $sourceSheet->getCell('M4')->getValue()); // 項目A
$targetSheet->setCellValue('F3', $sourceSheet->getCell('W4')->getValue()); // 項目B
$targetSheet->setCellValue('E5', $sourceSheet->getCell('R4')->getValue()); // 項目C
$writer = new Mpdf($template);
$pdfPath = storage_path('app/public/output.pdf');
$writer->save($pdfPath);
return response()->download($pdfPath)->deleteFileAfterSend(false);
}
}
補足ポイント
-
IOFactory::load()
で Excel ファイルを読み込む - 抽出した値をテンプレートに書き出す(出力レイアウトを固定化)
-
PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf
を使ってPDF化
まず、ここまでができれば、元の指示書から値を抽出して、新しいシートに転記するということが可能になります。
つまり、新しいシートをテンプレート化するというイメージです。後は、そのシートをPDF化するという処理を行えば、閲覧用のPDFファイルが生成できるという仕組みです。
また、値を抽出しているので、その値(製品名やロットナンバーなど)をDBに登録することで、後に検索を行うことも可能になります。
🏭 現場での運用イメージ
- タブレットでPDFを直接表示
- 印刷・配布作業が不要になり工数削減
- 修正が即時反映され、最新情報をリアルタイムで共有
- 作業記録をデジタル化 → 集計・分析もスピードアップ
💡 注意点
課題 | 対策 |
---|---|
日本語が文字化けする | mPDFに日本語フォント(IPA/源ノ角など)を導入し、OSフォントを認識させる |
PDFレイアウトが崩れる | テンプレート側でセルサイズ・マージン・行高を固定 |
Excelファイルが重い | 一時ファイルやキャッシュを活用し、必要セルのみを読み込む |
✅ まとめ
今回は、Excelファイルから必要な情報を切り出してPDF化する方法 を紹介しました。
紙運用からの脱却に向けた、現場DXの第一歩として有効な手法ではないでしょうか。
🔜 次回予告
この記事は初めての投稿ですので、反響を見て次回を公開するか考えています
- Vue 3 を使ったタブレット向け UI 設計
- 指示書と記録表を連携させるデータ管理
- DXプロジェクト推進のための現場ヒアリング手法
🔗 参考リンク
🎯 最後に
本記事で紹介したような帳票からのPDF生成の仕組みは、中小企業でもスモールスタートで導入可能なDXの一歩です。もし、開発やコンサルティングに興味があれば、お気軽にコメントやメッセージください!
一緒に現場の課題を解決していけると嬉しいです # Laravel + PhpSpreadsheet で Excel の一部を切り出して PDF 生成してみた(現場DX事例)
自己紹介
はじめまして。
日々、現場業務を支える Web アプリケーション を開発しています。
最近は Laravel + Vue を中心に、工場や製造現場で使われる帳票管理や業務効率化の仕組み を作ることが多く、
「紙文化をデジタルに置き換える」ことに強い関心があります。
特に中小企業では紙文化がまだまだ根強く残っており、多くの製造現場では簡単にペーパーレス化ができないのが現状だと感じています。
この記事では、実際のプロジェクトで取り組んだ Excelの一部を切り出してPDFを生成する仕組み の一部を紹介します。
もし、この記事が中小企業の皆さんのお役に立てれば嬉しいです。
はじめに
製造現場では、工程や作業手順を 紙の帳票で伝える運用 がまだ多く残っています。
その代表例が「指示書」です。
指示書は、作業手順や材料の情報を記載した帳票で、従来はExcelで作成し、紙に印刷して現場へ配布していました。
しかし、この紙運用には以下のような課題がありました。
- 印刷や配布作業に時間がかかる
- 修正が入るたびに再印刷が必要で、情報伝達が遅れる
- 作業記録が紙ベースなので、集計・分析がリアルタイムでできない
そこで、Webシステム+タブレットを活用して 指示書をデジタル化 する取り組みを進めています。
本記事のテーマ
今回紹介するのは、以下の機能です:
Excelファイルから必要な部分だけを抽出してPDFを生成する機能
ExcelをPDF化すればいいのでは??という疑問もあるかと思いますが、
例えば、指示書には、製造現場には不要な情報も多く記載される可能性もあり、
もし、まるまるPDF化した場合のデメリットは、現場が確認する箇所が小さくなってしまったりして、指示内容が正確に伝わらない可能性があることです。
この記事で紹介すること
- Laravel + PhpSpreadsheet を用いたExcelファイル処理の方法
- 特定セルを切り出してテンプレートPDFに組み込む手順
- 現場運用を想定した活用イメージ
- 実装時の注意点と学び
使用技術スタック
分類 | 技術 |
---|---|
バックエンド | Laravel 9 |
PDF生成 | PhpSpreadsheet + mPDF |
フロント | Vue 3 + Bootstrap 5 |
インフラ | Nginx + PHP 8.0 |
mpdf/mpdf
の導入が必要です。
💻 実装例:Excel → PDF
ステップ1:ライブラリのインストール
composer require phpoffice/phpspreadsheet
composer require mpdf/mpdf
ステップ2:Excelを読み込み、必要なセルだけ抽出
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Response;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf; // mPDFラッパー
class ReportController extends Controller
{
public function exportPdf(): Response
{
$sourcePath = storage_path('app/public/sample.xlsx');
$spreadsheet = IOFactory::load($sourcePath);
$sourceSheet = $spreadsheet->getActiveSheet();
$template = new Spreadsheet();
$targetSheet = $template->getActiveSheet();
$targetSheet->setCellValue('B3', $sourceSheet->getCell('M4')->getValue()); // 項目A
$targetSheet->setCellValue('F3', $sourceSheet->getCell('W4')->getValue()); // 項目B
$targetSheet->setCellValue('E5', $sourceSheet->getCell('R4')->getValue()); // 項目C
$writer = new Mpdf($template);
$pdfPath = storage_path('app/public/output.pdf');
$writer->save($pdfPath);
return response()->download($pdfPath)->deleteFileAfterSend(false);
}
}
補足ポイント
-
IOFactory::load()
で Excel ファイルを読み込む - 抽出した値をテンプレートに書き出す(出力レイアウトを固定化)
-
PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf
を使ってPDF化
まず、ここまでができれば、元の指示書から値を抽出して、新しいシートに転記するということが可能になります。
つまり、新しいシートをテンプレート化するというイメージです。後は、そのシートをPDF化するという処理を行えば、閲覧用のPDFファイルが生成できるという仕組みです。
また、値を抽出しているので、その値(製品名やロットナンバーなど)をDBに登録することで、後に検索を行うことも可能になります。
🏭 現場での運用イメージ
- タブレットでPDFを直接表示
- 印刷・配布作業が不要になり工数削減
- 修正が即時反映され、最新情報をリアルタイムで共有
- 作業記録をデジタル化 → 集計・分析もスピードアップ
💡 注意点
課題 | 対策 |
---|---|
日本語が文字化けする | mPDFに日本語フォント(IPA/源ノ角など)を導入し、OSフォントを認識させる |
PDFレイアウトが崩れる | テンプレート側でセルサイズ・マージン・行高を固定 |
Excelファイルが重い | 一時ファイルやキャッシュを活用し、必要セルのみを読み込む |
✅ まとめ
今回は、Excelファイルから必要な情報を切り出してPDF化する方法 を紹介しました。
紙運用からの脱却に向けた、現場DXの第一歩として有効な手法ではないでしょうか。
🔜 次回予告
この記事は初めての投稿ですので、反響を見て次回を公開するか考えています
- Vue 3 を使ったタブレット向け UI 設計
- 指示書と記録表を連携させるデータ管理
- DXプロジェクト推進のための現場ヒアリング手法
🔗 参考リンク
🎯 最後に
本記事で紹介したような帳票管理やPDF生成の仕組みは、中小企業でもスモールスタートで導入可能なDXの一歩です。
もし、開発やコンサルティングに興味があれば、お気軽にコメントやメッセージください!