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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

11376閲覧

下記を実施したところException: Those columns are out of boundsのエラーが出てきました。

rei1924

総合スコア1

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/07/16 07:56

下記を実施したところException: Those columns are out of boundsのエラーが出てきました。
色々と試してみましたが解決が出来ず困っています。
解決策をご教示いただけますと幸いです。

function onOpen() {
var menu = [{name: "シート複製(表示セルのみ)", functionName: "dupSheet"},{name: "コピー用シート削除", functionName: "delSheet"}];
SpreadsheetApp.getActiveSpreadsheet().addMenu("スクリプト", menu);
}

function dupSheet() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var copy = ss.insertSheet("コピー用",{template: sheet});
var lCol = copy.getLastColumn();
var lRow = copy.getLastRow();

for(var i = 1; i <= lCol ; i++){
if(copy.isColumnHiddenByUser(i) === true){
copy.deleteColumn(i);
}
}

for(var i = 1; i <= lRow ; i++){ if(copy.isRowHiddenByUser(i) === true){

copy.deleteRow(i);
}
}

}

function delSheet() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('コピー用');
ss.deleteSheet(sheet);
}

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問文のコードを実行した時の挙動は以下のようになっています。
・シートをコピーし非表示の列・行が存在する場合、その列・行を削除しています。
・削除した時点で、トータルの列数・行数はその分減少します。
・しかし、forループでは削除前に設定した末尾の行・列までアクセスしようとするため、
「Exception: Those columns are out of bounds」エラーが発生します。

対応策:
コピー先の行・列の走査・削除処理を行う際、先頭から末尾に向かってではなく、末尾から先頭に向かって走査し、非表示の行・列を削除するようにします。

function dupSheet() { var ss = SpreadsheetApp.getActive(); var sheet = ss.getActiveSheet(); var copy = ss.insertSheet("コピー用",{template: sheet}); var lCol = copy.getLastColumn(); var lRow = copy.getLastRow(); for(var i = lCol; i >= 1 ; i--){ if(copy.isColumnHiddenByUser(i) === true){ copy.deleteColumn(i); } } for(var i = lRow; i >= 1 ; i--){ if(copy.isRowHiddenByUser(i) === true){ copy.deleteRow(i); } } }

投稿2021/07/16 08:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

rei1924

2021/07/16 11:49

大変勉強になりました。有り難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問