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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1066閲覧

Google Apps ScriptのinsertRowsメソッドで謎のエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/12/30 09:33

編集2022/12/30 10:15

前提

プログラム経験3ヶ月目の初心者エンジニアです。

GoogleスプレッドシートのGASでエラーが起きたが
なにがエラーを起こしてるのか皆目検討がつきません。

実現したいこと

  • シートに連携したGoogleフォームに回答があればテンプレをもとにシートを新規作成
  • 新規作成したシートにフォームの回答内容に応じて行を追加

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

TypeError: currentScheduleSheet.insertRows is not a function autoCreateSheet @ コード.gs:80

該当のソースコード

JavaScript

1function autoCreateSheet(){ 2 3 // アンケート結果シートを取得 4 var questionSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("アンケート結果"); 5 6 // 最新の入力行を取得 7 var lastRowNumber = questionSheet.getLastRow(); 8 9 10 11 12 // 1.年間計画表を自動作成 13 14 // 1-1.年間計画表のテンプレートを取得 15 var templateScheduleSheet = DriveApp.getFileById('16VIU26jof49hoiJ6HS27OVsg06tz17kFNzEWnsGgY0w'); //※コピーしてアカウントが変わる場合は変更 16 17 18 // 1-2.生徒氏名を取得 19 const studentNameCellNumber = 2; //アンケート結果シート配置替えで要変更 20 var studentName = questionSheet.getRange(lastRowNumber,studentNameCellNumber).getValue();  21 22 23 // 1-3.年間計画表フォルダ作成 24 var newFolder = DriveApp.createFolder(studentName); 25 26 27 // 1-4.ファイル名とフォルダIDを取得 28 var newScheduleSheetName = '年間計画表' + studentName + 'さん'; 29 var scheduleFolderId = DriveApp.getFolderById('1l_2mihnbveca7sDBCO4ium4JRnlT97hy'); //※コピーしてアカウントが変わる場合は変更 30 31 32 // 1-5.年間計画表を新規作成 33 var newScheduleSheet = templateScheduleSheet.makeCopy(newScheduleSheetName,scheduleFolderId); 34 35 36 // 1-6.年間計画表に生徒氏名を自動入力 37 var newScheduleSheetId = newScheduleSheet.getId(); 38 var currentScheduleSheet = SpreadsheetApp.openById(newScheduleSheetId); //新規作成したシートにアクセス 39 currentScheduleSheet.getRange("B11:O11").setValue(studentName + "さん"); 40 41 42 // 1-7.志望校・志望学部を自動入力 43 const preferredSchoolCellNumber = 5; //アンケート結果シート配置替えで要変更 44 const preferredFacultyCellNumber = 6; //アンケート結果シート配置替えで要変更 45 var preferredSchool = questionSheet.getRange(lastRowNumber,preferredSchoolCellNumber).getValue(); 46 var preferredFaculty = questionSheet.getRange(lastRowNumber,preferredFacultyCellNumber).getValue(); 47 currentScheduleSheet.getRange("B12:O12").setValue("志望校:" + preferredSchool + " " + preferredFaculty); 48 49 50 // 1-8.科目を計画表に自動入力 51 52 // 科目のセル取得 53 const subjectCellNumber = 9; 54 var subjectCell = questionSheet.getRange(lastRowNumber,subjectCellNumber).getValue(); 55 56 // 条件分岐で科目表示 57 58 var currentLastRow = 14; // 科目セルの1つ下の行 59 const subjectColumnNumber = 2; //科目列 60 const majorColumnNumber = 3; //単元列 61 62 // 英語 63 if (subjectCell.includes("英語")){ 64 const numberOfMajorEnglish = 4; //単元数 65 currentScheduleSheet.insertRows(currentLastRow,numberOfMajorEnglish); //行を挿入 66 // 科目追加 67 currentScheduleSheet.getRange(currentLastRow,subjectColumnNumber,numberOfMajorEnglish).setValue("英語").setBackgroundRGB(56,185,255).merge(); 68 69 //単元追加 70 currentScheduleSheet.getRange(currentLastRow,majorColumnNumber).setValue("単語"); 71 currentScheduleSheet.getRange(currentLastRow + 1,majorColumnNumber).setValue("文法"); 72 currentScheduleSheet.getRange(currentLastRow + 2,majorColumnNumber).setValue("解釈"); 73 currentScheduleSheet.getRange(currentLastRow + 3,majorColumnNumber).setValue("長文読解"); 74 currentLastRow += numberOfMajorEnglish; //最終行を更新 75 } 76 77 // 現代文 78 if (subjectCell.includes("現代文")){ 79 const numberOfMajorJapanese = 2; //単元数 80 currentScheduleSheet.insertRows(currentLastRow,numberOfMajorJapanese); //行を挿入 81 // 科目追加 82 currentScheduleSheet.getRange(currentLastRow,subjectColumnNumber,numberOfMajorJapanese).setValue("現代文").setBackgroundRGB(255,66,0).merge(); 83 84 //単元追加 85 currentScheduleSheet.getRange(currentLastRow,majorColumnNumber).setValue("背景知識"); 86 currentScheduleSheet.getRange(currentLastRow + 1,majorColumnNumber).setValue("読解"); 87 currentLastRow += numberOfMajorJapanese; //最終行を更新 88 } 89 90 // 古文 91 if (subjectCell.includes("古文")){ 92 const numberOfMajorClassic = 4; //単元数 93 currentScheduleSheet.insertRows(currentLastRow,numberOfMajorClassic); //行を挿入 94 // 科目追加 95 currentScheduleSheet.getRange(currentLastRow,subjectColumnNumber,numberOfMajorClassic).setValue("古文").setBackgroundRGB(195,66,0).merge(); 96 97 //単元追加 98 currentScheduleSheet.getRange(currentLastRow,majorColumnNumber).setValue("単語"); 99 currentScheduleSheet.getRange(currentLastRow + 1,majorColumnNumber).setValue("文法"); 100 currentScheduleSheet.getRange(currentLastRow + 2,majorColumnNumber).setValue("解釈"); 101 currentScheduleSheet.getRange(currentLastRow + 3,majorColumnNumber).setValue("長文読解"); 102 currentLastRow += numberOfMajorClassic; //最終行を更新 103 } 104 105 // 漢文 106 if (subjectCell.includes("漢文")){ 107 const numberOfMajorChinese = 2; //単元数 108 currentScheduleSheet.insertRows(currentLastRow,numberOfMajorChinese); //行を挿入 109 // 科目追加 110 currentScheduleSheet.getRange(currentLastRow,subjectColumnNumber,numberOfMajorChinese).setValue("漢文").setBackgroundRGB(215,65,39).merge(); 111 112 //単元追加 113 currentScheduleSheet.getRange(currentLastRow,majorColumnNumber).setValue("文法"); 114 currentScheduleSheet.getRange(currentLastRow + 1,majorColumnNumber).setValue("長文読解"); 115 currentLastRow += numberOfMajorChinese; //最終行を更新 116 } 117 118}

試したこと

  • スペルミスチェック
  • 該当エラー箇所をコメントアウトして正常に動くか確認(エラーは起きなかった)
  • insertRowsの引数の型に誤りがないか確認
  • Google検索やchatGPTを用いて原因を探るも特定できず
  • 変数の宣言で";"の書き忘れなどがないか確認

補足情報(FW/ツールのバージョンなど)

15行と29行のIDの部分は機密情報なのでふせさせていただきました。

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

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

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

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

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

guest

回答2

0

SpreadsheetApp.openByIdが返すものはSpreadsheetオブジェクトです。
そしてinsertRowsメソッドがあるのはSheetオブジェクトになります。

なので、スプレッドシートを取得するのではなくシートを取得するようにしましょう。

投稿2022/12/30 10:21

YAmaGNZ

総合スコア10251

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

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

0

ベストアンサー

エラーとなる関数は、変数currentScheduleSheetの関数として使われており、currentScheduleSheetは、以下で作成。

GoogleAppsScript

1var currentScheduleSheet = SpreadsheetApp.openById(newScheduleSheetId);

上記コードを公式で確認したところ、currentScheduleSheet の型は、Spreadsheet。
SpreadsheetApp.openById

Spreadsheetを公式で確認したところ、insertRowで始まる関数は、insertRowAfter()、insertRowBefore()、nsertRowsAfter()、insertRowsBefore()のみ。
Class Spreadsheet

結論としては、存在しない関数を呼んでいるからエラーということになります。

修正は、YAmaGNZさんのご回答にあるようにするか、ロジックを調整して、insertRowsAfter()を使うかになるかと。

投稿2022/12/30 10:34

編集2022/12/31 04:52
YT0014

総合スコア1708

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問