ラベル シート操作 の投稿を表示しています。 すべての投稿を表示
ラベル シート操作 の投稿を表示しています。 すべての投稿を表示

2012年7月20日金曜日

シート内の最終行までの行数を取得する

シート内の最終行までの行数、すなわち、最終行の行番番号を取得するには Sheet クラスの
getMaxRows メソッドを用いる。
  
  
【構文】
SheetObject.getMaxRows()
  
戻り値 : int 型。最終行までの行数を返す。
  
  
【例】
function GetMaxRows() {
 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 var objSheet = objSpreadsheet.getActiveSheet();
 Browser.msgBox("最終行 : "+ objSheet.getMaxRows());
}
  
  
シートに 100 行あった場合は、
  
「最終行 : 100」
  
と、メッセージボックスに表示される。

シート内の最終列までの列数を取得する

シート内の最終列までの列数、すなわち、最終列の列番番号を取得するには Sheet クラスの
getMaxColumnsメソッドを用いる。
  
  
【構文】
SheetObject.getMaxColumns()
  
戻り値 : int 型。最終列までの列数を返す。
  
  
【例】
function getMaxColumns() {
 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 var objSheet = objSpreadsheet.getActiveSheet();
 Browser.msgBox("最終列: "+ objSheet.getMaxColumns());
}
  
  
シートに 20 列あった場合は、
  
「最終列 : 20」
  
と、メッセージボックスに表示される。

シートの内容をクリアする

シートをクリアするには、クリアの仕方に応じて Sheet クラスのメソッドが用意されている。
  
  
◆シートの値、計算式、書式、コメント全てをクリアする場合は、Sheet クラスの clear メソッド
を用いる。
  
  
【構文1】
SheetObject.clear()
  
戻り値 : Sheet 型。クリアする対象のシート(=SheetObject)。
  
  
【例1】
function ClearSheet() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getActiveSheet();
  var objSheet2 = objSheet.clear();
  Browser.msgBox(objSheet2.getName());
}
  
実行後に表示されるシート名は、アクティブになっているシート、すなわち、クリアの対象と
なったシート名が表示される。
  
  
◆シートのコンテンツ、すなわち、値と書式(多分)のみをクリアする場合は、Sheet クラスの
clearContents メソッドを用いる。
  
  
【構文2】
SheetObject.clearContents()
  
戻り値 : Sheet 型。クリアする対象のシート。
  
    
◆シートの書式のみをクリアする場合は、Sheet クラスの clearFormats メソッドを用いる。
  
  
【構文3】
SheetObject.clearFormats()
  
戻り値 : Sheet 型。クリアする対象のシート。
  
  
◆シートのコメントのみをクリアする場合は、Sheet クラスの clearComments メソッドを
用いる。
  
  
【構文4】
SheetObject.clearComments()
  
戻り値 : Sheet 型。クリアする対象のシート。

2012年7月11日水曜日

シートをコピーする

あるスプレッドシートのシートを別のスプレッドシートにコピーするには、Sheet クラスの copyTo
メソッドを使用する。
  
  
【構文】
SheetObject.copyTo(destination)
  
destination : Spreadsheet 型。コピー先の Spreadsheet オブジェクトを指定。
  
  
コピー先のシート名は指定できないようで、本日時点の仕様では、コピー先のシート名は
  
コピー ~ コピー元のシート名
  
になるようである。また、コピーする位置も指定できない。現時点では、一番先頭にコピー
されるようである。
  
  
以下、アクティブスプレッドシートにある「シート4」を、スプレッドシート「DestSpreadsheet」に
コピーする例を以下に記す。ちなみに、スプレッドシート「DestSpreadsheet」の Id は
  
abcdEFGHijklmnopQrstUvwXYz

であるものとする。


【例1】
function SheetCopySample1() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objDestSpreadsheet = SpreadsheetApp.openById(" abcdEFGHijklmnopQrstUvwXYz ");
var objSheet = objSpreadsheet.getSheetByName("シート4");
objSheet.copyTo(objDestSpreadsheet);
}
  
  
実行結果のコピー先のスプレッドシートは下図の通りとなる :
   
  
   
上記の例は、シートを異なるスプレッドシートへコピーする例であったが、同一スプレッド
シート内でのシートのコピーの場合は、copyTo メソッドの引数にコピー元のスプレッド
シートオブジェクトを指定すれば良い。
以下は、そのサンプルコード。
  
   
【例2】
function SheetCopySample2() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getSheetByName("シート4"); 
  objSheet.copyTo(objSpreadsheet );
}
  
  
実行の結果、アクティブスプレッドシートの先頭に
  
コピー ~ シート4
  
の名前でシートがコピーされる。

シートの名前を設定(変更)する

シートの名前を変更(設定)するには、Sheet クラスの setName メソッドを使用する。
  
  
【構文】
SheetObject.setName(name)
  
