C:blanc
投稿日
2022年06月15日
Blog PHP

ヤマト運輸のB2クラウドの送り状発行データをPHPで生成

  • このエントリーをはてなブックマークに追加

はじめに

ヤマト運輸のB2クラウドの送り状発行データのXLSXファイルを PhpSpreadsheet を使って書き出してみたいと思います。
仕様は下記の通りです。
B2クラウド 送り状発行データレイアウト 入出力用(PDF)

PhpSpreadsheet をインストール

まずは、Composer で PhpSpreadsheet をインストールします。

composer install
composer.json
{
    "require": {
        "phpoffice/phpspreadsheet": "^1.23"
    }
}

PHPコード

特に難しいところはないですが、項目が多いので行を間違えないように気をつけます。
サンプルは全ての項目を埋めていませんので、必要な項目があれば、仕様書に基づいて追加していきます。
お届け先が複数の場合は、$data配列にデータを追加します。
実際はデータベース等からループでデータを取得すると思います。
PHP
<?php
$results = [];

$results[] = [
'お客様管理番号',
'送り状種類',
'クール区分',
'伝票番号',
'出荷予定日',
'お届け予定(指定)日',
'配達時間帯',
'お届け先コード',
'お届け先電話番号',
'お届け先電話番号枝番',
'お届け先郵便番号',
'お届け先住所',
'お届け先住所(アパートマンション名)',
'お届け先会社・部門1',
'お届け先会社・部門2',
'お届け先名',
'お届け先名略称カナ',
'敬称',
'ご依頼主コード',
'ご依頼主電話番号',
'ご依頼主電話番号枝番',
'ご依頼主郵便番号',
'ご依頼主住所',
'ご依頼主(アパートマンション名)',
'ご依頼主名',
'ご依頼主略称カナ',
'品名コード1 ',
'品名1',
'品名コード2',
'品名2',
'荷扱い1',
'荷扱い2',
'記事',
'コレクト代金引換額(税込)',
'コレクト内消費税額等',
'営業所止置き',
'営業所コード',
'発行枚数',
'個数口枠の印字',
'ご請求先顧客コード',
'ご請求先分類コード',
'運賃管理番号',
'クロネコwebコレクトデータ登録',
'クロネコwebコレクト加盟店番号',
'クロネコwebコレクト申込受付番号1',
'クロネコwebコレクト申込受付番号2',
'クロネコwebコレクト申込受付番号3',
'お届け予定eメール利用区分',
'お届け予定eメールe-mailアドレス',
'入力機種',
'お届け予定eメールメッセージ',
'お届け完了eメール利用区分',
'お届け完了eメールe-mailアドレス',
'お届け完了eメールメッセージ',
'クロネコ収納代行利用区分',
'予備',
'収納代行請求金額(税込)',
'収納代行内消費税額等',
'収納代行請求先郵便番号',
'収納代行請求先住所',
'収納代行請求先住所(アパートマンション名)',
'収納代行請求先会社・部門名1',
'収納代行請求先会社・部門名2',
'収納代行請求先名(漢字)',
'収納代行請求先名(カナ)',
'収納代行問合せ先名(漢字)',
'収納代行問合せ先郵便番号',
'収納代行問合せ先住所',
'収納代行問合せ先住所(アパートマンション名)',
'収納代行問合せ先電話番号',
'収納代行管理番号',
'収納代行品名',
'収納代行備考',
'複数口くくりキー',
'検索キータイトル1',
'検索キー1',
'検索キータイトル2',
'検索キー2',
'検索キータイトル3',
'検索キー3',
'検索キータイトル4',
'検索キー4',
'検索キータイトル5',
'検索キー5',
'予備',
'予備',
'投函予定メール利用区分',
'投函予定メールe-mailアドレス',
'投函予定メールメッセージ',
'投函完了メール(お届け先宛)利用区分',
'投函完了メール(お届け先宛)e-mailアドレス',
'投函完了メール(お届け先宛)メールメッセージ',
'投函完了メール(ご依頼主宛)利用区分',
'投函完了メール(ご依頼主宛)e-mailアドレス',
'投函完了メール(ご依頼主宛)メールメッセージ',
'連携管理番号',
'通知メールアドレス'
];

$file_name = 'b2.xlsx';
$product_no = '商品番号001';
$product_name = '商品名';

$data = [];

$data[] = '1'; // A:オーダーNo
$data[] = '0';
$data[] = '0';
$data[] = '';
$data[] = '2022/07/13';
$data[] = '最短日';
$data[] = '0812';
$data[] = '';
$data[] = '03-0000-0002';
$data[] = ''; // J
$data[] = '100-0001'; // K
$data[] = '東京都千代田区'; // L
$data[] = '○○町1-1-1'; // M
$data[] = '';
$data[] = '';
$data[] = '名前太郎'; // P
$data[] = '';
$data[] = '様'; // R
$data[] = '1'; // S:依頼主コード
$data[] = '03-0000-0001'; // T:ご依頼主電話番号
$data[] = '';
$data[] = '150-0041';
$data[] = '東京都渋谷区○○1-1-1';
$data[] = '○○ビル1F';
$data[] = '○○株式会社';
$data[] = ''; // Z
$data[] = substr($product_no, 0, 30); // AA:品名コード1
$data[] = mb_substr($product_name, 0, 25); // AB:品名1
$data[] = '';
$data[] = '';
$data[] = 'ナマモノ'; // AE
$data[] = '';
$data[] = '記事'; // AG:記事
$data[] = '3800'; // AH
$data[] = ''; // AI
$data[] = '0'; // AJ
$data[] = '';
$data[] = '1'; // AL:発行枚数
$data[] = '3'; // AM:個数口表示フラグ
$data[] = '0311111111'; // AN:請求先顧客コード
$data[] = '';
$data[] = '01'; // AP:運賃管理番号
$data[] = '0'; // AQ
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = ''; // AU
$data[] = '1'; // AV:お届け予定eメール利用区分
$data[] = 'user@mail.com'; // AW
$data[] = '1'; // AX
$data[] = '○○株式会社オンラインストアでご注文頂いた商品を本日クロネコヤマトで発送致しました。'; // AY
$data[] = '0'; // AZ
$data[] = ''; // BA
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = ''; // CA
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';
$data[] = '';

$results[] = $data;
続き
PHP
require_once __DIR__ . '/vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($results, NULL, 'A1', TRUE);
$writer = new Xlsx($spreadsheet);

header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
ob_end_clean();
$writer->save('php://output');

ダウンロードされるExcelファイル

XLSXファイル
↑↑↑
Excelファイルがダウンロードされます。

終わりに

ローカル環境で使う場合は、docker等が必要です。(macの場合はSitesが使えます)
PHPコードのデータはサンプルです。そのまま使用しないでください。(当たり前かw)
仕様書に基づいてすべて書き直してください。

PROFILE

C:blanc
フリーランスのプログラマーです。
  • COMMENT

    送信しました! コメントは承認後表示されます!
  • あと150文字