如何从特定列中检索数据
How to retrieve data from specific column
在我的 AppScript 代码中,我有以下代码,returns 完美地 d
和 e
列 JSON 格式
fileID = "xxxxxxvxjRD_kjE7gzYE3WAcGdxaQEEQNReY"
sheetName = "Data"
function doGet(e) {
// Logger.log(e.parameter.method);
// Open Google Sheet using ID
var ss = SpreadsheetApp.openById(fileID);
var sheet = ss.getSheetByName(sheetName);
// Read all data rows from Google Sheet
const values = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
// Converts data rows in json format
const result = JSON.stringify(values.map(([a,b,c,d,e]) => ({SupplierName: d,Brand:e,})));
// Returns Result
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
values.map(([a,b,c,d,e])
在上面的代码中起着重要的作用。
现在列数越来越多,我需要2列,即z
和ad
,而不是d
和e
,是否需要在 map
函数中使用的数组中包含所有列名,即:
values.map(([a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t.....,ad])
或者有更好的方法只使用 2 个索引。
你的情况,下面的方法怎么样?
示例脚本:
// Ref:
const letterToColumn = letter => {
let column = 0,
length = letter.length;
for (let i = 0; i < length; i++) {
column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);
}
return column;
};
const columnLetters = ["Z", "AD"]; // Column letters you want to retrieve.
const res = values.map(r => columnLetters.map(e => r[letterToColumn(e) - 1]));
console.log(res)
- 在此示例脚本中,为了从特定列中检索值,通过将列字母转换为列号来检索值。这样,您可以通过给出
const columnLetters = ["Z", "AD"]
. 来检索值
或许你可以试试这样按列取值:
使用高级表格服务,majorDimension: "COLUMNS",
您可以使用 get 或 batchGet 方法。两者都有效。
const result ={}
const values = Sheets.Spreadsheets.Values.batchGet('xxxxxxvxjRD_kjE7gzYE3WAcGdxaQEEQNReY', {
ranges: [
//provide the range your need eg from a to z
"Data!A:Z",
],
majorDimension: "COLUMNS",
}).valueRanges;
for ( i in values[0].values){
//result[header[i]] = values[0].values[i]
const header = values[0].values[i][0];
result[header] = values[0].values[i]
}
console.log(result)
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
在我的 AppScript 代码中,我有以下代码,returns 完美地 d
和 e
列 JSON 格式
fileID = "xxxxxxvxjRD_kjE7gzYE3WAcGdxaQEEQNReY"
sheetName = "Data"
function doGet(e) {
// Logger.log(e.parameter.method);
// Open Google Sheet using ID
var ss = SpreadsheetApp.openById(fileID);
var sheet = ss.getSheetByName(sheetName);
// Read all data rows from Google Sheet
const values = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
// Converts data rows in json format
const result = JSON.stringify(values.map(([a,b,c,d,e]) => ({SupplierName: d,Brand:e,})));
// Returns Result
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
values.map(([a,b,c,d,e])
在上面的代码中起着重要的作用。
现在列数越来越多,我需要2列,即z
和ad
,而不是d
和e
,是否需要在 map
函数中使用的数组中包含所有列名,即:
values.map(([a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t.....,ad])
或者有更好的方法只使用 2 个索引。
你的情况,下面的方法怎么样?
示例脚本:
// Ref:
const letterToColumn = letter => {
let column = 0,
length = letter.length;
for (let i = 0; i < length; i++) {
column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);
}
return column;
};
const columnLetters = ["Z", "AD"]; // Column letters you want to retrieve.
const res = values.map(r => columnLetters.map(e => r[letterToColumn(e) - 1]));
console.log(res)
- 在此示例脚本中,为了从特定列中检索值,通过将列字母转换为列号来检索值。这样,您可以通过给出
const columnLetters = ["Z", "AD"]
. 来检索值
或许你可以试试这样按列取值:
使用高级表格服务,majorDimension: "COLUMNS",
您可以使用 get 或 batchGet 方法。两者都有效。
const result ={}
const values = Sheets.Spreadsheets.Values.batchGet('xxxxxxvxjRD_kjE7gzYE3WAcGdxaQEEQNReY', {
ranges: [
//provide the range your need eg from a to z
"Data!A:Z",
],
majorDimension: "COLUMNS",
}).valueRanges;
for ( i in values[0].values){
//result[header[i]] = values[0].values[i]
const header = values[0].values[i][0];
result[header] = values[0].values[i]
}
console.log(result)
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);