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には「名前の定義」を使って出力することは可能でしょうか。
- 上記”数式”を指定範囲に貼り付ける方法があれば知りたいです。(なお、この”数式の貼り付け”処理を、複数のワークシートにも適用したいです。)
現状の打開策
本来「書式出力の自動化」がテーマにあったため、手作業部分をなくしたかったのですが、この”数式”を必要とするワークシートの先頭行にのみ埋め込み、出力後、手入力でコピペしようと思っています。
あなたの回答
tips
プレビュー