🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

2回答

2980閲覧

PhpSpreadsheetでcloneしたシートのstyleが取得できない

ms5025

総合スコア292

PHP

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

0グッド

0クリップ

投稿2019/12/06 03:37

編集2019/12/06 05:54

前提・実現したいこと

PhpSpreadsheetで行を一行追加して、罫線を引きたいです

発生している問題・エラーメッセージ

Sheet does not exist.

該当のソースコード

PhpSpreadsheetをcloneしたシートに対して
一行行を追加し、罫線をつけよう思ったのですがうまくいきません

$spreadsheet = IOFactory::load(resource_path('hoge/hage.xlsx')); $sheet = $spreadsheet->getActiveSheet(); // ベースシートをコピー $c_sheet = clone $sheet; $c_sheet->setTitle('ほげげ'); // 2行目に一行挿入 $c_sheet->insertNewRowBefore(2);      $c_sheet->getStyle('A2:B2')->getBorders()->getBottom()>setBorderStyle(Border::BORDER_THIN); ;

ベースのシートをクローンして、
そのクローンしたシートの2行めに一列行を追加しています。
さらにそのボトムの罫線をつけよう思っているのですが
Sheet does not exist. みたいな
シートがないよ、的なエラーが出てしまいます。
クローンしたシートに対して行を追加したり
値を表示したりはできてるのでシートはあります。
罫線の箇所をコメントアウトすれば普通に一行追加されたエクセルが表示されます。

どのようにすれば望んだ結果が得られるでしょうか

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/12/06 03:40

スペルミスじゃねの
ms5025

2019/12/06 05:54

エラーメッセージを手書きしてしまいましt Sheet does not exist. こちらです。スペルミスではないです
退会済みユーザー

退会済みユーザー

2019/12/06 09:45

まだ大文字小文字相違、スペルミスだね
guest

回答2

0

ベストアンサー

clone ではなく、$sheet->copy() を使ってみてください。
PHPSpreadsheet のリファレンスでも

Copy workbook (!= clone!).

と書いてあるように clone とは挙動が異なります。

本来 clone(により呼び出される __clone)は、

Implement PHP __clone to create a deep clone, not just a shallow copy.

とあるように、shallow copy ではなく deep copy を返すように組まれているようなのですが、正しく動作していない感じです。確実に deep copy を返している copy() を使った方が確実です。

投稿2019/12/06 04:38

編集2019/12/06 04:53
tacsheaven

総合スコア13703

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

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

ms5025

2019/12/06 05:15

$sheet = $spreadsheet->getActiveSheet()-copy(); で同じく試してみましたが、 同じエラーが出てしまいます。
ms5025

2019/12/11 01:33

とりあえずcloneをやめたらうまく行きました!
FKM

2020/01/30 12:04

cloneはsheetにするものじゃなくて、spreadに対して行うものですね。
guest

0

sheat dose not exist

こうエラーが出ているなら、sheat じゃなくて sheet であるべきはず...
どこかでスペルミスしているのでは?

投稿2019/12/06 05:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ms5025

2019/12/06 05:53

ごめんなさい、私がエラーメッセージを手書きしたので 間違えただけです。 スペルミスではないです。 Sheet does not exist.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問