36

Google アプリ スクリプトを使用して、スプレッドシートの 1 つの列のみから文字列値を取得して、後で if 条件と比較したいと考えています。インターネットを検索したところ、このリンクが見つかりました - これがばかげているように聞こえる場合は申し訳ありません

var values = SpreadsheetApp.getActiveSheet().getRange(2, 3, 6, 4).getValues(); 

それは役立つに違いないと思います。唯一の問題は、値を取得したい列が動的であるため、この列の範囲をどのように設定するかです

4

6 に答える 6

56

単純に使用する場合:

var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues()

行と列でインデックス付けされたシート内のすべてのデータの2次元配列を取得します。

したがって、列A、行1の値を取得するには、列A、行2、values[0][0]列Cの行1などに使用します。values[1][0]values[0][2]

forループ(単一の列)で反復する必要がある場合:

for(n=0;n<values.length;++n){
var cell = values[n][x] ; // x is the index of the column starting from 0
}

forループ(単一行)で反復する必要がある場合:

for(n=0;n<values[0].length;++n){
var cell = values[x][n] ; // x is the index of the row starting from 0
}
于 2013-02-20T22:37:12.087 に答える
4

行をループして列の値を取得するはるかに簡単な方法..それが役立つことを願っています

var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();

values.forEach( function(row) {
  row[4] // column index as 4
});
于 2018-05-06T16:53:45.850 に答える
1

この回答で後述するすべての関数は、1 次元配列を出力します。これは、操作が少し便利になると思います。

解決策 1:

列または行を取得する別の方法:

function getColumn(activeSheet, columnIndex) {
  return activeSheet.getRange(1, columnIndex)
    .getDataRegion(SpreadsheetApp.Dimension.ROWS)
    .getValues()
    .flat();
}

function getRow(activeSheet, rowIndex) {
  return activeSheet.getRange(rowIndex, 1)
    .getDataRegion(SpreadsheetApp.Dimension.COLUMNS)
    .getValues()[0];
}

注:これは、指定された方向に隣接するセルにあるデータのみをフェッチします。

例: 1, 2, 3, 空白, 4, 空白, 5 ----- 4 と 5 はスキップされます。も参照してくださいgetDataRegion(dimension)。データ領域内に空のセルがない場合、これは理想的なソリューションです。

解決策 2:

@itazzad のソリューションを拡張し、

// JS object containing indices as keys and capital letters as value.
const INDEX_ALPHABET = Array.from(new Array(26))
  .reduce((accumulatedObj, _, index) =>
    (accumulatedObj[index + 1] = String.fromCharCode(index + 65), accumulatedObj), {});

// uses a1 notation
function getColumn(activeSheet, columnIndex) {
  var columnA1Notation = INDEX_ALPHABET[columnIndex]
  return activeSheet.getRange(columnA1Notation + ':' + columnA1Notation)
    .getValues()
    .flat();
}

// uses a1 notation
function getRow(activeSheet, rowIndex) {
  return activeSheet.getRange(rowIndex + ':' + rowIndex) 
    .getValues()[0];
}

を参照してくださいgetRange(a1Notation)。R1C1表記とA1表記の意味がよくわからなかったのですが、こちらの記事が少し役に立ちました。

解決策 3:

getValues()高価な呼び出しでありRange、サイズが大きくなるにつれて実行時間が長くなる可能性があると思われる場合は、これを確認してください。基本的に、最後の行または列を取得し、それを使用してRange、関連するデータを省略せずに を削減します。

function getRow(activeSheet, rowIndex) {
  var lastColumn = activeSheet.getDataRange().getLastColumn()
  return activeSheet.getRange(rowIndex, 1, 1, lastColumn)
    .getValues()[0]
}

function getColumn(activeSheet, columnIndex) {
  var lastRow = activeSheet.getDataRange().getLastRow()
  return activeSheet.getRange(1, columnIndex, lastRow, 1)
    .getValues()
    .flat()
}

注:行または列のスライスを取得したい場合は、チェックアウトしてくださいgetRange(row, column, numRows, numColumns)

于 2021-07-05T11:15:37.493 に答える