[英]How to get a specific chart from a sheet and paste it on another sheet, in a specific range using google apps script?
[英]How to get the specific range of row data from google sheet through apps script
我正在嘗試通過應用腳本從谷歌表中獲取一些數據范圍。
讓我們舉個例子。 我在谷歌表中有 96 行數據,我想獲取 10 行。
從前端調用基於滾動事件來獲取每下 10 行數據。
我試過下面的代碼。
function doGet(request){
var ss = SpreadsheetApp.openById("MY SHEET ID");
var sheet = ss.getSheetByName("Products");
return getUsers(sheet,request);
}
function getUsers(sheet,request){
var jo = {};
var dataArray = [];
// every time from, where is passed from Frontend, like 2-10, 12-10, 22-10, etc...
var from = request.parameter.from;
var where = request.parameter.where;
// by this if condition, getting data from 1 to 90
if((sheet.getLastRow()-1)>=(from+where)){
var rows = sheet.getRange(from,1,from+where, sheet.getLastColumn()).getValues();
for(var i = 0, l= rows.length; i<l ; i++){
var dataRow = rows[i];
var record = {};
record['ProductId'] = dataRow[0];
// ...
// some more column data fetching here
// ...
dataArray.push(record);
}
jo.user = dataArray;
var result = JSON.stringify(jo);
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
// tried to get last 6 data through below code
else{
if(from <= (sheet.getLastRow() - 1)){
var rows = sheet.getRange(from,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
for(var i = 0, l= rows.length; i<l ; i++){
var dataRow = rows[i];
var record = {};
record['ProductId'] = dataRow[0];
// ...
// some more column data fetching here
// ...
dataArray.push(record);
}
jo.user = dataArray;
var result = JSON.stringify(jo);
return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
}
}
通過這段代碼,我用 10 行的塊獲得了高達 90 的值,但最后,我無法獲得最后 6 個數據。
有什么邏輯可以獲取這些記錄嗎? 我試圖通過最后一個if
語句來實現,但無法獲得。
提前致謝!
編輯:
根據Taniake的解決方案,完美獲取 ProductId 列,
此外,如果有多個列,如 ProductId、ProductName、ProductImage 等。
范圍可能是
從
const values = sheet.getRange(from, 1, sheet.getLastRow() - from - where >= 0 ? where : sheet.getLastRow() - from + 1, 1).getValues();
至
const values = sheet.getRange(from, 1, sheet.getLastRow() - from - where >= 0 ? where : sheet.getLastRow() - from + 1, sheet.getLastColumn()).getValues();
我認為在您的情況下,可能需要修改檢索到的值。 那么下面的修改呢? 在您的腳本中,值是從“A”列中檢索的。 所以,這也反映到修改后的腳本上。
當您的腳本被修改時,請進行如下修改。
從: var rows = sheet.getRange(from,1,from+where, sheet.getLastColumn()).getValues();
至:
var rows = sheet.getRange(from, 1, where, 1).getValues();
和
從: var rows = sheet.getRange(from,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
至:
var rows = sheet.getRange(from, 1, sheet.getLastRow() - from + 1, 1).getValues();
或者,作為其他模式,以下示例腳本怎么樣?
在此示例中,您的getUsers
已修改。 在此模式中,范圍會更改為from
和where
,並且從特定范圍中檢索值。
function getUsers(sheet,request){ var from = request.parameter.from; var where = request.parameter.where; const values = sheet.getRange(from, 1, sheet.getLastRow() - from - where >= 0? where: sheet.getLastRow() - from + 1, 1).getValues(); const result = JSON.stringify({user: values.map(([a]) => ({ProductId: a}))}); return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON); }
在此示例中,您的getUsers
已修改。 在此模式中,檢索列“A”的所有值,並使用splice
檢索特定值。 在這種情況下,可以直接使用from
和where
。 我認為這可能與弗蘭克的評論相同。
const values = sheet.getRange(from, 1, sheet.getLastRow() - from - where >= 0 ? where : sheet.getLastRow() - from + 1, 1).getValues();
const result = JSON.stringify({user: values.map(([a]) => ({ProductId: a}))});
當列是“ProductId”、“ProductName”和“ProductImage”等 3 列時,示例腳本 1 和 2 如下所示。
const values = sheet.getRange(from, 1, sheet.getLastRow() - from - where >= 0? where: sheet.getLastRow() - from + 1, 1).getValues(); const result = JSON.stringify({user: values.map(([a]) => ({ProductId: a}))});
const values = sheet.getRange(from, 1, sheet.getLastRow() - from - where >= 0? where: sheet.getLastRow() - from + 1, sheet.getLastColumn()).getValues(); const result = JSON.stringify({user: values.map(([a,b,c]) => ({ProductId: a: ProductName: b, ProductImage: c}))});
或者
const values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().splice(from, where); const result = JSON.stringify({user: values.map(([a]) => ({ProductId: a}))});
const values = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues().splice(from, where); const result = JSON.stringify({user: values.map(([a,b,c]) => ({ProductId: a: ProductName: b, ProductImage: c}))});
[a,b,c]
修改為[a,b,c,d,e,f,,,]
和{ProductId: a: ProductName: b, ProductImage: c}
到{ProductId: a: ProductName: b, ProductImage: c, key1: d, key2: e, key3: f}
。這是重構的開始。 一些我不明白的事情需要澄清:
from
where
添加循環? 如果我設置from=10; where=20
from=10; where=20
,我從 10 到 39 得到結果。我猜這不是你想要的。function doGet(request)
{
return myfunc(request.parameter.from, request.parameter.where);
}
function myfunc(from=10, where=20){
let sheet = SpreadsheetApp.openById("1CP1n-B87RD_BfffrOKVemmbqQ4-rq3W5t59x90tX0VA").getSheetByName("Products");
var jo = {user:[]};
const rawdata = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
const data = rawdata.slice(from, where);
data.map((row, idx, arr)=>{
let record = {};
record['ProductId'] = row[0];
jo.user.push(record);
});
return JSON.stringify(jo);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.