使用条件 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_WPM
和 second_Trial_CPM
的值,如下所示。此修改后的脚本使用 Name
和 Email
、second_Trial_WPM
和 second_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”中检索值。并且,使用 Name
和 Email
的值检索用于放置值的行号。然后,second_Trial_WPM
和second_Trial_CPM
被放入搜索行的“H”和“I”列。
如果在“Sheet1”的“A”列和“B”列中检索到相同的名称,则将 second_Trial_WPM
和 second_Trial_CPM
的值放入这些行。
参考文献:
我一直在尝试更新具有相同名称、电子邮件等的现有行。我的问题是我无法弄清楚如何在同一用户的第二次试用 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_WPM
和 second_Trial_CPM
的值,如下所示。此修改后的脚本使用 Name
和 Email
、second_Trial_WPM
和 second_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”中检索值。并且,使用
Name
和Email
的值检索用于放置值的行号。然后,second_Trial_WPM
和second_Trial_CPM
被放入搜索行的“H”和“I”列。如果在“Sheet1”的“A”列和“B”列中检索到相同的名称,则将
second_Trial_WPM
和second_Trial_CPM
的值放入这些行。