前提・実現したいこと
Google AppScriptで別のフォルダにあるスプレットシートを一つのスプレットシートにまとめたいので、スプレットシートのIDで当該のスプレットシートにある全シートを指定したいコピー先にコピーするコードを書きたいです。
もし可能であれば、シートをコピーしたあとにシート名にある(コピー)を削除し、スプレットシートの頭に新しいシートを作成し、全てシートの名前の一覧を作成したいです。
しかし、全シートをコピーしたかったので、自分なりにコードを変えてみましたが、今度はコードを起動しても何も起こらなかったです。
説明がわかりにくくて申し訳ございません。
まだまだ初心者なので、ご教授頂ければ幸いでございます。
該当のソースコード
function function_name() { var source = SpreadsheetApp.openById('元のファイルID'); var ss_num = new Array(); if (source.length >= 1) { for(var i = 0;i < source.length; i++) var sheet = source.getSheets()[i]; var destination = SpreadsheetApp.openById('コピー先ID'); sheet[i].copyTo(destination); } }
###シート名取得コード
function getname(sheet_no) { var name= SpreadsheetApp.getActive().getSheets()[sheet_no - 1].getName(); return name; }
###現在のコード
function q189933() { const destination = SpreadsheetApp.openById('コピー先ID'); SpreadsheetApp.openById('元のファイルID').getSheets().forEach( function(e) { e.copyTo(destination); } ); } function q189933_() { SpreadsheetApp.openById('コピー先ID').insertSheet('Sheet List', 0); var sheetlist = SpreadsheetApp.openById('コピー先ID'); var movesheet = sheetlist.getSheetByName('Sheet List'); sheetlist.setActiveSheet(movesheet); sheetlist.moveActiveSheet(1); } function q189933__() { const sheet = SpreadsheetApp.openById('コピー先ID').getSheetByName('Sheet List'); sheet.clear(); const dat = SpreadsheetApp.openById('コピー先ID').getSheets().map(function(e){return [e.getSheetName(), e.getSheetId()];}).filter(function(e){return e[0] !== 'Sheet List';}); sheet.getRange(1, 1, dat.length, 2).setValues(dat); }
シートidを得てもそれだけでシートを指定して開けるわけでもなくなんのためにそんなことがしたいのか書いていただけませんか?
あと、コードは1シートだけコピーできていた、動くものでお願いしたいです。
初めてこのサイトを使いましたので、至らない所が多くてすみません。
今回は異なるスプレットシートを一つのシートにまとめて、目次を作りたかったためのコードとなります。
この度は非常にわかりにくい説明にも関わらず、ご回答いただき誠にありがとうございます。
頂いた回答につきまして、自分なりに解析して見ましたが、理解できない箇所がございましたので、ご教授いただきたい箇所がございますので、回答頂ければ幸いでございます。
【自分なりの理解】
ご教授いただいたコードは3つの部分に分けており、1つ目はシートをコピー、2つ目はシート一覧を作成、3つ目はシート一覧にシート名及びIDを記入。
【不明な点】
・function(e)の中にある「e」の意味はなんでしょうか、推測では何らかの変数だと思います
・map(function(e)...の部分について、推測では「e」の位置を特定するものだと思いますが、いまいち理解できなかったので、ご教授頂ければ幸いです。
シートidはただの数字ですよ、確か。それのどこが目次として意味があるのですか?
というかリンクにもならないそのidが目次に必要ですかね?
(シート名の必要性は理解してます。これはteratail初心者とかプログラム初心者とか関係なく、ユーザ体験として聞きたい事項です)
お忙しい中、ご回答いただき誠にありがとうございます。
シートidは他のコードで使用する必要がある場合に備えて、シート一覧にまとめておきたいと思いました、たしかに必要がないかもしれません...。
業務上、翻訳するスプレットシートをいくついただくのですが、それらを一つのスプレットシートにまとめて、シート名の一覧及び文字数の統計が必要になります。
いつもは手作業でしたが、Google AppScriptの存在を知り、効率化を捗るために独学をしており、それでいくつのスプレットシートを一つのスプレットシートにまとめて、一覧表を作成するコードを書いてみました。
現在、コピーしたシート名には(コピー)の文字がついているので、そちらをを削除したいのですが、ご教授いただけないでしょうか。
コピーする際に名前を指定する関数は調べましたが、今回のように一括にコピーする場合はどのようにコピーの文字だけを削除できますか。
参考したコード:SpreadsheetApp.openById(コピー先ID).Copy("名前の指定")
例えばpdfにするとかだとidの出番があるかもしれません。あとはシートの場所を移動するとかなら。しかし移動するとidが変わる可能性があるのでこれも微妙。一般的にシート名がわかっているならそれに加えてidは不要に思えます。
コピーの、名前は調べて回答に追記します
回答2件
あなたの回答
tips
プレビュー