使用条件 nodejs google sheet 更新行中的特定值

Updating a specific value in row with conditions nodejs google sheet

我一直在尝试更新具有相同名称、电子邮件等的现有行。我的问题是我无法弄清楚如何在同一用户的第二次试用 WPM 中添加数字。

更清楚地说,用户提交表单并在网络应用程序中开始操作,当第一个操作结束时,数据被发送到 google 个工作表,用户移动到第二个操作。我想把第二次操作的数据发送给同名用户,email。

before after

app.post("/competition" , async (req, res) => {
const {Name, Email, Number, Faculty, University, first_Trial_WPM , first_Trial_CPM} = req.body;
const auth = new google.auth.GoogleAuth({
    keyFile: "credentials.json",

    scopes: "https://www.googleapis.com/auth/spreadsheets",

    });

const client = await auth.getClient();

const googleSheets = google.sheets({version: "v4", auth: client});

const spreadsheetId = "###";

await googleSheets.spreadsheets.values.append({

    auth,
    spreadsheetId,
    range: "Sheet1!A:G",
    valueInputOption: "USER_ENTERED",

    resource : {
        values: [
            [Name, Email, Number, Faculty, University, first_Trial_WPM , first_Trial_CPM]
        ]
    }
})

res.render("competition2");
});

 app.post("/home" , async (req, res) => {

const {Name, Email, Number, Faculty, University, second_Trial_WPM , second_Trial_CPM} = req.body;

    const auth = new google.auth.GoogleAuth({
        keyFile: "credentials.json",

        scopes: "https://www.googleapis.com/auth/spreadsheets",

    });

    const client = await auth.getClient();

    const googleSheets = google.sheets({version: "v4", auth: client});

    const spreadsheetId = "###";

    await googleSheets.spreadsheets.values.update({

        auth,
        spreadsheetId,
        range: "Sheet1!A2:I1000",
        valueInputOption: "USER_ENTERED",

        resource : {
            values: [
                [Name, Email, Number, Faculty, University, second_Trial_WPM , second_Trial_CPM]
            ]
        }
    })

    res.render('home');
});

我相信你的目标如下。

  • 您想通过搜索列“A”和“B”将值放入列“H”和“I”。
  • 您想使用 googleapis 实现此目的 Node.js。

这样的话,下面的修改怎么样?

修改后的脚本:

在此修改中,请修改您的第二个脚本以放置 second_Trial_WPMsecond_Trial_CPM 的值,如下所示。此修改后的脚本使用 NameEmailsecond_Trial_WPMsecond_Trial_CPM 的变量。

  const spreadsheetId = "###";
  const range = "Sheet1";
  const values = (await googleSheets.spreadsheets.values.get({spreadsheetId, range})).data;
  const rows = values.values.map(([a, b], i) => (a == Name && b == Email ? i + 1 : "")).filter(String);
  const data = rows.map((e) => ({values: [[second_Trial_WPM, second_Trial_CPM]], range: `'${range}'!H${e}`}));
  const res = await googleSheets.spreadsheets.values.batchUpdate({spreadsheetId, resource: {valueInputOption: "USER_ENTERED", data}});
  • 在此修改中,首先从“Sheet1”中检索值。并且,使用 NameEmail 的值检索用于放置值的行号。然后,second_Trial_WPMsecond_Trial_CPM被放入搜索行的“H”和“I”列。

  • 如果在“Sheet1”的“A”列和“B”列中检索到相同的名称,则将 second_Trial_WPMsecond_Trial_CPM 的值放入这些行。

参考文献: