The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

Google Apps Script เซอร์วิส Spreadsheet

Discover the best professional documents and content resources in AnyFlip Document Base.
Search

Google Apps Script เซอร์วิส Spreadsheet

Google Apps Script เซอร์วิส Spreadsheet

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


Click to View FlipBook Version