前提
・現在EXCELファイルをアップロードし、「Simple XLSX」というライブラリを使ってEXCELファイルをデータベースに登録しています。
実現したいこと
- 私が書いた現在のコードがとても汚く、もう少し簡略化したいと思っています。
- 合わせて、最終的にデータをファイルにして出力しているのですが、その時「phpspreadsheet」ライブラリを使用しているので、これを期に、EXCELファイルの読み込み>データベースの登録までを「Simple XLSX」から「phpspreadsheet」でおこないたいと思っています。
- 今回はじめてSQL文の”自動採番”機能を使ってみたいのですが、どうやったら使えるか分かりません。読み込むEXCELファイルに空白列を先頭に手動で入力すれば簡単なのですが、できるだけ手作業を排除したいと思っています。
PHPSpreadsheetを使用するときに必要になるであろうコード
PHP
1 require '../../../vendor/autoload.php'; 2 3 use \PhpOffice\PhpSpreadsheet\Spreadsheet; 4 use \PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; 5 6 $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); 7 $spreadsheet = $reader->load($filePath); 8 $sheet = $spreadsheet->getActiveSheet(); 9 10 $data = [];
該当のソースコード
PHP
1 2 require_once '../../../simplexlsx.class.php'; 3 4 $xlsx = new SimpleXLSX( $filePath ); 5 try { 6 $conn = new PDO( "mysql:host=localhost;dbname=データベース名", $user, $password); 7 $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 8 } 9 catch(PDOException $e) 10 { 11 header('content-type: text/plain'); 12 die("データベース接続に失敗しました。: " . $e->getMessage() . "\n"); 13 } 14 $stmt = $conn->prepare(" 15 INSERT INTO tbl_b011f( 16 NULL AS `regid`, -- 登録№ 17 `cnum_`, -- 客先コード 18 `cname`, -- 客先名 19 `pnum_`, -- 製番 20 `bnum_`, -- 枝番 21 `inum_`, -- 指№ 22 `dnum_`, -- 品番・図番 23 `pname`, -- 品名 24 `psize`, -- 形式・寸法 25 `pmate`, -- 材質 26 `carea`, -- 完了工程 27 `parea`, -- 所在工程 28 `pclss`, -- 進捗区分 29 `pnow_`, -- 現行順位 30 `plast`, -- 最終工程順位 31 `pslct`, -- 仕入区分 32 `enum_`, -- 仕入№ 33 `pmony`, -- 仕入金額 34 `_sq__`, -- 受注数 35 `_nq__`, -- 必要数 36 `_pq__`, -- 製作数 37 `_rq__`, -- 実績数 38 `upric`, -- 部品単価 39 `spric`, -- 受注単価 40 `tpric`, -- 受注金額 41 `snum_`, -- 仕入先コード 42 `sname`, -- 仕入先名 43 `_ppq_`, -- 前工程実績数 44 `ptsec`, -- 部品区分 45 `gnum_` -- 工程グループコード 46 ) VALUES ( 47 ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, -- 01~10 48 ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, -- 11~20 49 ?, ?, ?, ?, ?, ?, ?, ?, ?, ? -- 21~30 50 )"); 51 $stmt->bindParam( 1, $regid); // 登録№ 52 $stmt->bindParam( 2, $cnum_); // 客先コード 53 $stmt->bindParam( 3, $cname); // 客先名 54 $stmt->bindParam( 4, $pnum_); // 製番 55 $stmt->bindParam( 5, $bnum_); // 枝番 56 $stmt->bindParam( 6, $inum_); // 指№ 57 $stmt->bindParam( 7, $dnum_); // 品番・図番 58 $stmt->bindParam( 8, $pname); // 品名 59 $stmt->bindParam( 9, $psize); // 形式・寸法 60 $stmt->bindParam( 10, $pmate); // 材質 61 $stmt->bindParam( 11, $carea); // 完了工程 62 $stmt->bindParam( 12, $parea); // 所在工程 63 $stmt->bindParam( 13, $pclss); // 進捗区分 64 $stmt->bindParam( 14, $pnow_); // 現行順位 65 $stmt->bindParam( 15, $plast); // 最終順位 66 $stmt->bindParam( 16, $pslct); // 外注区分 67 $stmt->bindParam( 17, $enum_); // 外注№ 68 $stmt->bindParam( 18, $pmony); // 外注金額 69 $stmt->bindParam( 19, $_sq__); // 受注数 70 $stmt->bindParam( 20, $_nq__); // 必要数 71 $stmt->bindParam( 21, $_pq__); // 製作数 72 $stmt->bindParam( 22, $_rq__); // 実績数 73 $stmt->bindParam( 23, $upric); // 部品単価 74 $stmt->bindParam( 24, $spric); // 受注単価 75 $stmt->bindParam( 25, $tpric); // 受注金額 76 $stmt->bindParam( 26, $snum_); // 仕入先コード 77 $stmt->bindParam( 27, $sname); // 仕入先名 78 $stmt->bindParam( 28, $_ppq_); // 前工程実績数 79 $stmt->bindParam( 29, $ptsec); // 部品区分 80 $stmt->bindParam( 30, $gnum_); // 工程グループコード 81 82 foreach ($xlsx->rows() as $fields) 83 { 84 $regid = $fields[0]; // 登録№ 85 $cnum_ = $fields[1]; // 客先コード 86 $cname = $fields[2]; // 客先名 87 $pnum_ = $fields[3]; // 製番 88 $bnum_ = $fields[4]; // 枝番 89 $inum_ = $fields[5]; // 指№ 90 $dnum_ = $fields[6]; // 品番・図番 91 $pname = $fields[7]; // 品名 92 $psize = $fields[8]; // 形式・寸法 93 $pmate = $fields[9]; // 材質 94 $carea = $fields[10]; // 完了工程 95 $parea = $fields[11]; // 所在工程 96 $pclss = $fields[12]; // 進捗区分 97 $pnow_ = $fields[13]; // 現行順位 98 $plast = $fields[14]; // 最終工程順位 99 $pslct = $fields[15]; // 外注区分 100 $enum_ = $fields[16]; // 外注№ 101 $pmony = $fields[17]; // 外注金額 102 $_sq__ = $fields[18]; // 受注数 103 $_nq__ = $fields[19]; // 必要数 104 $_pq__ = $fields[20]; // 製作数 105 $_rq__ = $fields[21]; // 実績数 106 $upric = $fields[22]; // 部品単価 107 $spric = $fields[23]; // 受注単価 108 $tpric = $fields[24]; // 受注金額 109 $snum_ = $fields[25]; // 仕入先コード 110 $sname = $fields[26]; // 仕入先名 111 $_ppq_ = $fields[27]; // 前工程実績数 112 $ptsec = $fields[28]; // 部品区分 113 $gnum_ = $fields[29]; // 工程グループコード 114 115 $stmt->execute(); 116 117 }
試したこと
- どうやったらいいかわからなくて、INSERTの変数指定?のところに『NULL』を追記してみましたが
補足情報(FW/ツールのバージョンなど)
- XAMPP on Windowsを使用
- Apache/2.4.39
- 10.3.15-MariaDB
- PHP のバージョン: 7.4.10
- PHPSpreadsheetのバージョン:1.14.1
あなたの回答
tips
プレビュー