ต้องขอบอกก่อนเลยนะคะว่าเราพึ่งได้เริ่มศึกษา การใช้ GoogleApp Script
คือเราต้องการเปลี่ยนรูปโปรไฟล์ของ Gmail แบบให้มันเปลี่ยนเองให้ตรงกับรูปภาพที่เรามีอยู่ใน Google Drive
เราเลยหาข้อมูลแล้วไปเจอ Script นี้มาค่ะ ซึ่งเราลองทำแล้วมันได้ผล
function updateGmailPhotoFromDrive() {
try {
var userEmail = 'amit@labnol.org';
var fileName = userEmail + ".jpg";
var blob = DriveApp.getFilesByName(fileName).next().getBlob();
var data = Utilities.base64EncodeWebSafe(blob.getBytes());
AdminDirectory.Users.Photos.update({photoData: data}, userEmail);
}
catch (err) {
Logger.log(err.toString());
}
}
แต่เนื่องจากว่าเรามีข้อมูล Gmail ที่ต้องทำการเปลี่ยนรูปโปรไฟล์จำนวนเยอะมาก เราเลยทำการสั่งวนลูปค่ะและเราก็มีลองปรับเปลี่ยน Script บ้างแต่พบว่าเหมือน Script ข้างต้นจะไม่สามารถใช้ทำงานร่วมกับการวนลูป For ลูป while ได้เลย คือเราก็งงๆไม่แน่ใจว่าเราเข้าใจการทำงานมันถูกต้องมั้ย
นี่คือที่เราทำค่ะ
function myFunction() {
var ss = SpreadsheetApp.openById("1uvdmqpnRw5EcIme0NO05389X9Xx3-0-9eOR6LoEz4kI");
var text = ss.getSheetByName("Sheet1");
var Range = ss.getDataRange();
var LastRow = Range.getLastRow();
for(i=2;i<LastRow+1;i++){
var colA = "A" + i;
var fileName = "";
var userEmail = text.getRange("A2").getValue();
var fileName = userEmail.toString().replace("@KKK.com", ".jpg");
var blob = DriveApp.getFilesByName(fileName).next().getBlob();
var data = Utilities.base64EncodeWebSafe(blob.getBytes());
AdminDirectory.Users.Photos.update({photoData: data}, userEmail);
var userEmail1 = text.getRange("A3").getValue();
var fileName1 = userEmail1.toString().replace("@KKK.com", ".jpg");
var blob1= DriveApp.getFilesByName(fileName1).next().getBlob();
var data1 = Utilities.base64EncodeWebSafe(blob1.getBytes());
AdminDirectory.Users.Photos.update({photoData: data1}, userEmail1);
i++;}}
พอเรากดRun มันแจ้งเตือน ว่า " Cannot retrieve the next object: iterator has reached the end. (line 26, file "AA") "
บรรทัดที่ถูกแจ้งเตือน >>var blob1= DriveApp.getFilesByName(fileName1).next().getBlob();
หากท่านใดมีความรู้หรือมีข้อเสนอแนะช่วยชี้แนะมาได้เลยนะคะ ยินดีและพร้อมรับฟังค่ะ
ปล.หากพิมพ์ผิดใช้คำพูดผิดขออภัยด้วยนะคะ
สงสัย ว่าการอัพโหลดรูปภาพ Gmail ด้วย Google Script ทำงานกับ loop For ได้มั้ย??
คือเราต้องการเปลี่ยนรูปโปรไฟล์ของ Gmail แบบให้มันเปลี่ยนเองให้ตรงกับรูปภาพที่เรามีอยู่ใน Google Drive
เราเลยหาข้อมูลแล้วไปเจอ Script นี้มาค่ะ ซึ่งเราลองทำแล้วมันได้ผล
function updateGmailPhotoFromDrive() {
try {
var userEmail = 'amit@labnol.org';
var fileName = userEmail + ".jpg";
var blob = DriveApp.getFilesByName(fileName).next().getBlob();
var data = Utilities.base64EncodeWebSafe(blob.getBytes());
AdminDirectory.Users.Photos.update({photoData: data}, userEmail);
}
catch (err) {
Logger.log(err.toString());
}
}
แต่เนื่องจากว่าเรามีข้อมูล Gmail ที่ต้องทำการเปลี่ยนรูปโปรไฟล์จำนวนเยอะมาก เราเลยทำการสั่งวนลูปค่ะและเราก็มีลองปรับเปลี่ยน Script บ้างแต่พบว่าเหมือน Script ข้างต้นจะไม่สามารถใช้ทำงานร่วมกับการวนลูป For ลูป while ได้เลย คือเราก็งงๆไม่แน่ใจว่าเราเข้าใจการทำงานมันถูกต้องมั้ย
นี่คือที่เราทำค่ะ
function myFunction() {
var ss = SpreadsheetApp.openById("1uvdmqpnRw5EcIme0NO05389X9Xx3-0-9eOR6LoEz4kI");
var text = ss.getSheetByName("Sheet1");
var Range = ss.getDataRange();
var LastRow = Range.getLastRow();
for(i=2;i<LastRow+1;i++){
var colA = "A" + i;
var fileName = "";
var userEmail = text.getRange("A2").getValue();
var fileName = userEmail.toString().replace("@KKK.com", ".jpg");
var blob = DriveApp.getFilesByName(fileName).next().getBlob();
var data = Utilities.base64EncodeWebSafe(blob.getBytes());
AdminDirectory.Users.Photos.update({photoData: data}, userEmail);
var userEmail1 = text.getRange("A3").getValue();
var fileName1 = userEmail1.toString().replace("@KKK.com", ".jpg");
var blob1= DriveApp.getFilesByName(fileName1).next().getBlob();
var data1 = Utilities.base64EncodeWebSafe(blob1.getBytes());
AdminDirectory.Users.Photos.update({photoData: data1}, userEmail1);
i++;}}
พอเรากดRun มันแจ้งเตือน ว่า " Cannot retrieve the next object: iterator has reached the end. (line 26, file "AA") "
บรรทัดที่ถูกแจ้งเตือน >>var blob1= DriveApp.getFilesByName(fileName1).next().getBlob();
หากท่านใดมีความรู้หรือมีข้อเสนอแนะช่วยชี้แนะมาได้เลยนะคะ ยินดีและพร้อมรับฟังค่ะ
ปล.หากพิมพ์ผิดใช้คำพูดผิดขออภัยด้วยนะคะ