要搜索 google sheet 中的行,如果它在那里更新,否则添加,使用 nodejs 中的 google APIS

To search the row in the google sheet if it is there update otherwise add, using google APIS in nodejs

我正在使用 google sheets APIS,我已成功创建将获取数据的 APIS 和 post 数据在我的 google sheet.

我的 google sheet 看起来像:

Coin    Price   Volume  Cap
ETH ,456.90   1459738 12BN
BTH ,900.89   1245983 953BN

现在,如果硬币已经存在于 sheet 中,则 API 应更新其值,如果硬币不存在,则 API 应将硬币与所有详情。

我用于附加值的 API 是:

app.post('/save-data', async (req,res) => {
    try{

        const {newCoin, price, volume, cap} = req.body;
        const { sheets } = await authentication();
        
        const postReq = await sheets.spreadsheets.values.append({
            spreadsheetId: sheetId,
            range: "Sheet1",
            valueInputOption: 'USER_ENTERED',
            resource:{
                values: [
                    [newCoin, price, volume, cap]
                ]
            }
        })
        if(postReq.status==200)
        {
            res.status(200).send("The values are saved successfully");
        }else{
            res.status(400).send("Error in saving the values");
        }

    }catch(e){
        console.log("Error while saving the data on the google sheets::", e);
        res.status(400).send();
    }
})

所以我想更改 API 以便它首先搜索是否找到硬币,然后才更新,否则添加新行。请帮我实现这个目标。

谢谢

你的情况,下面的修改怎么样?

修改后的脚本:

发件人:

const {newCoin, price, volume, cap} = req.body;
const { sheets } = await authentication();

const postReq = await sheets.spreadsheets.values.append({
    spreadsheetId: sheetId,
    range: "Sheet1",
    valueInputOption: 'USER_ENTERED',
    resource:{
        values: [
            [newCoin, price, volume, cap]
        ]
    }
})
if(postReq.status==200)
{
    res.status(200).send("The values are saved successfully");
}else{
    res.status(400).send("Error in saving the values");
}

收件人:

const {newCoin, price, volume, cap} = req.body;
const { sheets } = await authentication();

// I modified below script.
const [, ...values] = (await sheets.spreadsheets.values.get({ spreadsheetId: sheetId, range: "Sheet1" })).data.values;
const obj = values.reduce((o, [a, ...v], i) => ((o[a] = i + 2), o), {});
let postReq;
if (obj[newCoin]) {
  postReq = await sheets.spreadsheets.values.update({
    spreadsheetId: sheetId,
    range: `'Sheet1'!A${obj[newCoin]}`,
    resource: { values: [[newCoin, price, volume, cap]] },
    valueInputOption: "USER_ENTERED",
  });
} else {
  postReq = await sheets.spreadsheets.values.append({
    spreadsheetId: sheetId,
    range: "Sheet1",
    valueInputOption: "USER_ENTERED",
    resource: { values: [[newCoin, price, volume, cap]] },
  });
}
if (postReq.status == 200) {
  res.status(200).send("The values are saved successfully");
} else {
  res.status(400).send("Error in saving the values");
}
  • 当此脚本为运行时,首先从“A”列中搜索newCoin的值。并且,当找到该值时,该行将被更新。当找不到该值时,将追加一个新行。

参考文献: