then calculate your GPA
What I have done & learn
- สร้าง Spreadsheet
- ทำการสร้าง custom function ใน spreadsheet เพื่อนำข้อมูลเกรดไปคำนวณหา GPA
- เรียกใช้ฟังก์ชั่นโดยพิมพ์ =round(calGPA(B3:B37,C3:C37),2) ใน Cell ใดๆ โดยที่ B3:B37 เป็น column ของ หน่วยกิต และ C3:C37 เป็น column ของ เกรด
- ฟังก์ชั่น round เป็นการปัดเศษทศนิยมลงให้เหลือ 2 ตำแหน่ง
- หากส่งค่าที่เป็น column มาในฟังก์ชั่น (เช่น C3 ถึง C37 ) จะถูกมองเป็น Array 2 มิติ เช่น a[x][y] โดยที่ x คือเลขแถว และ y คือ column
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function calGPA(weight_column,grade_column){ var grade_to_int = { 'A':4, 'B+':3.5 , 'B':3 , 'C+':2.5, 'C':2, 'D+':1.5, 'D':1, 'F':0} var gpa = 0 var totalweight = 0 for (var i = 0 ; i < weight_column.length ; i++){ if (check_valid_cell(grade_column[i][0]) && check_valid_cell(weight_column[i][0])) { var grade = grade_to_int[grade_column[i][0]] var weight = weight_column[i][0] gpa += weight*grade totalweight += weight } } gpa = gpa/totalweight return gpa } function check_valid_cell(input){ if (input == "" || input == "เกรด" || input == "หน่วยกิต"){ return false; } else { return true; } } |
Problem & Decision
- จะเปลี่ยนเกรดที่เป็นตัวหนังสือ (A, B+, B,...) ให้เป็นตัวเลข (4, 3.5, 3,...)ยังไงดี
- หาวิธีสร้าง custom function ใน spreadsheet ของ google (ref 1)
- รับข้อมูลทั้ง column มาใช้ใน custom function ยังไง
- หาวิธีนำข้อมูลมาใช้ (ref 5) พบว่าค่า colum (เช่น C3:C37 , B3:B37) ถูกส่งเข้ามาเป็น Array 2 มิติ
- สร้าง Dictionary เพื่อแปลงเกรดที่เป็นตัวหนังสือ (A,B+,B,...) เป็นตัวเลขใน Javascript ยังไง
- (ref 3)
Reference
- https://developers.google.com/apps-script/guides/sheets/functions
- https://support.google.com/docs/table/25273?visit_id=1-636511767606467202-1315042709&hl=th&rd=2
- https://stackoverflow.com/questions/1208222/how-to-do-associative-array-hashing-in-javascript
- https://stackoverflow.com/questions/31213486/iterating-over-cells-in-google-spreadsheet-custom-function
- https://webapps.stackexchange.com/questions/10629/how-to-pass-a-range-into-a-custom-function-in-google-spreadsheets
ไม่มีความคิดเห็น:
แสดงความคิดเห็น