Fri. May 3rd, 2024

โจทย์
ทำ Google Sheet ให้สามารถกรอกข้อมูลและเพิ่มเป็น record ต่าง ๆ  และสามารถ Update ได้

ตัวแปรที่ต้องระวังคือ 
– การพิมพ์ ตัวชื่ออักษรของ sheet ต่าง ๆเรื่องตัวเล็กตัวใหญ่

– ตัวเลข 13 คือตัวเลขจำนวน column ที่มีทั้งหมดใน sheet Data ครับ

  // ประกาศตัวแปร sheet ต่าง ๆ
    const ss = SpreadsheetApp.getActiveSpreadsheet()
    const formWS = ss.getSheetByName("form")
    const settingsWS = ss.getSheetByName("Settings")
    const dataWS = ss.getSheetByName("Data")
    const idCell = formWS.getRange("C2")
    const fieldRange = ["C5","C6","C8","C11","C12","C13","C14","C16","C17","C19"]
    const searchCell = formWS.getRange("C3")
 

function saveRecord() {

  const id = idCell.getValue()

  if(id == ""){
    creatNewRecord()
    return
  }

  const cellFound = dataWS.getRange("A:A")
                  .createTextFinder(id)
                  .matchCase(true)
                  .matchEntireCell(true)
                  .findNext()
  if(!cellFound) return
  const row = cellFound.getRow()
  const fieldValues = fieldRange.map(f => formWS.getRange(f).getValue())
  fieldValues.unshift(id)
  dataWS.getRange(row,1,1,13).setValues([fieldValues])
  searchCell.clearContent()
  ss.toast("change save","id:"+ id)

}


function creatNewRecord(){
  const fieldValues = fieldRange.map(f => formWS.getRange(f).getValue())
  const nextIDCell = settingsWS.getRange("A2")
  const nextID = nextIDCell.getValue()

  fieldValues.unshift(nextID)

 // console.log(fieldValues)
  dataWS.appendRow(fieldValues)
  idCell.setValue(nextID)
  nextIDCell.setValue(nextID+1)
  searchCell.clearContent()
  ss.toast("New Record Created","id:"+ nextID)
}


function newRecord(){
  fieldRange.forEach(f => formWS.getRange(f).clearContent())
  idCell.clearContent()
  searchCell.clearContent()
  }

function search(){
  const searchValue = searchCell.getValue()
  const data = dataWS.getRange("A2:L").getValues()
  const recordsFound = data.filter (r => r[13]== searchValue)
  if(recordsFound.length ===0) return

  idCell.setValue(recordsFound[0][0])
  fieldRange.forEach((f,i) => formWS.getRange(f).setValue(recordsFound[0][i+1]))
}

function deletRecord(){

  const id = idCell.getValue()

  if(id == "")return
 

  const cellFound = dataWS.getRange("A:A")
                  .createTextFinder(id)
                  .matchCase(true)
                  .matchEntireCell(true)
                  .findNext()
  if(!cellFound) return
  const row = cellFound.getRow()
  dataWS.deleteRow(row)
  newRecord()
  ss.toast("delet sucess","id:"+ id)
}

function clearData() {
   fieldRange.forEach(f => formWS.getRange(f).clearContent())
  idCell.clearContent()
  searchCell.clearContent()
}



หน้าตาของ form

By prempcc