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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1494閲覧

phpspreadsheet:エクセルの関数が原因?のタイムアウトエラー

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/04/10 07:30

Windows10 + XAMPP(PHP7 + MariaDB10.3.15)で利用しています。

データベースから取得したデータをエクセルの雛形ファイルに貼り付けるPHPプログラムを作成しています。

その雛形となるファイルに、集計に必要な関数を埋め込むと、ファイルをエクスポート後に計算してくれればいいものの、内部処理の状態でも計算を行っているのか、時間がかかりすぎてタイムアウトしてしまいます。

原因となっている関数(P6セルに埋め込まれているもの)は下記の通りです。

EXCEL

1=IFERROR(VLOOKUP(A6,'01'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'02'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'03'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'04'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'05'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'06'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'07'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'08'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'09'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'10'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'11'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'12'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'13'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'14'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'15'!$A$6:$AO$2904,16,FALSE),IFERROR(VLOOKUP(A6,'99'!$A$6:$AO$2904,16,FALSE),""))))))))))))))))

16個ものワークシートからVLOOKUPで抽出する関数を埋め込むこと自体が無謀なのかもしれませんが、手入力を行ったワークシートから抽出した結果を集計するためのワークシートに反映しなければならないため、これだけ長くなってしまいました。

この関数を、印刷時の1ページ分のセルに埋め込む程度なら、多少は時間がかかっても、タイムアウトすることなく処理できるのですが、最初のワークシートに3000行分埋め込むだけで、タイムアウト時間(300秒)を超えてしまいます。
さらには、同様のワークシートを行数を500行程度に削減して6シート分必要になっています。

もともと数式の「名前の定義」を使っていたのですが、phpSpreadSheetを通す段階でスルーされてしまい、出力したときのファイルには定義されていなかったため、これだけ長文の関数を埋め込みしかありませんでした。

知りたいこと

  • phpSpreadSheetには「名前の定義」を使って出力することは可能でしょうか。
  • 上記”数式”を指定範囲に貼り付ける方法があれば知りたいです。(なお、この”数式の貼り付け”処理を、複数のワークシートにも適用したいです。)

現状の打開策

本来「書式出力の自動化」がテーマにあったため、手作業部分をなくしたかったのですが、この”数式”を必要とするワークシートの先頭行にのみ埋め込み、出力後、手入力でコピペしようと思っています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/04/10 08:00

処理後の、すぐ使えるExcelを出力しなければならないのでしょうか。どうしても互換性の問題がつきまとうので、VBAを駆使して後加工をした方がいいのかもしれないと思えます。
退会済みユーザー

退会済みユーザー

2020/04/10 08:08

やはりそうなのですね。 もう少しがんばってみて、だめなら「現状の打開策」でなんとかやってみます。 (VBAはできるだけ使用したくないため)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問