我有一個包含幾個命名范圍的谷歌表。我想匯入作業表中的每個命名范圍并將它們保存為以命名范圍命名的單個物件。此外,還有 4 個類似的資料塊。因此,范圍名稱的結構類似于“block1_name1”“block1_name2”“block2_name1”“block2_name2”等。
使用以下代碼,我可以手動輸入每個范圍,但是手動輸入的范圍太多了:
const API_KEY = "###"; // Please set your API key.
const ID = "###"; // Please set your Spreadsheet ID.
const RANGE = ["Range1", "Range2"]; // Named ranges
const ranges = RANGE.map(e => `ranges=${encodeURIComponent(e)}`).join("&");
const response = await fetch(`https://sheets.googleapis.com/v4/spreadsheets/${ID}/values:batchGet?key=${API_KEY}&${ranges}`);
const { valueRanges } = await response.json();
const obj = valueRanges.reduce((o, { values }, i) => (o[RANGE[i]] = values, o), {});
console.log(obj);
如何自動匯入每個命名范圍?
如何將它們保存為每個資料塊(如 block1.name1 等)的不同物件?
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想從 Google 電子表格中檢索命名范圍串列,并希望從命名范圍中檢索值。
- 并且,您希望將值匯出為
{namedRange1: values1, namedRange2: values2,,,}. - 您想通過使用 Javascript 的 fetch API 直接請求 Sheets API 的端點來實作這一點。
在這種情況下,如何進行以下修改?
修改后的腳本:
const API_KEY = "###"; // Please set your API key.
const ID = "###"; // Please set your Spreadsheet ID.
// 1. Retrieve the named range list.
const base = `https:\/\/sheets.googleapis.com/v4/spreadsheets/${ID}`;
const res1 = await fetch(`${base}?key=${API_KEY}&fields=namedRanges(name)`);
const { namedRanges } = await res1.json();
// 2. Retrieve values from named ranges.
const ranges = namedRanges.map(({ name }) => `ranges=${encodeURIComponent(name)}`).join("&");
const res2 = await fetch(`${base}/values:batchGet?key=${API_KEY}&${ranges}`);
const { valueRanges } = await res2.json();
// 3. Create an output object.
const res = valueRanges.reduce((o, { values }, i) => (o[namedRanges[i].name] = values, o), {});
console.log(res);
// For your 2nd question.
const res3 = valueRanges.reduce((o, { values }, i) => {
const [k1, k2] = namedRanges[i].name.split("_");
if (o[k1]) {
o[k1][k2] = values;
} else {
o[k1] = { [k2]: values };
}
return o;
}, {});
console.log(res3);
測驗:
運行此腳本時,可以在控制臺中看到以下結果。
{
"block1_name2":[###values###],
"block2_name2":[###values###],
,
,
,
}
筆記:
當您有很多命名范圍時,由于 URL 長度的限制,需要將檢索值的請求分開。請注意這一點。
關于你的第二個問題,當你想轉換 from
{"block1_name2":[###values###],,,}時{"block1": {"name2":[###values###]},,,},作為前提,我認為需要確定命名范圍名稱的格式。在這種情況下,從您顯示的命名范圍示例中,它假設您的所有命名范圍的名稱格式類似于block#_name#. 請注意這一點。
參考:
- 方法:電子表格.get
- 方法:電子表格.values.batchGet
uj5u.com熱心網友回復:
您可以使用Method: spreadsheets.get列出 Google 電子表格的范圍。這作為物件回傳。
{
"namedRangeId": "xxxxxxxxxxx",
"name": "test",
"range": {
"startRowIndex": 4,
"endRowIndex": 10,
"startColumnIndex": 0,
"endColumnIndex": 3
}
},
使用該方法的簡單示例,并僅限制名稱范圍的欄位:
function execute() {
return gapi.client.sheets.spreadsheets.get({
"spreadsheetId": "Google_Sheet_ID",
"fields": "namedRanges"
})
您可以在此處的 Google 檔案中閱讀有關此方法的更多資訊
并且在同一檔案中有一個完整的示例代碼。然后,您可以使用名稱"name": "test",來重命名物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525244.html
下一篇:用冒號連接公式的范圍