name : string 型。変更(設定)したいシート名を指定する。
戻り値 : Sheet 型。対象の Sheet オブジェクトを返す(ようである)。

  
  
【例】
function SetSheetName() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getActiveSheet();
  var objNewNameSheet = objSheet.setName("NewSheetName1");
  Browser.msgBox(objNewNameSheet.getName());
}

アクティブでないシートを削除する

アクティブシートの削除は既に述べたとおりだが、アクティブでないシートを削除するにはどう
すれば良いのか色々とメソッドを調べてみたが、それらしきものは見当たらなかった。本当は
あるのかも知れないが。。。
もし本当に該当するメソッドがないのだとすれば、アクティブでないシートの削除は下記手順
で処理するしかない :
  
  
【手順 1】
既存シート(オブジェクト)を取得するの項の要領で、削除対象のシートオブジェクトを取得
する。
  
【手順 2】
シートを選択(アクティブに)するの項で述べた要領で、削除対象シートをアクティブにする。
  
【手順 3】
アクティブになった削除対象シートを、『アクティブシートを削除する』の項のやり方に従って
削除する。

シートを選択(アクティブに)する

スプレッドシートの特定のシートを選択する、すなわち、アクティブにするには、SpreadsheetApp
クラスの setActiveSheet メソッドを用いる。
  
  
【構文】
SpreadsheetApp.setActiveSheet(sheet)
  
sheet : Sheet 型。選択したいシートオブジェクトを指定する。
  
  
シート1~5をもつアクティブなスプレッドシートについて、シート1をアクティブな状態からシート3
を選択するコードを以下に記す。
  
  
【例1】
function SetActiveSheet1() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getSheetByName("シート3");
  SpreadsheetApp.setActiveSheet(objSheet);
  Browser.msgBox(objSheet.getName() + "へ移動しました。"); 
}
  
  
上記コードを実行すると、シート3がアクティブになった後、
  
「シート3へ移動しました。」
  
とメッセージが表示される。
因みに、アクティブでないスプレッドシートのシートを選択するようにコードを書き換えてみたが、
処理が正常に実行されなかった。アクティブなスプレッドシートのシートにのみ有効なメソッド
なのかも知れない(要確認)。
  
  
スプレッドシート内の特定のシートをアクティブにするもうひとつの方法として、Spreadsheet
クラスの setActiveSheet メソッドを用いるやり方がある。個人的には、こちらの方が正統な
気がする。
  
  
【構文】
SpreadsheetObject.setActiveSheet(sheet)
  
sheet : Sheet 型。選択したいシートオブジェクトを指定する。
  
  
上の例と同様、シート3をアクティブにする例をいかに記す。
  
  
【例2】
function SetActiveSheet2() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getSheetByName("シート3");
  objSpreadsheet.setActiveSheet(objSheet);
  Browser.msgBox(objSheet.getName() + "へ移動しました。"); 
}
  
  
こちらのやり方でも、アクティブスプレッドシートでないものに対しては、エラーになってしまう。

アクティブシートを削除する

Google Apps Script では、エクセルの場合のように指定したシートを削除することはできなさそう
だが、アクティブになっているシートを削除することはできる。アクティブシートを削除する場合は、Spreadsheet オブジェクトの deleteActiveSheet メソッドを使用する。
  
  
【構文】
SpreadsheetObject.deleteActiveSheet()
  
戻り値 : Sheet 型。削除した後にアクティブになる Sheet オブジェクトを返すようである。
  
  
「シートを追加する」の項と同様に、4つのシートをもつスプレッドシートから、アクティブになって
いる「シート1」を削除するサンプルコードを以下に記す。
  
  
【例】
function DeleteActiveSheet() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.deleteActiveSheet();
  Browser.msgBox(objSheet.getName());
}
  
コードの最終行では、deleteActiveSheet メソッドを実行した結果返される Sheet オブジェクト
のシート名をメッセージボックスに表示するようにしている。実行後のサンプルシートは下記
の通り :
  
  
また、表示されるメッセージは下記の通り :
  
  
この二つの事象から、アクティブシートを削除した場合は、削除したシートの右隣にあるシート
がアクティブとなり、その(新たにアクティブになった)シートが deleteActiveSheet メソッドの戻り
値としてかえされるようである。但し、関連するサイトには、そのような記述がないので、あくまで
も推測の域をでない。deleteActiveSheet メソッドの戻り値は使用しない方が良いような気がする。

アクティブシートを取得する

アクティブシートを取得する為には Spreadsheet クラスの getActiveSheet メソッドを用いる。
  
  
【構文1】
SpreadsheetObject.getActiveSheet()
  
戻り値 : Sheet 型。アクティブになっている Sheet オブジェクトが返される。
  
  
【例1】
function GetActiveSheet1() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getActiveSheet();
  Browser.msgBox("シート名 : " + objSheet.getName());
}
  
  
アクティブシートを取得するもう一つの方法は、SpreadsheetApp クラスの getActiveSheet
メソッドを用いるやり方である。上のやり方が正統のような気もするが、こちらの方が、少ない
コードで実現できる。
  
  
【構文2】
SpreadsheetApp.getActiveSheet()
  
