Google Sheets 資料
寫法一:find
使用 getDataRange 搭配 getValues 讀取全部資料 (包含標題) 進記憶體,再透過 find 來找出該筆資料
寫法二:findIndex
使用 getRange() 搭配 getLastRow() 明確指定範圍來讀取全部資料 (不包含標題) 進記憶體,再透過 findIndex 來找出該筆資料,因為是抓取全部資料,所以 findIndex 找出該筆資料的 rowIndex 後, rowIndex + [標題 Row] + [rowIndex 和 rowPosition 起始點差值] ,即為該筆資料在 Sheet 內的 RowPosition
寫法三:createTextFinder
使用 createTextFinder() 直接搜尋 Google Sheet 內資料,沒有把全部資料拉進記憶體內進行搜尋,詳見 [GAS] TextFinder 筆記
function 寫法一(email) {
let sheet = GetSheet_Member();
let dataRange = sheet.getDataRange();
let values = dataRange.getValues();
let row = values.find(r => r[1] === email);
if (!row) {
return {
success: false,
error: "該 email 不存在"
};
}
return {
success: true,
data: {
姓名: row[0],
電子信箱: row[1]
}
}
}
寫法二:findIndex
使用 getRange() 搭配 getLastRow() 明確指定範圍來讀取全部資料 (不包含標題) 進記憶體,再透過 findIndex 來找出該筆資料,因為是抓取全部資料,所以 findIndex 找出該筆資料的 rowIndex 後, rowIndex + [標題 Row] + [rowIndex 和 rowPosition 起始點差值] ,即為該筆資料在 Sheet 內的 RowPosition
function 寫法二(email) {
let sheet = GetSheet_Member();
let lastRow = sheet.getLastRow();
let limitedRange = sheet.getRange(`A2:B${lastRow}`);
let values = limitedRange.getValues();
let rowIndex = values.findIndex(r => r[1] === email);
if (rowIndex === -1) {
return {
success: false,
error: "該 email 不存在"
};
}
let rowPosition = rowIndex + 2; // 2 為 [標題 Row] + [rowIndex 和 rowPosition 起始差值]
let columnC = 3;
sheet.getRange(rowPosition, columnC).setValue("是");
return {
success: true,
error: "更新成功"
};
}
寫法三:createTextFinder
使用 createTextFinder() 直接搜尋 Google Sheet 內資料,沒有把全部資料拉進記憶體內進行搜尋,詳見 [GAS] TextFinder 筆記
function 寫法三(email) {
let sheet = GetSheet_Member();
let columnB = sheet.getRange("B:B");
let textFinder = columnB.createTextFinder(email);
let foundRange = textFinder
.matchEntireCell(true)
.findNext();
if (!foundRange) {
return {
success: false,
error: "該 email 不存在"
};
}
let rowPosition = foundRange.getRow();
let columnA = 1;
let rangeA = sheet.getRange(rowPosition, columnA);
return {
success: true,
data: {
姓名: rangeA.getValue(),
電子信箱: email
}
}
}

沒有留言:
張貼留言