package Ġq 2 s . sheets Ċ Ċ import Ġcom . google . api . services . sheets . v 4 . Sheet s Ċ import Ġcom . google . api . services . sheets . v 4 . model . Value Range Ċ import Ġlogging . Kotlin Logging Ċ import Ġjava . nio . file . Path Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{ Ġ} Ċ Ċ private Ġfun Ġget First Sheet Name ( client : ĠSheet s , Ġsheet ID : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġlogger . debug Ġ{ Ġ" determin ing Ġthe Ġfirst Ġsheet Ġ( tab ) Ġin Ġ$ sheet ID " Ġ} ĊĊĠĠĠ Ġval Ġsheets Ġ= Ġclient . spreadsheet s (). get ( sheet ID ). set Fields (" sheets . properties "). execute (). sheets ĊĠĠĠ Ġval Ġfirst Sheet Ġ= Ġsheets [ 0 ] ĊĠĠĠ Ġreturn Ġfirst Sheet . properties . title Ċ } Ċ Ċ fun Ġupload CSV ( client : ĠSheet s , Ġsheet ID : ĠString , Ġcsv FilePath : ĠPath , Ġcolumns To Exclude : ĠList < String >) Ġ{ ĊĠĠĠ Ġval Ġcsv Content Ġ= Ġif Ġ( columns To Exclude . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġread CSV ( csv FilePath ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġread And Filter CSV ( csv FilePath , Ġcolumns To Exclude . toSet ()) ĊĊĠĠĠ Ġval Ġnew Body Ġ= ĠValue Range (). set Values ( csv Content ) ĊĊĠĠĠ Ġval Ġrange Ġ= Ġget First Sheet Name ( client , Ġsheet ID ) ĊĊĠĠĠ Ġlogger . debug Ġ{ Ġ" over writing Ġsheet Ġ$ range Ġin Ġspreadsheet Ġ$ sheet ID Ġwith Ġdata Ġfrom Ġ$ csv FilePath " Ġ} ĊĊĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠ Ġclient . spreadsheet s (). values (). update ( sheet ID , Ġrange , Ġnew Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setValue Input Option (" USER _ ENTER ED ") Ġ// Ġhttps :// developers . google . com / sheets / api / reference / rest / v 4 / Value Input Option ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĊĠĠĠ Ġlogger . debug Ġ{ Ġ" updated Ġ${ result . updated Cells } Ġcells Ġin Ġsheet Ġ$ range Ġof Ġspreadsheet Ġ$ sheet ID " Ġ} Ċ } Ċ