戻り値 : Sheet 型。アクティブになっている Sheet オブジェクトが返される。
  
【例2】
function GetActiveSheet2() {
  var objSheet = SpreadsheetApp.getActiveSheet();
  Browser.msgBox("シート名 : " + objSheet.getName());
}

全てのシート(オブジェクト)を取得する

スプレッドシート内の全てのシートオブジェクトを取得するには、Spreadsheet クラスの 
getSheets メソッドを用いる。
  
  
【構文】
SpreadsheetObject.getSheets()
  
戻り値 : Sheet 型の配列。スプレッドシートの全シートオブジェクトが配列として返される。
  
   
以下にアクティブスプレッドシートの全シートオブジェクトを取得し、それらのシート名をログ
に表示サンプルコードを記す :
  
  
【例】 
function GetAllSheet() {
  var objSheets
  objSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var intMaxIndex = objSheets.length;
  for (intIndex = 0; intIndex < intMaxIndex; intIndex++) {
    Logger.log(objSheets[intIndex].getName());
  }
}
  
  
スプレッドシートに
シート1, シート2, ..., シート5
の五つのシートがあった場合の実行結果は下記の通り :
   

シートのインデックスを取得する

スプレッドシート内のシートは、左端のシートから1、2、3、...とインデックスが付与される。この
シートのインデックスを取得するには、Sheet クラスの getIndex メソッドを用いる。
  
  
【構文】
SheetObject.getIndex()
  
戻り値 : int 型。シートのインデックス番号が返される。
  
  
以下の例はアクティブシートのインデックス番号を求めるコードである。
  
  
【例】

function GetSheetIndex() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getActiveSheet();
  Browser.msgBox("シートのインデックス : " + objSheet.getIndex());
}
  
  
左端から三番目のシートがアクティブになっている場合、上記コードを実行すると、
  
「シートのインデックス : 3」
  
と、メッセージボックスに表示される。

既存シート(オブジェクト)を取得する

スプレッドシート内の既存のスプレッドシートを取得するには、Spreadsheet クラスのgetSheetByName メソッドを用いる。
【構文】
SpreadsheetObject.getSheetByName (name)
name : String 型。シートの名前を指定する。
戻り値 : Sheet 型。


【例】

function GetSheet() {
var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objSheet = objSpreadsheet.getSheetByName("シート3");
  Browser.msgBox("シート名 : " + objSheet.getName());
}
 
 
スプレッドシートの場合と同様、Sheet オブジェクトを 取得してもシートがアクティブになったり
することはない。但し、取得したいシートが含まれるスプレッドシートが開いてなくても、シート
の取得をすることは可能である。

シートの名前を取得する

シートの名前を取得するには、Sheet クラスの getName メソッドを使用する。
  
  
【構文】
SheetObject.getName()
  
戻り値 : string 型。シート名。
  
  
【例】
function GetSheetName() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var objSheet = objSpreadsheet.getActiveSheet();
  Browser.msgBox(objSheet.getName());
}

新規シートを追加する

スプレッドシートにシートを追加する場合は、Spreadsheet クラスの insertSheet メソッドを用いる。
  
  
【構文】
SpreadsheetObject.insertSheet()
SpreadsheetObject.insertSheet(name)
SpreadsheetObject.insertSheet(nameindex)
SpreadsheetObject.insertSheet(name, index, advancedargs)
  
name : 省略可。string 型。 シート名を指定。省略した場合は、自動的に名前が付与される。
index : 省略可。integer 型。シートを挿入したいインデックス番号を指定。最初のシートは 0。
advancedargs 省略可。テンプレートを指定とあるが詳細は不明。
戻り値 : Sheet 型。追加したシートのオブジェクト値が返される。
  
  
下図の通り、4つのシートをもつアクティブスプレッドシートにシートを追加するサンプルコード
を以下に記す。コードを実行する前は、「シート1」がアクティブになっているものとする。
  
  
  
【例1】
function InsertSheet1() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  objSpreadsheet.insertSheet();
}
  
  
引数を何も指定しない場合は、シート名は自動的に付与され、且つ、実行前にアクティブに
なっていたシートの右隣に追加される(ようである)。
  
  
【例2】
function InsertSheet2() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet("SampleSheet1", 2);
  objSpreadsheet.insertSheet();
}
  
  
この例の場合は、第二引数で「2」を指定しているため、実行前にアクティブになっていたシート
が何れかにかかわらず、左から3番目の位置に新規シートが指定した名前で追加される。
  
  
【例3】
function InsertSheet3() {
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet("SampleSheet2");
  objSpreadsheet.insertSheet();
}
  
  
第二引数を指定しない場合は、第一引数で指定された名前のシートが、実行前にアクティブ
だったシートの右隣に追加される。