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

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

詳細はこちら
Google スプレッドシート

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

3017閲覧

gas 指定フォルダにスプレッドシートのコピーを作成した後、データをセットできない

Gento

総合スコア77

Google スプレッドシート

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

Google Apps Script

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/12/16 00:54

編集2019/12/16 08:10

前提・実現したいこと

よくあるような見積書から請求書を生成するプログラムを作っています。
生成された請求書を共有できるようにしたいので、保存先を指定した共有フォルダにしました。

指定フォルダに用意しておいた請求書テンプレのコピーを生成することには成功したのですが、見積書からのデータを転記できません。。

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

オブジェクト 請求書(〇〇) で関数 getRange が見つかりません。

このリストの中にgetRangeがなかったので、このようなエラーが出ている。
解説

該当のソースコード

※内容を簡略化してあります。

function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Custom') .addItem('請求書を生成', 'menuItem1') .addToUi(); } // First itemをクリックした時の処理 function menuItem1() { //現在のスプレットシートを取得する var sheet1 = SpreadsheetApp.getActiveSheet(); //コピー先のスプレットシートのid var templateid = "***"; var template = DriveApp.getFileById(templateid); //保存先フォルダオブジェクトの取得 var destfolderid = "***"; var destfolder = DriveApp.getFolderById(destfolderid); var name1 = sheet1.getRange(2, 2).getValue(); var name2 = sheet1.getRange(3, 2).getValue(); var filename = '請求書(' + name1 + ')'; var sheet = template.makeCopy(filename, destfolder); sheet.get //データを転記 //コピー先のシートの中のセルを指定して、コピー実行 sheet.getRange(2, 2).setValue(name1); ←ここでエラー sheet.getRange(3, 2).setValue(name2); }

試した事

var template = DriveApp.getFileById(templateid);で作ったtemplateからでは、**getRange()**が呼べないようなので、コピー作成されたシートを名前で指定して取得し、**getRange()**を呼んでみました。

gas

1//現在のスプレットシートを取得する 2 var sheet1 = SpreadsheetApp.getActiveSheet(); 3 4 //コピー先のスプレットシートのid 5 var templateid = "14O0u_YKnbw4w8gwidynx80pMeGfnTWkzw6zatUAAmpI"; 6 var template = DriveApp.getFileById(templateid); 7 8 //保存先フォルダオブジェクトの取得 9 var destfolderid = "1s8k_JA49Vp0skfTRJ7spduq9iagXb5v_"; 10 var destfolder = DriveApp.getFolderById(destfolderid); 11 12 var name1 = sheet1.getRange(2, 2).getValue(); 13 var name2 = sheet1.getRange(3, 2).getValue(); 14 15 var filename = '請求書(' + name1 + ')'; 16 var sheet = template.makeCopy(filename, destfolder); 17 18 var copiedSheet = SpreadsheetApp.getActiveSpreadsheet(); //追加 19 var invoice = copiedSheet.getSheetByName(filename); //追加 20 Logger.log(invoice); 21 22 //データを転記 23 //コピー先のシートの中のセルを指定して、コピー実行 24 invoice.getRange(2, 2).setValue(name1); 25 invoice.getRange(3, 2).setValue(name2);

しかし、invoicenullで、結局**getRange()**は呼べなかったです。。。

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

こちらを参考に、指定フォルダへのコピー作成を実装できました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

GAS

1var copiedSheet = SpreadsheetApp.open(sheet); 2var invoice = copiedSheet.getSheetByName('シート名');

これでいけないですかね?

投稿2019/12/16 08:40

編集2019/12/16 08:42
macaron_xxx

総合スコア3191

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

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

Gento

2019/12/17 01:28

おおーー!できました。ほんとありがとうございます! また、スプレッドシートのファイル名と、スプレッドシートのシート名を、同じものとして勘違いしていたのにも気づかされました・・・。 大変参考になりました。
Gento

2019/12/17 01:30

var copiedSheet = SpreadsheetApp.open(sheet); var sheets = copiedSheet.getSheets(); var sheet = sheets[0]; sheet.getRange(2, 2).setValue(name1); このようにすれば、もしシート名がわからなくとも取得して、getRangeを使って値を転記できますね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問