10.2. จบบั Banding
getBandings() - เมถอดในคลาส Spreadsheeet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getbandings
ใชจ้ช ขบ Banding หรรอ Alternating colors ทขงั้ หมดท่รีทมีรใน Spreadsheeet คนร คาช่ กลขบมาเปป็น Banding[]-
Banding ในอาเรยร์
getBandings() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getbandings
ใชจ้ช ขบ Banding หรอร Alternating colors ทขงั้ หมดทีร่มท ใีร นชทัขีร้ ครนคา่ช กลขบมาเปปน็ Banding[]-Banding ใน
อาเรยร์
getBandings() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getbandings
ใชจช้ บข Banding หรรอ Alternating colors ท่ีรใท ส่ชให้ชกขบเร้นช จล์ คนร คา่ช กลบข มาเป็นป Banding[]-Banding ในอา
เรยร์
ดตดู ขวอย่าช งในข้ชอถดข ไป
10.3. การลบ Banding หรอช Alternating Colors
remove() - เมถอดในคลาส Banding
https://developers.google.com/apps-script/reference/spreadsheet/banding#remove
ใชถช้ อด Banding หรอร Alternating Colors ออก
ตรวอยาต่ ง - โค้ชดต่ชอไปนรข้ัี ใชลช้ บ Banding หรรอ Alternating colors ทขัง้ หมดใน Spreadsheet ทขัง้ลิ ไป
// วนลปย ลบ Banding ทัสี้งช หมดใน Spreadsheet ท้ีชงดิ ไป
var spreadsheet = SpreadsheetApp.getActive() ;
spreadsheet.getBandings().forEach(function(banding) {
banding.remove() ;
}) ;
ตรวอย่ตาง - โค้ดช ตช่อไปนรีขั้ ล้ชาง Alternating colors ทขั้งหมดใน Spreadsheet ทขง้ลัิ ไปอขนเก่ชาออก จากเร้ชนจ์ลท่รีท
ใชช้เม้าช สเล์ ลรอก แลช้วใสช่อขนใหมช่
// วนลปย ลบ Banding ทัสช้ีงหมดใน Spreadsheet ทดชีงิ้ ไป
var spreadsheet = SpreadsheetApp.getActive() ;
spreadsheet.getBandings().forEach(function (banding) {
banding.remove() ;
}) ;
// ใส่ต Banding ตสวั ใหมใต่ ห้คกบสั เรนค้ จท์ต ่ชืเท ลมอื กโดยเม้คาสต์ - สท Blue
spreadsheet.getActiveRange().applyRowBanding(SpreadsheetApp.BandingTheme.BLUE) ;
โดย วสสันตต์ คคุณดิลด กเศวต ([email protected]) 101
102 เซอร์วร วิส Spreadsheet
บทท่ที 11
Data validation
11.1. สรชา้ ง Data validation ใหกช้ บับ เซลลใร์ นเรช้นจร์
กช่อนศทึกษาบทน้ีรัข ควรใช้ชงาน Data Validation ของ Google Sheets ใหช้คลช่องกช่อน จะทกาให้ชเข้ชาใจโคช้ดง่ชาย
ข้ึทนขั
11.1.ก.) คลาสและเมถอดท่สที กาควัญ
ลิลงค์ลต่ชางๆ ตช่อไปนร้ัขีเปป็นคลาสและเมถอดทรที่สกาคขญ หรรอเปป็นตขวอย่ชางทร่ีทจะใชช้อธลิบายโคช้ดตขวอย่ชาง เพร่ีทอสร้ชาง
Data Validation ใหกช้ ขบเซลล์หล รรอเรช้นจ์ล
Add data validation rule
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#add-data-validation-rule
newDataValidation() - เมถอดในคลาส SpreadsheeetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#newdatavalidation
ใชสช้ ร้าช งตวข สรชา้ ง Data validation rule โดยจะครนคาช่ กลบข มาเป็ปนคลาส DataValidationBuilder โดย
Data validation rule จะถกูด สราช้ งเมีอรท่ จบดว้ช ย Method build() ของคลาส DataValidationBuilder
คลาส DataValidationBuilder – เปป็นคลาสทืทใช่ ชสค้ ราค้ ง Data validation rules
https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder.html
build() - เมถอดในคลาส DataValidationBuilder
https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder.html#build
ใชชส้ รช้าง Data validation rule จากการตขั้งคาช่ ทรป่ีท ้ฟอนใหก้ช ขบตวข สรา้ช ง
requireNumberBetween(start, end) - เมถอดในคลาส TextValidationBuilder
https://developers.google.com/apps-script/reference/forms/text-validation-builder#requirenumberbetweenstart,-end
ใชกช้ าก หนดกฎของ Data validation แบบตวข เลขทรตี่ท ชอ้ งอยร่ดชู ะหวชา่ ง หรรอ ตวข เลขแบบเจาะจง 2 ตวข
Name Type Description
start Number The lowest acceptable value.
end Number The highest acceptable value.
setAllowInvalid(allowInvalidData) - เมถอดในคลาส DataValidationBuilder
https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder#setallowinvalidallowinvaliddata
ใชช้กกาหนดวช่าจะแสดงคกาเตรอนหรรอจะปฏลิเสธไมช่รขบขช้อมดูล เมีท่รอไมช่กรอกค่ชาลงในเซลลล์ นอกเหนรอกฎของ
Data validation (allowInvalidData เปนป็ Boolean)
setDataValidation(rule) – เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#setdatavalidationrule
ใสช่ Data validation rule ใหชก้ บข เซลล์ล โดยพารามลิเตอร์ล rule เปนป็ Data Validation rule
setDataValidations(rules) – เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#setdatavalidationsrules
ใส่ช Data validation rules ใหช้กขบทุชกเซลล์ลในเร้ชนจ์ล โดยพารามลิเตอร์ล rules เป็ปน Data Validation rules
หลายตวข ท่เีทร กบ็ก ในอาเรย์ล 2 มติล ิล (Data Validation rule[][])
104 เซอร์รวิวส Spreadsheet
11.1.ข.) ตัวว อย่ทางทีท่ 1
โคดช้ ตช่อไปนใัรีข้ ส่ช Data Validation แบบ ตวร เลขตอ้ช งอยรตสู่ ะหวตา่ ง ให้ชกขบเซลล์ล A1
var ss = SpreadsheetApp.openById('Spreadsheet Id') ;
var sheet = ss.getSheetByName('Sheet1') ;
var cell = sheet.getRange('A1') ; // จัสบเซลลต์ A1
// สราค้ ง Rule จบด้วค ย .build() เสมอ >> นจา Rule ไป Set ใหเค้ รนค้ จ์ต
var rule = SpreadsheetApp.newDataValidation() // สราค้ ง Validation ตสัวใหม่ต
.requireNumberBetween(1,100) // รสับเลข 1-100 เทา่ต นนสัี้ช
.setAllowInvalid(false) // คยท ์นต อกกฎไม่รต ัสบข้คอมยล
.setHelpText('Number must be between 1 and 100.')
.build() ;
cell.setDataValidation(rule) ;
ผล
11.1.ค.) ตัวว อยา่ท งทีท่ 2
โคด้ช ตช่อไปน้ัีรข ดงึท ขอ้ช มูลด จากเร้ชนจล์ Sheet2!A1:A10 มาเปป็นชช้อยสใ์ล นการทาก Data validation แบบ List from
range (รายการจากเรชน้ จล์) ใหช้กบข ทชกุ เซลล์ลในเร้ชนจล์ Sheet1!B1:B5
var srcRange = SpreadsheetApp.getActive().getSheetByName('Sheet2').getRange('A1:A10') ;
var dstRange = SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange('A1:B5') ;
// สรค้าง Data validation rule แบบรายการจากเรนค้ จต์ ใหกค้ บสั srcRange
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(srcRange).build() ;
// จบสั Data validation ของเร้นค จ์ต dstRange – ไดค้ null มากต่อน เพราะยังส ไมม่ต ท
// จุดท ประสงค์จร รงวิ ๆคอช สรา้ช งอาเรย์ตร ามจาก นวนของเซลลใร์ นเรชน้ จ์ร dstRange
// ถาค้ Logs ดย จะไดค้ : [[null, null], [null, null], [null, null], [null, null], [null, null]]
// เป็ปนอาเรย์ต 2 มิตด ดขิ นาด 5 แถว 2 คอลวมั นร์
var rules = dstRange.getDataValidations() ;
for (var i = 0 ; i < rules.length ; i++) {
for (var j = 0 ; j < rules[i].length ; j++) {
rules[i][j] = rule ; // วนลปย จบสั Data validation rule ใสอ่ต าเรยต์ rules
}
}
dstRange.setDataValidations(rules) ; // ใส่ต Data validation rules ใหค้กบสั ทกคุ เซลล์ตในเรค้นจต์
โดย วสนสั ตต์ คคณุ ดดลิ กเศวต ([email protected]) 105
ขช้อมลดู ใน Sheet2!A1:A10 มดีร งข ตอ่ช ไปนัขรี้
ผลหลขงรนข โคด้ช เรนช้ จ์ล Sheet1!B1:B5 (5 แถว 2 คอลมัส นต์) ทกา Data Validation แบบ List form range
โดยมีรชชอ้ ยสตล์ ามภาพ
11.2. ดสแู ละอับพเดท Data validation
11.2.ก.) getDataValidation()
getDataValidation() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getdatavalidation
ใช้ชจขบ Data validation ของเซลลล์ หากเปป็นเร้ชนจ์ลจะจขบทีทร่มชุมซ้ชายบนของเรช้นจล์ โดยจะครนคช่ากลขบมาเปป็น
คลาส DataValidation หากเรน้ช จล์ไมมช่ รี Data validation จะครนคาช่ null
106 เซอรร์ววสิ Spreadsheet
getCriteriaType() - เปน็ป เมถอดในคลาส DataValidation
https://developers.google.com/apps-script/reference/spreadsheet/data-validation#getcriteriatype
ใชจ้ช บข ชนลิดของ Rule's criteria ของ Data validation rule โดยคนร คา่ช กลบข มาเปปน็ Enum
DataValidationCriteria
Enum DataValidationCriteria
https://developers.google.com/apps-script/reference/spreadsheet/data-validation-criteria.html
Property Type Description
DATE_AFTER Enum Requires a date that is after the given value.
DATE_BEFORE Enum Requires a date that is before the given value.
DATE_BETWEEN Enum Requires a date that is between the given values.
DATE_EQUAL_TO Enum Requires a date that is equal to the given value.
DATE_IS_VALID_DATE Enum Requires a date.
DATE_NOT_BETWEEN Enum Requires a date that is not between the given values.
DATE_ON_OR_AFTER Enum Require a date that is on or after the given value.
DATE_ON_OR_BEFORE Enum Requires a date that is on or before the given value.
NUMBER_BETWEEN Enum Requires a number that is between the given values.
NUMBER_EQUAL_TO Enum Requires a number that is equal to the given value.
NUMBER_GREATER_THAN Enum Require a number that is greater than the given value.
NUMBER_GREATER_THAN_OR_EQUAL_TO Enum Requires a number that is greater than or equal to the given value.
NUMBER_LESS_THAN Enum Requires a number that is less than the given value.
NUMBER_LESS_THAN_OR_EQUAL_TO Enum Requires a number that is less than or equal to the given value.
NUMBER_NOT_BETWEEN Enum Requires a number that is not between the given values.
NUMBER_NOT_EQUAL_TO Enum Requires a number that is not equal to the given value.
TEXT_CONTAINS Enum Requires that the input contains the given value.
TEXT_DOES_NOT_CONTAIN Enum Requires that the input does not contain the given value.
TEXT_EQUAL_TO Enum Requires that the input is equal to the given value.
TEXT_IS_VALID_EMAIL Enum Requires that the input is in the form of an email address.
TEXT_IS_VALID_URL Enum Requires that the input is in the form of a URL.
VALUE_IN_LIST Enum Requires that the input is equal to one of the given values.
VALUE_IN_RANGE Enum Requires that the input is equal to a value in the given range.
CUSTOM_FORMULA Enum Requires that the input makes the given formula evaluate to true.
CHECKBOX Enum Requires that the input is a custom value or a boolean; rendered as a checkbox.
getCriteriaValues() - เปนป็ เมถอดในคลาส DataValidation
https://developers.google.com/apps-script/reference/spreadsheet/data-validation#getcriteriavalues
ใชช้จบข Agruments ของ Rule's criteria (การตขั้งคช่าของ Data validation rule) โดยจะครนคา่ช กลขบมาเปป็น
Object[] หรอร กอช้ นอาเรยข์ร อง Argruments
โดย วสนสั ตต์ คคณุ ดิดลกเศวต ([email protected]) 107
ตวร อย่ตาง
เซลล์ล A1 ทกา Validation ไวชต้ ามภาพ เปป็น Validation ทร่ทีรขบแตขช่ อช้ มดลู ตขวเลขตขั้งแตช่ 0-100
โคด้ช ตอ่ช ไปน้รีขั ใชจช้ ขบ 1. Rule ของ Data validation และ 2. Argruments ของ Rule ออกมา Logs ดูด
var cell = SpreadsheetApp.getActive().getRange('A1') ;
var rule = cell.getDataValidation() ; // จวบั Data Validation
Logger.log(rule) ; // พิวมพร์ : DataValidation (คนืม คา่ต เป็นป คลาส DataValidation)
if (rule != null) // ถคา้ เซลลทต์ จา Data validation ไวค้
{
var criteria = rule.getCriteriaType() ; // พมิว พร์ : NUMBER_BETWEEN
var args = rule.getCriteriaValues() ; // พวมิ พร์ : [0.0, 100.0]
Logger.log('The data validation rule is %s %s', criteria, args) ; // ดผดู ลทท่ี Logs ---- >
} // หากเซลลไ์ต ม่ทต าจ Validation
else
{ // ถ้าค เซลลไต์ มตไ่ ดค้ทจา Data validation ไวค้
Logger.log('The cell does not have a data validation rule.') ;
}
เมทีอร่ รนข โคดช้ จะไดผ้ช ลลขพธล์ใน Logs ดขงนขัีร้
Logs
[ ] The data validation rule is NUMBER_BETWEEN [0.0, 100.0]
// cirteria args
108 เซอรวร์ ิสว Spreadsheet
11.2.ข.) getDataValidations() - มท s
Update data validation rules
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#update-data-validation-rules
getDataValidations() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#getdatavalidations
ใชช้จขบ Data validation ของทุชกเซลล์ลในเร้ชนจ์ล ครนคช่ากลขบมาเป็ปนกช้อนอาเรยล์ของ Data validation ซ่ีทึงเป็ปน
อาเรย์ล 2 มิลตลิ (DataValidation[][]) หากเรน้ช จ์ลไมมช่ รี Data Validation จะครนคา่ช null
ตวร อยาต่ ง
ชีขั้ทร Sheet1 มีเร พรยี ง 15 เซลล์ตล ามภาพ
ชรีขั้ท Sheet1 ทกา Validation ไว้ช 3 เซลลล์(ตามภาพขช้างต้ชน) โดยกาก หนด Rule และ Argruments ไว้ชตาม
ภาพตอช่ ไปนีรัข้ กค็ก รอ รบข เฉพาะวนข ทรรีท่ ะหวาช่ ง 1 ม.ค. 2018 – 31 ธ.ค. 2018
โดย วสสันตต์ คคุณดลดิ กเศวต ([email protected]) 109
โคช้ดต่ชอไปนขรี้ั จะอขพเดทเซลลล์ทร่ทีทาก Validation ททีร่ใช้ช Rule แบบ Date Between ใหม่ช ใหช้เปล่ีรทยนไปรขบวขนท่รีท
ระหวาช่ ง วนข ทรท่ี 1 ม.ค. 2019 – 31 ธ.ค. 2019
function updateDataValidationRules() {
var ssID = 'Spreadsheet Id' ;
var sName = 'Sheet1' ;
var ss = SpreadsheetApp.openById(ssID) ;
var sheet = ss.getSheetByName(sName) ;
// กฎเดวมิ รบัว เฉพาะวนัว ทใที่ นปีป 2018 เททา่ น้ัขวน
// เราจะเปลยท่ี น Argruments ของกฎให้ชรบัว วัวนทีท่ในปีป 2019 เท่าท นข้ัวน
var oldDates = [new Date('1/1/2018'), new Date('12/31/2018')] ;
var newDates = [new Date('1/1/2019'), new Date('12/31/2019')] ;
// จสบั เรค้นจทต์ ัชี้งส หมดในชทชที้ แมค้จะเปปน็ เซลล์วต ตา่ งกต็จ าม เพราะเซลลต์ว่าต งอาจทจา Validation ไวค้
var range = sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()) ;
Logger.log(rules) ; // ดูดผลทท่ี Logs ---- >
// จสับ Validations ทงส้ีชั หมดในเรน้ค จต์
var rules = range.getDataValidations() ;
for (var i = 0 ; i < rules.length ; i++) { // แถว // for #2
for (var j = 0 ; j < rules[i].length ; j++) { // คอลมสั นใต์ นแถว // for #1
var rule = rules[i][j];
if (rule) { // ถาค้ ไมต่ใชต่ null // if - #2
var criteria = rule.getCriteriaType(); // จบัส Tัสype ของ DataValidation
var args = rule.getCriteriaValues(); // จัสบ Argrument ของ DataValidation
// ถาค้ Type เปน็ป DATE_BETWEEN และ
// Argrument ตัสวทืช่ท 1 เป็นป วนสั ทชทื่ 1/1/2018 และ
// Argrument ตสัวท่ทืช 2 เปนป็ วสันททื่ช 12/31/2018
if (criteria == SpreadsheetApp.DataValidationCriteria.DATE_BETWEEN && // if - #1
args[0].getTime() == oldDates[0].getTime() &&
args[1].getTime() == oldDates[1].getTime()) {
// สราค้ งตสวั สรคา้ ง Validation จากกฎเดดมิ (copy) แตเ่ต ปลยช่ืท นวันส ทท่ชื
rules[i][j] = rule.copy().withCriteria(criteria, newDates).build();
} // Close – if #1
} // Close – if #2
} // Close – for #1
} // Close – for #2
range.setDataValidations(rules);
} // Close – function
110 เซอรร์วสิว Spreadsheet
ผลลพข ธ์จล ากโคชด้ บรรทดข var rules = range.getDataValidations();
Logger.log(rules) ;
จขบ Validation ของเซลลใ์ล นเรช้นจล์ทัข้งหมด มาใสช่อาเรยล์ 2 มลติ ลิ (ตวข แปร rules) โดยมีสร มาชิกล ในอาเรยเ์ล ปน็ป
คลาส DataValidation(หากเซลลม์ล รี Validation) และ null(หากเซลลไ์ล มมช่ รี Validation)
Logs
[ 01 ] [[ DataValidation , null , null ], // แถวท่ชทื 1
], // แถวท่ืชท 2
[ DataValidation , null , null ], // แถวททชื่ 3
], // แถวทืช่ท 4
[ null , null , null ]] // แถวท่ืชท 5
[ null , null , DataValidation
[ null , null , null
หลงข รนข โค้ดช เซลล์ทล รีทท่ กา Validation ท่ีรใท ชช้ Rule แบบ Date Between เปลยีรท่ น Argruments ไป (เปลทีร่ยนการ
ตัข้งคช่าของกฎ) จทึงปรากฎคาก เตรอนตามภาพ เพราะคช่าในเซลลล์ตอนนี้ขรั ไมช่ไดช้เปป็นไปตามกฎใหมช่ของ Validation
แลช้ว
11.3. Checkboxes
11.3.ก.) insertCheckboxes()
insertCheckboxes() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#insertcheckboxes
insertCheckboxes(checkedValue) - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#insertcheckboxescheckedvalue
insertCheckboxes(checkedValue, uncheckedValue) - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#insertcheckboxescheckedvalue-uncheckedvalue
ใชก้ช กรอก Checkboxes ลงแตช่ละเซลลลใ์ นเร้ชนจล์
พารามลิเตอร์ล
Name Type Description
checkedValue Object ค่ตาของ Checkbox เม่ือมช ถกย เชคจ็ – ถาค้ เว้คนไวจ้ค ะเป็ปนบยลลทน TRUE
uncheckedValue Object ค่ตาของ Checkbox เมอื่มช ไม่ตถยกเชค็จ – ถ้คาเว้คนไวจค้ ะเปนป็ บยลลนท FALSE
โดย วสนสั ตต์ คณุค ดลิด กเศวต ([email protected]) 111
ตวข อยา่ช ง
function test_insert_cb(){
var range1 = SpreadsheetApp.getActive().getRange('A1:A5') ;
var range2 = SpreadsheetApp.getActive().getRange('B1:B5') ;
var range3 = SpreadsheetApp.getActive().getRange('C1:C5') ;
range1.insertCheckboxes('yes', 'no') ;
range2.insertCheckboxes('yes', 'no').setValues( [['no'],['yes'],['no'],['yes'],['yes']] ) ;
range3.insertCheckboxes().setValues( [[true],[true],[true],[true],[false]] ) ;
}
ผล
11.3.ข.) requireCheckbox()
requireCheckbox() - เมถอดในคลาส DataValidationBuilder
https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder#requirecheckbox
requireCheckbox(checkedValue) - เมถอดในคลาส DataValidationBuilder
https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder#requirecheckboxcheckedvalue
requireCheckbox(checkedValue, uncheckedValue) - เมถอดในคลาส DataValidationBuilder
https://developers.google.com/apps-script/reference/spreadsheet/data-validation-builder#requirecheckboxcheckedvalue-uncheckedvalue
การใส่ช Checkboxes ลงในเซลลลอ์ ีรกวธลิ ีหร นงึีท่ ก็คก รอ การทาก Validation แบบ Checkbox โดยใชเช้ มถอด
requireCheckbox()
ตวข อยาช่ ง
var range = SpreadsheetApp.getActive().getRange('A1:A5') ;
var rule = SpreadsheetApp.newDataValidation()
.setAllowInvalid(false)
.requireCheckbox()
.setHelpText('ใหต้ช กตว๊ิ เทาท่ นั้วขน')
.build() ;
range.setDataValidation(rule).setValue(true) ;
112 เซอรร์ววิส Spreadsheet
ผล
โดย วสันส ตต์ คุณค ดดิลกเศวต ([email protected]) 113
114 เซอร์วร วิส Spreadsheet
บททีท่ 12
การเรยท ง
(Sorting)
12.1. การเรยีร งขช้อมลูส โดยใช้เช มถอด sort()
มวรี ธิล ีกร ารเรียร งขชอ้ มลูด หลากหลายวิธล ีร เชนช่ ใชชเ้ มถอด sort() ของอาเรยล์ แตใ่ช นบทนี้ัขร เปนป็ การเรยีร งโดยใชช้
เซอรว์ล ิสล ของ Google กค็ก รอ เมถอด sort() ในคลาส Range เและ เมถอด sort() ในคลาส Sheet
12.1.ก.) การเรทยงขอช้ มูดลในเร้นช จร์ (เมถอดในคลาส Range)
Sort a range of values by multiple columns
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#sort-a-range-of-values-by-multiple-columns
sort(sortSpecObj) – เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#sortsortspecobj
ใชเ้ช รียร งเซลลล์ในเรชน้ จ์ล โดยคนร คาช่ กลบข มาเป็ปนเรน้ช จทล์ เี่รท รีรยงข้ชอมูดลแลช้ว พารามลเิ ตอรล์ sortSpecObj กคก็ อร
คอลมร น์พท่ทีจะใชชเ้ ปน็ป คทยพ์ในการเรยท ง มีวร ลิธกรี ารระบุพช ารามิเล ตอรห์ล ลายแบบ ใหช้ดจูด ากตขวอยาช่ งจะเขา้ช ใจงชา่ ยทรีทส่ ดุช
ตวร อย่าต งทที่ 1
var ssID = 'Spreadsheet Id' ;
var sName = 'Sheet1' ;
var ss = SpreadsheetApp.openById(ssID) ;
var sheet = ss.getSheetByName(sName) ;
// จบสั ไปทเทช่ื รน้ค จตท์ ืชจท่ ะเรยท งขอ้ค มยล ***
var range = sheet.getRange('A2:D8') ;
// เรทยงตามคอลัสมน์ทต มืช่ 1 (A)
range.sort(1) ;
// เรทยงตามคอลมัส นตท์ ชืม่ 2 (B)
range.sort(2) ;
// เรยท งตามคอลมัส นต์ทมืช่ 2 (B) แบบ Desending
range.sort( {column: 2, ascending: false} ) ;
// เรยท งตามคอลมสั น์ตทืชม่ 2 (B) แบบ Desending
// จากนสัชีน้ เรยท งตตอ่ ตามคอลัมส น์ตทม่ืช 1 (A) แบบ Ascending
// สสังเกตคุ - ใสทพ่ ารามเวิ ตอร์รเปป็นอาเรยร์ ที่ทมทสมาชกวิ เป็นป ววัตถทุ
range.sort([ { column: 2, ascending: false },
{ column: 1, ascending: true } ] ) ;
// เรทยงตามคอลสัมนท์ต ชื่ม 2 (B) แบบ Descending
// จากนสชี้ันเรทยงตอต่ ตามคอลมสั น์ทต ชื่ม 1 (A) แบบ Ascending
// ( ใส่ต 1 ตวัส เดทยวคอืม คอลัมส นตท์ ชทื่ 1 - ไมใต่ สต่ Sort order คา่ต Default คือม เรทยงแบบ Ascending
range.sort([ { column: 2, ascending: false}, 1 ]) ;
// เรยท งตามคอลสมั นทต์ ืมช่ 2 (B) แบบ Ascending
// จากนน้สัชี เรยท งต่ตอตามคอลัสมนท์ต มืช่ 1 (A) แบบ Ascending
range.sort([2, 1]) ;
// ... โค้คดขค้างบน ใหผค้ ลลัพส ธ์ตเชนต่ เดยท วกับส โคค้ดตอต่ ไปนชี้ท
range.sort([ { column: 2, ascending: true },
{ column: 1, ascending: true } ]) ;
116 เซอรร์วสิว Spreadsheet
ตรวอยา่ต งทท่ี 2
เร้ชนจ์ลกช่อนเรรียงขชอ้ มดูล มรีขช้อมลดู ดขงตอ่ช ไปนข้รีั
โคช้ดตช่อไปนีขั้รเรรยี งขช้อมลดู ในเรนช้ จล์ A2:E8 โดยใชช้คอลวมั นร์ B (Fruit) เปนป็ คทยรท์ ที่ 1 จากนั้นข เรีรยงตอช่ โดยใชช้
คอลมัว น์ร D (Quantity) เป็นป คทย์รทีท่ 2
var ssID = 'Spreadsheet Id' ;
var sName = 'Sheet1' ;
var ss = SpreadsheetApp.openById(ssID) ;
var sheet = ss.getSheetByName(sName) ;
var range = sheet.getRange('A2:E8') ; // เร้คนจต์ทช่จืท ะเรทยง
range.sort([ {column: 2, ascending: true },
{column: 4, ascending: false } ]) ;
ผล - หลงข รขนโคดช้ ไดช้ผลลขพธลด์ ขงตอช่ ไปนั้รขี
โดย วสนสั ต์ต คคุณดิลด กเศวต ([email protected]) 117
12.1.ข.) การเรทยงข้อช มลูด ในชทัทข้ (เมถอดในคลาส Sheet)
Sort a spreadsheet by a specified column
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#sort-a-spreadsheet-by-a-specified-column
sort(columnPosition, ascending) – เปนป็ เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#sortcolumnposition,-ascending
sort() ใชเช้ รรียงขช้อมูดลทขัง้ หมดในชรทีั้ข โดยใช้คช อลนข ม์ทล ีร่ทระบชุเปปน็ คยรี ใ์ล นการเรรียง
พารามลิเตอรล์
Name Type Description
columnPosition Integer The column to sort by.
ascending Boolean true for ascending sorts, false for descending.
ตวข อยา่ช ง
var ssID = 'Spreadsheet Id' ;
var sName = 'Sheet1' ;
var ss = SpreadsheetApp.openById(ssID) ;
var sheet = ss.getSheetByName(sName) ;
sheet.sort(1, true) ;
118 เซอร์รวิวส Spreadsheet
บทท่ที 13
ฟิฟลเตอรร์
(ตับวกรอง)
13.1. คลาสท่ีทรเกียร่ท วขอช้ งกบบั ฟลปิ เตอรร์
คลาส Filter ( คลาสตวสั กรอง )
https://developers.google.com/apps-script/reference/spreadsheet/filter
เขาช้ ถึทงและแกไช้ ขฟฟิลเตอรทล์ ีท่รมอีร ย่ชูแด ลช้ว หากตช้องการสราช้ งฟิลฟ เดอตใล์ หมช่ ให้ชใชช้ Range.createFilter()
คลาส FilterCriteria ( หรอมื กฎการกรอง )
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria
ใชเ้ช ข้าช ถึงท กฎของฟลิฟ เตอร์ล(กฎการกรอง) การสรช้างกฎใหมชใ่ ชช้ SpreadsheetApp.newFilterCriteria() และ
คลาส FilterCriteriaBuilder
คลาส FilterCriteriaBuilder (ตสวั สร้าค งกฎการกรอง)
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder
ตวข สรช้างสาก หรขบ FilterCriteria
13.2. การจบับ ฟลิป เตอร์ร
13.2.ก.) เมถอดททเี่ ก่ทยี วขอ้ช ง
getFilter() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getfilter
ใชจช้ ขบฟลิฟ เตอรลท์ ี่ทมร อรี ยใชดู่ นชท้ัีขร หากมรีฟิลฟ เตอรจ์ล ะครนคช่าเปนป็ คลาส Filter (คลาสตวข กรอง) หรรอ null หากไม่มช ีร
getColumnFilterCriteria(columnPosition) - เมถอดในคลาส Filter
https://developers.google.com/apps-script/reference/spreadsheet/filter#getcolumnfiltercriteriacolumnposition
ใชจช้ ขบกฎการกรองแบบเจาะจงคอลขมนล์ โดยครนคชา่ กลขบมาเปปน็ คลาส FilterCriteria(กฎการกรอง) หาก
ไม่ชมีรกฎการกรองจะครนคา่ช เป็นป null พารามลิเตอร์ล columnPosition กคก็ รอ ตกาแหนช่งของคอลขมนล์
*** ตวข นม้ัรีข ทรี งั้ข getColumnFilterCriteria, setColumnFilterCriteria และ removeColumnFilterCriteria
getHiddenValues() - เมถอดในคลาส FilterCriteriaBuilder
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#gethiddenvalues
เมทร่อี มีกร ารกกาหนดกฎการกรอง getHiddenValues() ใช้จช บข คาช่ ททรีซ่ ่ชอนจากการกรอง โดยครนคช่ากลขบมาเปป็น
String[]- อาเรยตข์ องข้อค ความ
getVisibleValues() - เมถอดในคลาส FilterCriteriaBuilder - ยสงั ใช้คงานไม่ตไดค้
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#getvisiblevalues
เมรท่ีอมกีร ารกกาหนดกฎการกรอง getVisibleValues() ใชจ้ช ขบค่าช ท่แีทร สดงในผลลพข ธก์ล ารกรอง โดยครนค่าช กลบข
มาเป็ปน String[]- อาเรยตข์ องข้คอความ
getRange() - เมถอดในคลาส Filter
https://developers.google.com/apps-script/reference/spreadsheet/filter#getrange
ใชจ้ช ขบเรน้ช จทล์ ทรี่ถูดกใสฟ่ช ิลฟ เตอร์ล โดยคนร คาช่ กลบข มาเปป็นคลาส Range
120 เซอร์วร วิส Spreadsheet
13.2.ข.) ตววั อย่ทางทีท่ 1 : จบวั ฟปิลเตอรร์ท่ทกี รองแบบ Filter by values ไวอช้ ยาท่ งเดยท ว
ตารางข้ชอมูดลต่ชอไปนร้ขีั ใส่ชฟฟิลเตอรล์ไวช้โดยใช้ชวิลธีรปกติล ก็กครอ เลรอกจากเมนดู Data → Create a filter จากน้ัขน
กรองคอลขมนล์ "หมวด" โดยตลิต๊กกรองดูดเฉพาะคา่ช ในหมวดทีร่เท ปปน็ OTC เท่ชานนข้ั
ผลการกรอง
ตวข อยช่าง – โคด้ช ตอ่ช ไปนรีข้ั จขบคุชณสมบขตขิล องตวข กรองออกมา Logs ดดู
var sheet = SpreadsheetApp.getActiveSheet() ; // จบสั ฟิลป เตอรตใ์ นช้ีชททททชื่ระบคุ
var filter = sheet.getFilter() // พมดิ พต์ : filter (วัสตถุค)
Logger.log(filter) ;
var filterCriteria = filter.getColumnFilterCriteria(2) ; // จบสั กฎในคอลมัส นทต์ ่ืชท 2
Logger.log(filterCriteria) ; // พมิด พต์ : filterCriteria (วตัส ถุค)
var hiddenValues = filterCriteria.getHiddenValues() ;
Logger.log(hiddenValues) ; // พมดิ พ์ต : [DCC, DGG] - ถกย ซ่อต นอยตย่
โดย วสนัส ตต์ คณคุ ดลิด กเศวต ([email protected]) 121
13.2.ค.) ตววั อยาท่ งทที่ 2 : จัวบฟปลิ เตอรท์ร ทีก่ รองแบบ Filter by values และ Filter by condition
ตารางขช้อมูดลตช่อไปนรีขั้ ใส่ชฟิฟลเตอร์ลไวช้โดยใชช้วลิธีรปกตลิ กก็ครอ เลรอกจากเมนดู Data → Create a filter จากนัข้น
กรองคอลขมนล์ "สนิว คาช้ หรอช บรวิการ" (คอลมสั นต์ททช่ื 3) โดยกาก หนดกฎการกรองไว้ชทขัง้ แบบ
Filter by condition กค็ก อร Text contaion - "สท่วนลด" และ
Filter by values ก็กครอ ติ๊กตล ที่รท "สวท่ นลด 10 บาท", "ส่ทวนลด 100 บาท", "สท่วนลด 150 บาท"
ผลการกรอง
122 เซอรรว์ สิว Spreadsheet
ตวข อยาช่ ง – โคดช้ ตชอ่ ไปนัรีข้ จบข คุณช สมบตข ลิของตขวกรองออกมา Logs ดดู
var sheet = SpreadsheetApp.getActiveSheet() ;
var filter = sheet.getFilter() ; // จบัส ฟลิป เตอรใ์ต นชีชทท้ ทช่ืทระบุค
var filterCriteria = filter.getColumnFilterCriteria(3) ; // จบัส กฎการกรองในคอลัสมนต์ทชท่ื 3
Logger.log(filterCriteria) ; // ดผย ลททช่ื Logs ----- > [01]
Logger.log(criteria.getCriteriaType()) ; // ดผย ลท่ืชท Logs ----- > [02]
Logger.log(criteria.getCriteriaValues()) ; // ดผย ลทืชท่ Logs ----- > [03]
Logger.log(criteria.getHiddenValues()) ; // ดผย ลททืช่ Logs ----- > [04]
Logger.log(criteria.getVisibleValues()) ; // ดผย ลททชื่ Logs ----- > [05]
ผล
[ 01 ] FilterCriteria
[ 02 ] TEXT_CONTAINS
[ 03 ] [สว่ต นลด]
[ 04 ] [สตว่ นลด 20 บาท, สต่วนลด 200 บาท, สว่ต นลด 250 บาท, ส่วต นลด 30 บาท, ส่ตวนลด 300 บาท,
ส่ตวนลด 350 บาท, สต่วนลด 40 บาท, สต่วนลด 400 บาท, สต่วนลด 450 บาท, ส่วต นลด 50 บาท, สต่วนลด
500 บาท, สวต่ นลด 60 บาท, สต่วนลด 70 บาท, สต่วนลด 80 บาท, สวต่ นลด 90 บาท]
[ 05 ] []
13.3. การสร้าช งฟลิป เตอรร์
13.3.ก.) เมถอดท่ีทเกีทย่ วขอ้ช ง
createFilter() - เมถอดในคลาส Range
https://developers.google.com/apps-script/reference/spreadsheet/range#createfilter
ใชสช้ รา้ช งฟลฟิ เตอรลใ์ หช้กขบเร้ชนจท์ล ีทร่จบข มา ซ่งทึี ใน 1 ชรท้ัีข มฟีร ฟลิ เตอรล์ไดช้เพียร ง 1 เทช่านัขน้ createFilter() ครนคาช่ กลบข มา
เปป็นคลาส Filter
newFilterCriteria() - เมถอดในคลาส SpreadsheetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#newfiltercriteria
ใชสช้ ราช้ งตวข สราช้ งสกาหรขบ คลาส FilterCriteria(กฎการกรอง) โดยครนคชา่ กลขบมาเป็นป คลาส
FilterCriteriaBuilder
setColumnFilterCriteria(columnPosition, filterCriteria) - เมถอดในคลาส Filter
https://developers.google.com/apps-script/reference/spreadsheet/filter#setcolumnfiltercriteriacolumnposition,-filtercriteria
ใช้กช าก หนดกฎของฟลฟิ เตอรล์(กฎการกรอง) ให้กช บข คอลมข นลแ์ บบเจาะจง
พารามเลิ ตอร์ล
Name Type Description
columnPosition
Integer The 1-indexed position of the column.
filterCriteria
The filter criteria to set. If null, remove filter criteria from
FilterCriteria the specified column; alternatively, use
removeColumnFilterCriteria(columnPosition)
โดย วสสันต์ต คุคณดลดิ กเศวต ([email protected]) 123
setHiddenValues(values) - เมถอดในคลาส FilterCriteriaBuilder
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#sethiddenvaluesvalues
ใชก้ช าก หนดคา่ช ททรจ่ี ะซ่ชอน(แสดงคาช่ อรี่นท ๆไวช้) โดยพารามิเล ตอร์ล values เปน็ป String[] - อาเรยล์ของค่ชาทจ่ทีร ะซช่อน
โดยจะคนร คาช่ กลบข มาเป็นป คลาส FilterCriteriaBuilder
setVisibleValues(values) – ยงัว ใชง้ช านไมไท่ ด้ช แตใท่ นเอกสารเผยแพร่ขท อง Google มแท ลชว้
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#setvisiblevaluesvalues
ใชก้ช กาหนดคา่ช ทจ่ีทร ะแสดง(ซชอ่ นคา่ช อน่ีทร ๆไป) โดยพารามิลเตอรล์ values เป็นป String[] - อาเรยข์ล องค่ชาทีรท่จะ
แสดง โดยจะคนร คช่ากลบข มาเปป็นคลาส FilterCriteriaBuilder
build() - เมถอดในคลาส FilterCriteriaBuilder
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder?hl=lt#build
สรชา้ งกฎการกรองจากการตั้งข คา่ช ต่ชางๆทีท่รกาก หนดไว้ช โดยจะครนคช่ากลบข มาเปปน็ คลาส FilterCriteriaBuilder –
หลขงจากรอช้ นเรีรยงตข้ังการกฎการกรองตช่างๆแล้วช ตอ้ช งจบดวช้ ย .build() เสมอ
13.3.ข.) ตววั อย่ทางท่ที 1 ใสฟ่ท ลปิ เตอร์ใร หกช้ วับเร้ชนจ์ร
ตวข อยาช่ งต่อช ไปน้ีรขั สราช้ งฟฟิลเตอรใล์ หก้ช ขบเรน้ช จ์ล แต่ยช งข ไมชไ่ ดก้ช กาหนดกฎการกรอง ใหชผ้ ลเหมอร นกขบการเลอร กเร้ชนจล์
แล้ชวไปทีร่ทเมนดู Data → Create a filter
function FilterSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
sheet.getRange('A1').getDataRegion().createFilter() ;
}
ผลลพข ธล์ - สขงเกตทชุ ี่ทรหวข ตารางมสีร ญข ลกข ษณ์ตล วข กรองอย่ชดู
124 เซอรวร์ สวิ Spreadsheet
13.3.ค.) ตัวว อย่าท งทที่ 2 ใสฟท่ ลปิ เตอร์ใร หก้ช วับเรน้ช จ์รและกรองแบบ Filter by values
ตวข อยา่ช งนขั้ีร พฒข นาต่อช จากตวข อยา่ช งในขอ้ช กชอ่ นหนชา้ โดยเพีมลท่ิ กฎการกรองแบบ Filter by values ลงไป
// (1.) สรค้างฟิปลเตอรใต์ หก้ค บัส เร้นค จ์ต - ขอค้ มยลทตท่ืช ดิด กบสั A1 ทส้ีชังหมด
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
sheet.getRange('A1').getDataRegion().createFilter() ;
// (2.) สรา้ค งกฎการกรอง
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(['DGG','DCC'])
.build() ;
// (3.) จบัส ฟปลิ เตอร์ใต นชทชีท้ จากนสัชี้นกจาหนดกฎการกรองใหม่ตลงไป
sheet.getFilter().setColumnFilterCriteria(2, criteria) ;
ผล – สขงเกตุคช อลมข นล์ทที่ร 2 กรองโดยซอช่ น DGG, DCC ไว้ช และสงข เกตทุช รแ่ีท ถว 4-27 ถกดู ซอ่ช นไว้ช
13.4. การแกไช้ ขกฎการกรอง
การแก้ชไขกฎการกรอง หรรอ การเปลรี่ทยนเงีรท่อนไขการกรอง ใหจช้ ขบฟฟลิ เตอรท์ล ีรทม่ อีร ยชูดแ่ ล้ชวไวก้ช ช่อน จากนข้นั ใชช้
setColumnFilterCriteria() เพอท่ีร ใสก่ช ฎการกรองตขวใหมใ่ช หก้ช ขบเร้นช จ์ล
13.4.ก.) ตัวว อยท่างทที่ 1
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
// เร้นค จทต์ ทืช่จบัส มทฟปิลเตอรต์อยตแ่ย ลวค้
var range = sheet.getRange('A1').getDataRegion() ;
// สรา้ค งกฎการกรอง
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(['DGG','DCC'])
.build() ;
// จบัส ไปท่ฟชทื ิลป เตอรข์ต องเร้คนจตก์ ่อต น จากนช้ีสนั จงึถ กจาหนดกฎการกรองลงไป
range.getFilter().setColumnFilterCriteria(2, criteria) ;
โดย วสนสั ตต์ คณุค ดลิด กเศวต ([email protected]) 125
13.4.ข.) ตัววอย่ทางทท่ี 2 ฟลปิ เตอร์โร ดยใชช้คา่ท ในเซลล์ร(Dropdown)
function FilterSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// เร้คนจ์ตท่ืมชท ขท อ้ค มยล
var range = sheet.getRange('A1').getDataRegion() ;
// Filter value - จบัส คา่ต ทใทชื่ ชเค้ ปป็นเงือมช่ นไขการกรอง
var valueCondition = sheet.getRange('F1').getValue() ; // จัสบ 1 คตา่ - eg. OTC
// คตา่ ทใืท่ช ชค้เปนป็ เงื่ชอม นไขการกรองท้งีชัส หมด
var valuesAllCondition = [ 'DCC' , 'DGG' , 'OTC'] ;
var valuesFilterOut = [] ;
valuesAllCondition.forEach(function(item){
if(item != valueCondition){
valuesFilterOut.push(item) ;
}
}) ; // Close - forEach
Logger.log(valuesFilterOut) ; // [ DCC , DGG ] - เปน็ป อาเรยตเ์ กบจ็ ค่ตาทชจืท่ ะใชซค้ อ่ต นเมอ่ืชม กรอง
var filter = sheet.getFilter() ;
var criteria = SpreadsheetApp.newFilterCriteria()
.setHiddenValues(valuesFilterOut)
.build() ;
if(filter != null){ // ถค้ามท Filter แลวค้
range.getFilter().setColumnFilterCriteria(2, criteria) ;
}else if(filter == null){ // ถค้าไมม่ต ท Filter
range.createFilter().setColumnFilterCriteria(2, criteria) ;
} // Cliose - if
}
ผล – การทดสอบ ทีเท่ร ซลลล์ F1 เลอร กหรรอกรอกคา่ช ท่จทีร ะใช้ชเปน็ป เงอรีท่ นไขการกรอง จากนัขน้ จทงึ รขนสครลปิ ตล์
หมายเหตคุ : ใชกช้ ารกรองแบบ Filter by condition เชชน่ whenTextContains ง่ชายกวช่า
126 เซอร์วร วิส Spreadsheet
13.5. การถอดกฎการกรองหรอช ถอดฟปิลเตอรร์
13.5.ก.) remove() - ถอดกฎการกรอง
remove() - เมถอดในคลาส Filter
https://developers.google.com/apps-script/reference/spreadsheet/filter#remove
ใชช้ถอด Filter ออกจากเรชน้ จห์ล รรอชัีข้ทร (1 ชี้ขัรท มไีร ด้ช 1 ฟลฟิ เตอรล์)
ตวข อยา่ช ง
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
sheet.getFilter().remove() ;
13.5.ข.) removeColumnFilterCriteria() - ถอดคอลัวมนร์ททีม่ กท ารกรอง
removeColumnFilterCriteria(columnPosition)
https://developers.google.com/apps-script/reference/spreadsheet/filter#removecolumnfiltercriteriacolumnposition
ใชถ้ช อดกฎการกรองออกจากคอลขมน์ทล ีรท่ระบชุ แต่ชไม่ชไดชถ้ อดฟลิฟ เตอรอ์ล อกจากเรช้นจ์ล
ตวข อยาช่ ง - https://caymezon.com/gas-filter/
function Sample() {
var sheet = SpreadsheetApp.getActiveSheet();
var filter = sheet.getFilter();
var criteria = filter.getColumnFilterCriteria(1);
if(criteria != null){
filter.removeColumnFilterCriteria(1)
}
}
13.6. การเรรียงข้อช มลสู ผลการกรอง
sort(columnPosition, ascending) - เมถอดในคลาส Filter
https://developers.google.com/apps-script/reference/spreadsheet/filter#sortcolumnposition,-ascending
ใช้ชเรีรยงเรช้นจล์ทร่ีทกรองแลช้วตามคอลขมน์ลทีร่ทกาก หนด การเรรียงนขั้รีไม่ชรวมแถวแรก(หขวตาราง) ของเรช้นจ์ลท่ีรทใสช่ฟิฟล
เตอร์ล โดย sort() ครนคาช่ กลบข มาเปน็ป คลาส Filter
พารามเิล ตอร์ล
Name Type Description
columnPosition
Integer The 1-indexed position of the column.
ascending
Boolean If true, sort the filtered range in ascending order; if false,
sort the filtered range in descending order.
โดย วสนัส ต์ต คณุค ดดลิ กเศวต ([email protected]) 127
13.7. withCriteria()
13.7.ก.) เมถอดทีเ่ท กยีท่ วขช้อง
getCriteriaType() – เมถอดในคลาส FilterCriteriaBuilder
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#getcriteriatype
ครนคา่ช เปปน็ ชนดลิ ของกฎการกรอง ตามทรรท่ี ะบชใุ น Enum BooleanCriteria การจบข คาช่ ของกฎสามารถทาก ได้ช
โดยใช้ช Method getCriteriaValues() การใชค้ช า่ช เหล่าช นีเ้ขรั พทร่อี สราช้ งหรอร แกช้ไขกฎของฟลฟิ เตอร์ล ใหดช้ เูด พีมท่ิล เตมลิ
Method withCriteria(criteria, args)
Enum BooleanCriteria – กฎการกรองโดยใช้เค งืม่อช นไข Filter by condition
https://developers.google.com/apps-script/reference/spreadsheet/boolean-criteria
Property Type Description
CELL_EMPTY Enum The criteria is met when a cell is empty.
CELL_NOT_EMPTY Enum The criteria is met when a cell is not empty.
DATE_AFTER Enum The criteria is met when a date is after the given value.
DATE_BEFORE Enum The criteria is met when a date is before the given value.
DATE_EQUAL_TO Enum The criteria is met when a date is equal to the given value.
DATE_AFTER_RELATIVE Enum The criteria is met when a date is after the relative date value.
DATE_BEFORE_RELATIVE Enum The criteria is met when a date is before the relative date value.
DATE_EQUAL_TO_RELATIVE Enum The criteria is met when a date is equal to the relative date value.
NUMBER_BETWEEN Enum The criteria is met when a number that is between the given values.
NUMBER_EQUAL_TO Enum The criteria is met when a number that is equal to the given value.
NUMBER_GREATER_THAN Enum The criteria is met when a number that is greater than the given value.
NUMBER_GREATER_THAN_OR_EQUAL_TO Enum The criteria is met when a number that is greater than or equal to the given value.
NUMBER_LESS_THAN Enum The criteria is met when a number that is less than the given value.
NUMBER_LESS_THAN_OR_EQUAL_TO Enum The criteria is met when a number that is less than or equal to the given value.
NUMBER_NOT_BETWEEN Enum The criteria is met when a number that is not between the given values.
NUMBER_NOT_EQUAL_TO Enum The criteria is met when a number that is not equal to the given value.
TEXT_CONTAINS Enum The criteria is met when the input contains the given value.
TEXT_DOES_NOT_CONTAIN Enum The criteria is met when the input does not contain the given value.
TEXT_EQUAL_TO Enum The criteria is met when the input is equal to the given value.
TEXT_STARTS_WITH Enum The criteria is met when the input begins with the given value.
TEXT_ENDS_WITH Enum The criteria is met when the input ends with the given value.
CUSTOM_FORMULA Enum The criteria is met when the input makes the given formula evaluate to true.
getCriteriaValues() – เมถอดในคลาส FilterCriteriaBuilder
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#getcriteriavalues
ครนคา่ช เปนป็ อาเรยลข์ องอาร์ลกิวล เม้นช ตลส์ กาหรบข Boolean criteria หรรอ Object[]
withCriteria(criteria, args) – เมถอดในคลาส FilterCriteriaBuilder
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder#withcriteriacriteria,-args
ใชชก้ กาหนดกฎของการกรอง ที่ทรนาก มาจากกฎการกรองทีทร่มรีอยูดช่แล้ชว โดย criteria และ aruments ไดชม้ าจาก
getCriteriaType() และ getCriteriaValues() ตามลกาดบข
ใชต้ช รงๆแบบน้ขัรี withCriteria(SpreadsheetApp.BooleanCriteria.TEXT_CONTAINS,'10') ใช้ชไม่ชไดช้
128 เซอร์รววิส Spreadsheet
พารามลเิ ตอรล์
Name Type Description
criteria BooleanCriteria
The type of boolean criteria.
args Object[]
An array of arguments appropriate to the criteria type; the number of
arguments and their type match the corresponding when. method above.
ตวข อยช่าง – ดดดู กฎการกรองจากคอลมข นล์มาใชช้ แลว้ช ปรขบแตชง่ เล็กกนอช้ ย
// สร้คางกฎการกรองจากกฎทชื่ทมอท ยต่ยแลวค้ + เปป็นกาาจ การกรองแบบมเท งชอมื่ นไขด้วค ย
// Builds a filter criteria that is based on an existing criteria
var sheet = SpreadsheetApp.getActiveSheet() ;
var criteria = sheet.getFilter().getColumnFilterCriteria(1) ;
var newCriteria = SpreadsheetApp.newFilterCriteria()
.withCriteria(criteria.getCriteriaType(), criteria.getCriteriaValues())
.setHiddenValues(['c'])
.build() ;
13.8. กฎการกรองแบบ Filter by condition
คลาส FilterCriteriaBuilder
https://developers.google.com/apps-script/reference/spreadsheet/filter-criteria-builder?hl=ja
Mehotd ตระกลดู when ใชกช้ าก หนดกฎการกรองแบบ Filter by condition เชน่ช whenCellEmpty(),
whenDateAfter(date), whenFormulaSatisfied(), whenNumberBetween(), whenNumberEqualTo(),
whenNumberGreaterThan(), whenTextContains() เป็นป ต้นช
13.8.ก.) ตวัว อยท่างทีท่ 1 – whenTextContains()
https://caymezon.com/gas-filter/
function whenTextContainsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
var range = sheet.getRange('A1').getDataRegion() ;
var filter = range.getFilter() ;
var criteria = SpreadsheetApp.newFilterCriteria()
.whenTextContains("Test") // มคท าจ วาต่ Test
.build() ;
if(filter != null){
range.getFilter().setColumnFilterCriteria(3, criteria) ;
}else{
range.createFilter().setColumnFilterCriteria(3, criteria) ;
}
}
โดย วสนัส ตต์ คคุณดดิลกเศวต ([email protected]) 129
ผล
13.8.ข.) ตววั อย่ทางที่ท 2 – whenDateEqualTo()
https://caymezon.com/gas-filter/
function whenTextContainsSample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet() ;
var range = sheet.getRange('A1').getDataRegion() ;
var filter = range.getFilter() ;
var criteria = SpreadsheetApp.newFilterCriteria()
.whenDateEqualTo(SpreadsheetApp.RelativeDate.TODAY)
.build() ; // เปน็ป วสันนีชท้
if(filter != null){
range.getFilter().setColumnFilterCriteria(1, criteria) ;
}else{
range.createFilter().setColumnFilterCriteria(1, criteria) ;
}
}
ผล - กรองเฉพาะคาช่ ทรทเ่ี ท่ชากบข วขนน้รีัข
130 เซอรวร์ สวิ Spreadsheet
บทท่ีท 14
การสรชา้ ง Chart
14.1. สรชา้ ง Bar Chart
ดตดู วข อย่ชางการสรช้างชารต์ล กนข กอ่ช น แลว้ช คอช่ ยไปดูดอธิลบายเมถอดและคุชณสมบขติลของวขตถทชุ ี่ทใร ช้ช
14.1.ก.) ตัววอยท่างการสร้ชาง Bar Chart - คอลัมว นร์ Cost
ทม่ที า : คอร์สร Apps Script Blastoff (เรทยนฟรท)
https://courses.benlcollins.com/courses/enrolled/435404
https://courses.benlcollins.com/courses/435404/lectures/6708194
โคด้ช ตช่อไปนรข้ีั สรชา้ ง Bar chart จากข้อช มดลู ในชีขท้รั โดยใชช้ข้ชอมลูด เฉพาะในคอลขมนล์ A(Fruit) และ B (Cost)
function addChart_1() {
var ss = SpreadsheetApp.getActive() ;
var sheet1 = ss.getSheetByName('Sheet1') ;
// จบัส ขอค้ มลย ในเรนค้ จ์ต Sheet1!A1:B9 – 2 คอลมสั นต์แรก // เรค้นจต์ทชจ่ทื ะใชค้สรคา้ งชารตต์
var dataRange = sheet1.getRange("A1:B9") ;
var myNewChart = sheet1.newChart() ; // สราค้ งวสตั ถุชค ารต์ต วา่ต งๆ
myNewChart.addRange(dataRange) // เรน้ค จต์ทชทจื่ ะใชค้สราค้ งชารตต์
.setChartType(Charts.ChartType.BAR) // ชนดดิ ของชารต์ต ทจ่ืทช ะสรค้าง
.setPosition(1,5,0,0) // ตาจ แหนต่งวางชารต์ต แถวทืชท่ 1 คอลัมส นทต์ ื่ชท 5
.setNumHeaders(1) // มหท วัส ตาราง 1 แถว
.setOption("title","Fruit Chart") ; // กาจ หนด Title เป็นป Fruit Chart
sheet1.insertChart(myNewChart.build()) ; // แทรกชารตต์ ลงในชท้ีชท
}
ผล
132 เซอรวร์ สิว Spreadsheet
14.1.ข.) ตัววอยท่างการสราช้ ง Bar Chart- คอลมัว น์ร Total
โค้ชดตชอ่ ไปน้รขัี สร้ชาง Bar chart จากข้อช มูดลในชทรัข้ี พิเล ศษกวช่าข้ชอก่ชอนหน้ชา ตรงทรีท่มรีเรช้นจล์ 2 เรช้นจ์ลป้อฟ นให้ชกขบตขว
สร้าช งชารต์ล ซีทงึ่ ต้อช งใชเช้ มถอด setMergeStrategy ในการรวมเร้ชนจดล์ วช้ ย
function addChart(){
var ss = SpreadsheetApp.getActive() ;
var sheet1 = ss.getSheetByName('Sheet1') ;
var lastRow = sheet1.getLastRow() ;
var lastColumn = sheet1.getLastColumn() ;
var totalChartLabels = sheet1.getRange(1, 1, lastRow-1, 1) ;
// คอลมสั นท์ต ่ทชื 1 (A) – คอลมสั นต์ Fruit
var totalChartValues = sheet1.getRange(1, lastColumn, lastRow-1, 1) ;
// คอลมสั น์สต คดุ ทา้ค ย (D) - คอลสัมน์ต Total
var totalChart = sheet1.newChart()
.setChartType(Charts.ChartType.BAR)
.addRange(totalChartLabels) // เรน้ค จ์ตทท่ืช 1 - Label
.addRange(totalChartValues) // เรค้นจท์ต ่ทชื 2 - Values
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setPosition(1,6,0,0)
.setNumHeaders(1)
.build() ;
sheet1.insertChart(totalChart) ;
}
ผล
หมายเหตุค : ดกูด ารสรา้ช ง Chart แบบ Line ได้ทช รีลท่ งิล คตล์ อช่ ไปนั้ีรข
Add a line chart - สร้ชาง Chart แบบเส้นช
https://developers.google.com/google-ads/scripts/docs/examples/spreadsheetapp#add-a-line-chart
โดย วสสนั ต์ต คุคณดดลิ กเศวต ([email protected]) 133
14.2. newChart() และ build()
NewChart() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet.html#newchart
ครนค่ชากลขบมาเป็ปนตขวสร้ชางชารล์ต (Chart builder) หรรอ คลาส EmbeddedChartBuilder แต่ชชาร์ลตจะยขง
ไม่ถช กดู สรา้ช งจนกวา่ช จะใช้ช Method build()
คลาส EmbeddedChartBuilder
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder.html
build() - เมถอดในคลาส EmbeddedChartBuilder
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder.html#build
ใข้ชสรา้ช งชารลต์ จากตขวสรา้ช งชารตล์ ทีทก่ร กาหนดค่ชาตาช่ งๆไวช้
var chartBuilder = sheet.newChart();
Logger.log(chartBuilder); // พมิด พ์ต : EmbeddedChartBuilder
14.3. setChartType()
setChartType(type) - เมถอดในคลาส EmbeddedChartBuilder
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder.html#setcharttypetype
ใชเ้ช ปลยรีท่ นชนิลดของชารตล์ โดยจะครนคาช่ กลบข มาเป็ปนคลาส EmbeddedChartBuilder
พารามิเล ตอรล์ type ดไูด ดจช้ ากตาราง Enum ChartType ดสังตอ่ต ไปนี้ทช การเลอร กชนดลิ ของชารตล์ เชช่น
Chart.ChartType.(Property)
Enum ChartType
https://developers.google.com/apps-script/reference/charts/chart-type.html
Property Type Description
TIMELINE Enum Timeline chart
AREA Enum Area chart
BAR Enum Bar chart
BUBBLE Enum Bubble chart
CANDLESTICK Enum Candlestick chart
COLUMN Enum Column chart
COMBO Enum Combo chart
GAUGE Enum Gauge chart
GEO Enum Geo chart
HISTOGRAM Enum Histogram
RADAR Enum Radar chart
LINE Enum Line chart
ORG Enum Org chart
PIE Enum Pie chart
SCATTER Enum Scatter chart
SPARKLINE Enum Sparkline chart
STEPPED_AREA Enum Stepped area chart
TABLE Enum Table chart
TREEMAP Enum Treemap chart
WATERFALL Enum Waterfall chart
134 เซอร์รววสิ Spreadsheet
14.4. addRange()
addRange(range) - เมถอดในคลาส EmbeddedChartBuilder
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder.html#addrangerange
เพีทม่ลิ เร้ชนจใล์ ห้ชกบข ตขวสรา้ช งชารตล์ โดยจะครนค่ชากลขบมาเปน็ป คลาส EmbeddedChartBuilder
การใชง้ช านเชช่น
var chart = sheet.newChart()
.setChartType(Charts.ChartType.BAR)
.addRange(range)
14.5. setNumHeaders()
setNumHeaders(headers) - เมถอดในคลาส EmbeddedChartBuilder
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder.html#setnumheadersheaders
กกาหนดจาก นวนแถวหรรอคอลขมนล์ทรที่จะใชเ้ช ปป็น headers ของข้อช มดูล โดยจะครนคาช่ กลบข มาเป็นป คลาส
EmbeddedChartBuilder พารามลเิ ตอร์ล headers เป็ปนเลขจาก นวนเตม็ก
การใชงช้ านเช่นช
var chart = sheet.newChart()
.setChartType(Charts.ChartType.BAR)
.addRange(range)
.setNumHeaders(1)
14.6. setPosition()
setPosition(anchorRowPos, anchorColPos, offsetX, offsetY) - เมถอดในคลาส EmbeddedChartBuilder
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder.html#setpositionanchorrowpos,-anchorcolpos,-offsetx,-offsety
ใชช้กกาหนดตาก แหนช่งของชารตล์ โดยอ้าช งอิลงจากตาก แหน่ชงของเซลล์ใล นชีขัท้ร
พารามเิล ตอรล์
Name Type Description
anchorRowPos Integer The chart's top side is anchored in this row.
anchorColPos Integer The chart's left side is anchored in this column.
offsetX Integer The chart's upper right-hand corner is offset by this many pixels.
offsetY Integer The chart's lower left-hand corner is offset by this many pixels.
การใชงช้ านเชน่ช
var chart = sheet.newChart()
.setChartType(Charts.ChartType.BAR)
.addRange(range)
.setNumHeaders(1)
.setPosition(5, 5, 0, 0)
โดย วสัสนต์ต คคุณดิดลกเศวต ([email protected]) 135
14.7. setMergeStrategy()
setMergeStrategy(mergeStrategy) - เมถอดในคลาส EmbeddedChartBuilder
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder.html#setmergestrategymergestrategy
ใชใ้ช นกรณเีร พีิ่ทลมเรนช้ จ์ลมากกวช่า 1 เรนช้ จ์ล ใช้ชกกาหนดการรวมเรนช้ จลว์ าช่ จะรวมในแนวคอลขมนล์ หรอร แนวแถว
พารามิลเตอรล์ mergeStrategy ก็กครอ Enum ChartMergeStrategy ดดูไดช้จากตารางตช่อไปนข้ีรั ก็กกาก หนด
คชุณสมบขติลเช่นช Charts.ChartMergeStrategy.(Property)
Enum ChartMergeStrategy
https://developers.google.com/apps-script/reference/charts/chart-merge-strategy.html
Property Type Description
MERGE_COLUMNS Enum Default. Charts merges the columns of multiple ranges.
MERGE_ROWS Enum Charts merges the rows of multiple ranges.
การใช้งช านเชน่ช
var range = sheet.getRange("A2:B10");
var range2 = sheet.getRange("C2:C10");
var chart = sheet.newChart()
.setChartType(Charts.ChartType.BAR)
.addRange(range)
.addRange(range2)
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setPosition(5, 5, 0, 0)
.build() ;
ตวข อยา่ช งผลลขพธล์
136 เซอร์รวสวิ Spreadsheet
14.8. insertChart(), updateChart() และ getChart()
insertChart(chart) - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#insertchartchart
ใสชช่ ารต์ล ใหมลช่ งในชขีร้ทั พารามลเิ ตอร์ล chart กก็คอร คลาส EmbeddedChart
คลาส EmbeddedChart
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart.html
เปนป็ วขตถชุชารต์ล ทรี่อท ยใดูช่ นไฟล์ล Google Sheets
getCharts() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet.html#getcharts
ใช้จช ขบชารต์ล ทขั้งหมดทีทร่มีอร ยใดชู่ นชข้ทัร โดยจะครนคาช่ กลขบมาเปนป็ คลาส EmbeddedChart[] หรอร ชารต์ล ท่ีเรท กก็บอยูใด่ช น
อาเรยล์
modify() - เมถอดในคลาส EmbeddedChart
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart.html#modify
ครนคช่ากลขบมาเป็ปนวขตถชุ EmbeddedChartBuilder ทีรท่สามารถแกช้ไข เมีทร่อแก้ชไขแล้ชว ให้ชอขพเดทการแก้ชไขโดย
ใชเช้ มถถอด updateChart()
updateChart(chart) - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#updatechartchart
ใช้อช พข เดทชารลต์ ในชทขี้ัร
14.8.ก.) ตววั ยทา่ งทีท่ 1
โคด้ช ตอ่ช ไปนัข้ีร อขพเดทชารตล์ ตวข ท่ีรท 1 เชช่น ใสช่ Title เปน็ป Update! ยาช้ ยไปทีต่ทร าก แหนชง่ 2,2 เปป็นตนช้
function updateChartNo1() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A2:B8");
var chart = sheet.getCharts()[0];
chart = chart.modify()
.addRange(range)
.setOption('title', 'Updated!')
.setOption('animation.duration', 500)
.setPosition(2,2,0,0)
.build();
sheet.updateChart(chart);
}
โดย วสสนั ตต์ คณุค ดิดลกเศวต ([email protected]) 137
14.8.ข.) ตววั ยท่างทท่ี 2
โคด้ช ตช่อไปนขั้รี อพข เดทชารตล์ ทขง้ั หมด แลว้ช เปลียท่ร นใหชเ้ ป็ปนแบบ Column
function updateNewChart() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var charts = sheet.getCharts(); // จบัส ชารตต์ ทชี้สงั หมดในชทช้ีท
for (var i in charts) {
var chart = charts[i];
var newChart = chart.modify() // โมดดิฟายชาร์ตต เดดิม แลค้วเกจ็บไว้คในตสัวแปรใหม่ต
.setChartType(Charts.ChartType.COLUMN)
.build();
sheet.updateChart(newChart);
} // Close - for
} // Close – function
14.9. จบบั ชารตร์ เปน็ป ภาพ
Export Google sheet Chart as an image
https://stackoverflow.com/questions/28387355/export-google-sheet-chart-as-an-image
14.9.ก.) สง่ท เมลร์
ตวข อยาช่ ง
function createPieChart(){
var sheet = SpreadsheetApp.openById("<ID>").getSheetByName("<SheetName>") ;
var chartBuilder = sheet.newChart()
.asPieChart()
.set3D()
.addRange(sheet.getRange("A20").getDataRegion())
.setPosition(16, 5, 0, 0)
.setOption('title', "Total hour split in 2020") ;
var blob = chartBuilder.build().getBlob() ;
sendMail(blob) ;
}
function sendMail(img){
MailApp.sendEmail({
to: "[email protected]" ,
subject: "test" ,
htmlBody: "fair enough" ,
attachments: [img]}) ;
// If this gives you problems, replace img with img.getAs(MimeType.JPEG)
}
138 เซอรรว์ สวิ Spreadsheet
14.9.ข.) ใส่ทไวใ้ช นชทท้ัข อทน่ีช
ตวข อย่าช ง
function createPieChart(){
var srcSheet=SpreadsheetApp.openById("<ID>").getSheetByName("<SheetName>") ;
var destSheet=SpreadsheetApp.openById("<ID>").getSheetByName("<SheetName>") ;
var chartBuilder = srcSheet.newChart()
.asPieChart()
.set3D()
.addRange(sheet.getRange("A20").getDataRegion())
.setPosition(16, 5, 0, 0)
.setOption('title', "Total hour split in 2020") ;
var blob = chartBuilder.build().getBlob() ;
destSheet.insertImage(blob, 1, 1) ;
}
โดย วสันส ต์ต คคุณดดิลกเศวต ([email protected]) 139
140 เซอร์วร วิส Spreadsheet
บททท่ี 15
Drawing
และ
Over Grid Image
15.1. Drawing(รสปู วาด)
getDrawings() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getdrawings
getHeight() - เมถอดในคลาส Drawing
https://developers.google.com/apps-script/reference/spreadsheet/drawing#getheight
getOnAction() - เมถอดในคลาส Drawing
https://developers.google.com/apps-script/reference/spreadsheet/drawing#getonaction
remove() - เมถอดในคลาส Drawing
https://developers.google.com/apps-script/reference/spreadsheet/drawing#remove
ตวข อยา่ช ง – วนลดปู จบข Drawing แลวช้ จขบความสงดู ออกมาดูด
// Logs the height of all drawings in a sheet
var drawings = SpreadsheetApp.getActiveSheet().getDrawings();
for (var i = 0 ; i < drawings.length ; i++) {
Logger.log(drawings[i].getHeight());
}
ตวข อยาช่ ง – วนลูดปจบข Drawing แลช้วจบข ชีทรอ่ ของฟังป กล์ชขนีท่ Apps Script ท่รที Assign ใหช้กบข รปูด วาดออกมาดูด
// Logs the macro name of all drawings on the active sheet.
var drawings = SpreadsheetApp.getActiveSheet().getDrawings();
for (var i = 0 ; i < drawings.length ; i++) {
Logger.log(drawings[i].getOnAction()) ;
}
ตวข อยา่ช ง
// Deletes all drawings from the active sheet.
var drawings = SpreadsheetApp.getActiveSheet().getDrawings();
for (var i = 0 ; i < drawings.length ; i++) {
drawings[i].remove();
}
142 เซอร์วร สิว Spreadsheet
15.2. Over Grid Images
ภาพมีร 2 แบบ ก็คก รอ แบบ ฝ่ัฝงในเซลล(์พ In Cell Images) และ แบบลอยเหนอช เสนช้ กรมด(Over Grid
Images) ตวข อยาช่ งตามภาพ
getImages() - เมถอดในคลาส Sheet
https://developers.google.com/apps-script/reference/spreadsheet/sheet#getimages
getImages() - เมถอดในคลาส Spreadsheeet
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getimages
getHeight() - เมถอดในคลาส OverGridImage
https://developers.google.com/apps-script/reference/spreadsheet/over-grid-image#getheight
ตวข อยช่าง - – วนลดูปจขบ Over Grid Images แลว้ช จขบความสงดู ออกมาดูด
// Logs the height of all images in a spreadsheet
var images = SpreadsheetApp.getActiveSpreadsheet().getImages() ;
for (var i = 0 ; i < images.length ; i++) {
Logger.log(images[i].getHeight()) ;
}
ตวข อยช่าง – ลบทุกช ภาพใน Spreadsheet
// Deletes all images in a spreadsheet
var images = SpreadsheetApp.getActiveSpreadsheet().getImages() ;
for (var i = 0 ; i < images.length ; i++) {
images[i].remove() ;
}
โดย วสนสั ตต์ คคณุ ดิดลกเศวต ([email protected]) 143
144 เซอร์วร วิส Spreadsheet
บททีท่ 16
User Interfaces
16.1. การสร้าช งเมนูส
16.1.ก.) คลาสและเมถอดททส่ี าก คญวั ในการสราช้ งเมนูด
คลาส Ui
https://developers.google.com/apps-script/reference/base/ui
Custom Menus in G Suite
https://developers.google.com/apps-script/guides/menus
createMenu(caption) - เมถอดในคลาส Ui
https://developers.google.com/apps-script/reference/base/ui#createmenucaption
getUi() - เมถอดในคลาส SpreadsheetApp
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#getui
ใชจ้ช ขบ Ui ของ Google SHeets คนร คาช่ กลบข มาเปป็น UI (user-interface) หรอร สภาพแวดลช้อมของ
โปรแกรมท่ีรผท ใดชู้ ช้ชงานกกาลขงทกางานดวช้ ย ซึงีท่ เราสามารถเพล่ีทิมเมนดู, กรอบโตช้ตอบ(Dialogs) หรอร กรอบดาช้ น
ข้าช ง(Sidebars) ไดช้
createMenu(caption) - เมถอดในคลาส Ui
https://developers.google.com/apps-script/reference/base/ui#createmenucaption
ใช้ชสร้ชางตขวสรช้างเมนดู โดยจะครนค่ชากลขบมาเป็ปนคลาส Menu จากนัข้นกก็จะสามารถใส่ชเมนดูต่ชางๆลงไปไดช้ แต่ช
วาช่ เมนดูจะยงข ไมช่ถูดกเพี่ทลมิ เขา้ช ไปใน Ui ของ Google Sheets จนกวา่ช ใช้ช Method ชอทร่ี addToUi()
พารามิเล ตอร์ล caption กคก็ รอ ชท่อรี ของเมนดูในเมนูดบารทล์ ีร่จท ะสรา้ช ง
createAddonMenu() - เมถอดในคลาส Ui
https://developers.google.com/apps-script/reference/base/ui#createaddonmenu
คลาช้ ยกขบ Method createMenu() ใชชส้ รา้ช งเมนูดเหมอร นกขน แตชจ่ ะสรช้างเป็ปนเมนูดย่ชอย ของเมนดู Addon โดย
จะคนร ค่าช กลขบมาเป็ปนคลาส Menu
addItem(caption, functionName)
https://developers.google.com/apps-script/reference/base/menu.html#additemcaption,-functionname
เพลที่ิมรายการ(item หรรอ เมนดูย่ชอย) ลงในเมนูด โดยจะครนค่ชากลขบมาเปป็นคลาส Menu (caption = ชรที่อเมนดู
ยชอ่ ย functionName = ชอรท่ี ฟปงั ก์ลชนข่ีท )
146 เซอรว์ร ิสว Spreadsheet
ตวร อยา่ต ง
Dialogs and Sidebars in G Suite Documents
https://developers.google.com/apps-script/guides/dialogs
function onOpen(e) { // e คอมื อะไรดยเรืม่ชอง Simple trigger
SpreadsheetApp.getUi()
.createMenu('Custom Menu')
// ชอ่ชืม เมนย ชอ่มชื ฟฝังก์ตชชืสั่น
.addItem('Show alert', 'showAlert')
.addToUi() ;
Logger.log(e); // ดตย อ่ต ทืชทผ่ ลการ Logs –------------------- > [ 01 ]
}
function showAlert() {
var ui = SpreadsheetApp.getUi();
var result = ui.alert( 'Please confirm' ,
'Are you sure you want to continue?' ,
ui.ButtonSet.YES_NO) ;
// ถคา้ มยท สย เซอรต์ตอบสนอง // User clicked "Yes".
if (result == ui.Button.YES) { // User clicked "No" or X in the title bar.
ui.alert('Confirmation received.');
} else {
ui.alert('Permission denied.');
}
}
เมอรที่ ปิดฟ เปดฟิ ไฟล์ล Google Sheet โค้ดช จะรขนอขตโนมตข ิล
Logs
[ 01 ] { authMode=LIMITED,
range=Range,
source=Spreadsheet,
[email protected] }
ผล – มเรี มนดู Custom Menu ปรากฎเพที่ิมล เตลิมเม่ีทรอเปดฟิ ไฟลล์ Google Sheet
โดย วสนัส ตต์ คณคุ ดิลด กเศวต ([email protected]) 147
16.2. alert()
alert(title, prompt, buttons) - เมถอดในคลาส Ui
https://developers.google.com/apps-script/reference/base/ui#alerttitle,-prompt,-buttons
Alert dialogs
https://developers.google.com/apps-script/guides/dialogs#alert_dialogs
alert() ใชช้เปิฟดกรอบ Dialogue ทมีทร่ ีขร ้อช ความ หวข เรร่อที ง และ ปุชป่มตาช่ งๆ ทีรเ่ท รากาก หนดไดช้ เม่ทรอี Dialogue ถูกด
เปฟดิ สริปล ต์ลจะหยชุดการรนข และจะทกางานต่ชอเมีร่อท ผชู้ใด ชงช้ านตอบสนองต่ชอ Dialogue
พารามมเตอรพ์
Name Type Description
title String The title to display above the dialog box.
prompt String The message to display in the dialog box.
The button set to display in the dialog box.
buttons ButtonSet (ดตย าราง Enum ButtonSet)
Enum ButtonSet
https://developers.google.com/apps-script/reference/base/button-set.html
Property Type Description
OK Enum A single "OK" button, indicating an informational message that can
only be dismissed.
OK_CANCEL Enum An "OK" button and a "Cancel" button, allowing the user to either
proceed with or halt an operation.
YES_NO Enum A "Yes" button and a "No" button, allowing the user to answer a
yes/no question.
YES_NO_CANCEL Enum A "Yes" button, a "No" button, and a "Cancel" button, allowing the
user to either answer a yes/no question or halt an operation.
ตวข อยา่ช ง
function main() {
var ui = SpreadsheetApp.getUi() ;
var response = ui.alert( 'Confirm'
, 'Are you sure you want to continue?'
, ui.ButtonSet.YES_NO);
// Process the user's response.
if (response == ui.Button.YES) {
Logger.log('The user clicked "Yes."') ;
} else {
Logger.log('The user clicked "No" or the close button in the dialog\'s title bar.') ;
}
}
148 เซอร์รวสิว Spreadsheet
ผลหลงข รนข สครปลิ ต์ล ปรากฎกรอบ Dialogue ททร่ี Google Sheets
หาก Log ดจูด ะได้ผช ลลพข ธด์ล งข นรีขั้ เมี่อรท ผดูช้ใชง้ช านคลิลกปมุ่ปช Yes
Logs
[ ] The user clicked "Yes."
16.3. prompt()
prompt(title, prompt, buttons) - เมถอดในคลาส Ui
https://developers.google.com/apps-script/reference/base/ui#prompttitle,-prompt,-buttons
Prompt dialogs
https://developers.google.com/apps-script/guides/dialogs#prompt_dialogs
prompt() ใชเ้ช ปิฟดกรอบ Input Dialogue ทรทีผ่ ้ชดูใช้งช านสามารถกรอกข้อช ความ(input) เพทรอ่ี จะนาก ไปประมวล
ผลตอ่ช ไดช้ มรปี ุชปม่ มหีร วข เรทร่ีอง มรขี ช้อความ เหมอร นๆกบข Method alert()
พารามลิเตอร์ล
Name Type Description
title String The title to display above the dialog box.
prompt String The message to display in the dialog box.
The button set to display in the dialog box.
buttons ButtonSet (ดยตาราง Enum ButtonSet)
prompt() คนร คา่ช กลบข มาเปป็นคลาส PromptResponse ซง่ทึี เราสามารถใชช้ เมถอดในคลาสนร้ขีั จขบคาก ตอบทีรผท่ ูด้ช
ตอบกลขบมาประมวลผลตอช่ ได้ช เชช่น getResponseText(), getSelectedButton()
คลาส PromptResponse
https://developers.google.com/apps-script/reference/base/prompt-response.html
getResponseText() - เมถอดในคลาส PromptResponse
https://developers.google.com/apps-script/reference/base/prompt-response.html#getresponsetext
ใชจ้ช บข ขอช้ ความทกทรี่ รอบลงใน Input box โดยจะคนร ค่ชากลบข มาเปป็นขอ้ช ความ(Straing)
getSelectedButton() - เมถอดในคลาส PromptResponse
https://developers.google.com/apps-script/reference/base/prompt-response.html#getselectedbutton
ใช้จช ขบปุมปช่ ทค่ทรี ลลกิ โดยจะครนคา่ช กลบข มาเปปน็ Enum Button
โดย วสสันตต์ คณุค ดลิด กเศวต ([email protected]) 149
Enum Button
https://developers.google.com/apps-script/reference/base/button.html
Property Type Description
CLOSE Enum The standard close button displayed in every dialog's title bar. This
button is not explicitly added to a dialog, and it cannot be removed.
OK Enum An "OK" button, indicating that an operation should proceed.
CANCEL Enum A "Cancel" button, indicating that an operation should not proceed.
YES Enum A "Yes" button, indicating a positive response to a question.
NO Enum A "No" button, indicating a negative response to a question.
ตวข อยาช่ ง
function main() {
var ui = SpreadsheetApp.getUi();
var response = ui.prompt( 'Getting to know you'
, 'May I know your name?'
, ui.ButtonSet.YES_NO );
if (response.getSelectedButton() == ui.Button.YES) { // คลิกด Yes
Logger.log('The user\'s name is %s.', response.getResponseText());
} else if (response.getSelectedButton() == ui.Button.NO) { // คลดิก No
Logger.log('The user didn\'t want to provide a name.');
} else { // คลกิด อยาต่ งอนมืช่
Logger.log('The user clicked the close button in the dialog\'s title bar.');
}
}
ผลหลขงรขนโคด้ช
ถชา้ Logs ดจดู ะไดผ้ช ลลพข ธดล์ ขงน้ัีขร
Logs
[ 01 ] The user's name is Wasan.
150 เซอร์รวสวิ Spreadsheet