質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PhpSpreadsheet

PhpSpreadsheetは、PHPExcelの後継であるPHPライブラリです。新規Excelファイルの作成や既存Excelファイルの読み書き、ファイル編集など一連の操作を無償で行うことができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

0回答

679閲覧

phpspreadsheetを使ってEXCELファイルのデータをデータベースに登録

退会済みユーザー

退会済みユーザー

総合スコア0

PhpSpreadsheet

PhpSpreadsheetは、PHPExcelの後継であるPHPライブラリです。新規Excelファイルの作成や既存Excelファイルの読み書き、ファイル編集など一連の操作を無償で行うことができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2022/06/13 03:00

編集2022/06/13 03:58

前提

・現在EXCELファイルをアップロードし、「Simple XLSX」というライブラリを使ってEXCELファイルをデータベースに登録しています。

実現したいこと

  1. 私が書いた現在のコードがとても汚く、もう少し簡略化したいと思っています。
  2. 合わせて、最終的にデータをファイルにして出力しているのですが、その時「phpspreadsheet」ライブラリを使用しているので、これを期に、EXCELファイルの読み込み>データベースの登録までを「Simple XLSX」から「phpspreadsheet」でおこないたいと思っています。
  3. 今回はじめて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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問