Google Apps Scriptã§2ã€ã®ã¹ãã¬ããã·ãŒãã®å·®åãåãåºããŠã¿ããGASã
äœæ°ãªã以åäœæãããVBAã«ãŠ2ã€ã®Excelã·ãŒãã®å·®åãåãåºããŠã¿ããã®èšäºãªã®ã§ãããæ°ãã€ããšéåãšã¢ã¯ã»ã¹æ°ãå€ãããšã«æ°ãä»ããŸããã確ãã«æ¯æèª¿æžã§ãã£ãããæ¯æã®çµŠäžèšç®ãããäžã§åæãšã®æ¯èŒå·®åãåã£ãŠãå€ãã£ãŠããã±ãŒã¹ãšããã®ã人éã®ç®ã§ãã§ãã¯ããã®ã¯ãã¯ã£ããèšã£ãŠäžæ¯ãªäžã«ãéãå€ããã°å€ãã»ã©ãã¹ãçºçãããªã¹ã¯ãé«ãŸããšããäœæ¥ãªã®ã§ããããèªååã§ããã°æ¥œã«ãªãäžã«ãã¹ããªããªãä»äºã®ä»£è¡šäŸãããããŸããã
ããã§ãä»åGoogle Apps Scriptã«ãŠGoogleã¹ãã¬ããã·ãŒãã§åããã®ãäœæããŠã¿ãŸããïŒäœããExcelçãšéã£ãŠåºæºå ãšæ¯èŒå ã䞊ã¹ãŠè¡šç€ºããæ©èœã¯ä»åèŠéãïŒãé åã§ååŸããŠé åã§äžçºæžãããŠãã®ã§ã1ã»ã«æ¯ã«æžããŠãExcelçããã¯çè«äžã¯ã¹ããŒãã¯é¥ãã«äžã§ãããGASèªäœã®åŠçé床ãé ãã®ã§ãæãããŠã»ã»ã»
ç®æ¬¡
ä»å䜿çšããã¹ãã¬ããã·ãŒãç
ãµã³ãã«ããŒã¿ã¯ãç䌌å人æ å ±ããŒã¿çæãµãŒãã¹ãçšããŠçæããŠããŸããæ¯èŒå ã®ããŒã¿ã¯ããã€ã倿Žãå ãããããŸãããã€ãã®æ°èŠããŒã¿ã远å ããããã€ãã®ããŒã¿ãåé€ããŠãããŸãã
Excelçã«ãã£ãåºæºå /æ¯èŒå ã䞊ã¹ãŠè¡šç€ºããã¹ãã·ã£ã«çæ©èœã¯æèŒããŠããŸããã
å³ïŒåºæ¬æ©èœã¯ãã¹ãŠç§»æ€ããŠããŸã
äœ¿ãæ¹
ã·ã¹ãã èŠä»¶
ä»åã®ã·ãŒãã¯äž»ã«ãã¹ã¿ãŒããŒã¿ãªã©ã§ãïŒã€ã®ã·ãŒããæ¯èŒããã®å·®åãåãåºãããã°ã©ã ã§ãããã®ããã以äžã®ã«ãŒã«ãååšããŸãã
- 1åç®ã¯IDã2åç®ã¯ååãªã©ã®åãçšæããŸãã
- 粟æ»å¯Ÿè±¡ãã¡ã€ã«ã®ãtestããšããååã®ã·ãŒãã®ã¿ããã§ãã¯å¯Ÿè±¡ã«ããŠããŸãã2æä»¥äžããå Žåããã®ã·ãŒããéžã¶ããšã¯ã§ããŸããã
- 1è¡ç®ã¯èŠåºãã§ããå¿ èŠããããŸãã
- èŠåºãã¯åºæºå ãæ¯èŒå ãåãèŠåºãåã®æ°ãèŠåºãåã§ããå¿ èŠããããŸããïŒExcelçã«ãã£ãã«ã©ã åäžæ§ãã§ãã¯ã¯æèŒããŠããŸããïŒ
- ãã¹ã¿ãŒãã§ãã¯ã§ãããããåºæºå ãæ¯èŒå ããäŸãã°åã人ç©ã®ããŒã¿ãè€æ°ååšããŠã¯ãããŸããã
- åºæºå ãåºæºã«ãæ¯èŒå ã®ããŒã¿ã«å€æŽã®ããã»ã«ã¯èµ€åã§è¡šç€ºãããŸãããŸããæ¯èŒå ã«ãããªãããŒã¿ã¯è¿œå ã·ãŒãã«ãåºæºå ã«ãããªãããŒã¿ã¯åé€ã·ãŒãã«æœåºãããŸãã
- åã蟌ããããŒã¿ã¯ãGoogleã¹ãã¬ããã·ãŒã圢åŒã®ã¿ã§ããPickerã®æ¡åŒµåã倿Žããã°ãDriveäžã®xlsxãªã©ãããååŸã§ãããããããŸããã
äºåæºå
䜿ãããã«ã¯ã以äžã®äºåæºåãå¿ èŠã§ããæ¬ã¢ããªã±ãŒã·ã§ã³ã¯Google Driveã®Spreadsheetãæå®ããããã«ãGoogle Pickerãå©çšããŠããçºãAPIããŒã®ååŸãšèšå®ãå¿ èŠã§ããä»ã§ãã§ã«Picker APIçšã®ããŒãååŸæžã¿ãªãã°ãã»ãã以å€ã®äœæ¥ã¯äžèŠã§ãã
ãããžã§ã¯ããäœæãã
Google Cloud Consoleã«è¡ãããã°ã€ã³ããŸããCloud Consoleã«ãã°ã€ã³ãããå³äžã®Google Cloud Platformã®âŒãã¯ãªãã¯ããŠæ¢åã®ãããžã§ã¯ããéããïŒæ°ãã«âèšå·ãã¯ãªãã¯ããŠãããžã§ã¯ããäœæããŸããäœæãŸã§å°ã æéãæãããŸãã
ç¡æã¢ã«ãŠã³ãã®å Žåäœæã§ãããããžã§ã¯ãã®æ°ã«å¶éïŒGoogle Apps Scriptã¯ã¡ãã£ãšéãã¿ããïŒãããã®ã§ããã€ãã€ãšäœããªãããã«æ³šæããŸãããããŸããAPIã®å©çšãäžéïŒã¯ã©ãŒã¿ïŒãä»ããŠããã®ã§ã倧éã«APIãå©ããšå¶éã«æãã£ãŠããŸããŸããããã«ãCloud SQLã®ãããªæåã®ãµãŒãã¹ãªã©ãçšæãããŠããŸãããã¯ã¬ãžããã«ãŒã決æžãå¿ èŠã§ãã
ä»åãmushroomãšãããããžã§ã¯ããäœã£ãŠã¿ãŸããããã®æãããã©ã«ãã§ããã€ãã®APIãæ¢ã«æå¹ã«ãªã£ãŠããŸãããåãæ¢ããäžèŠãªã®ã§ãå·Šãµã€ãããŒãããAPIãšãµãŒãã¹ãâãããã·ã¥ããŒãããéããAPIãå šéšç¡å¹ã«ããŸãããã
å³ïŒãŸãã¯ãããžã§ã¯ããäœããªããš
å³ïŒããã©ã«ãã§ããã€ãã®APIãæå¹ã«ãªã£ã¡ãã£ãŠã
APIãæå¹ã«ãã
APIãšãµãŒãã¹ã®ããã·ã¥ããŒãäžéšãããAPIãšãµãŒãã¹ã®æå¹åããããµãŒãã¹ãæ¢ããŠãæå¹åããŸããä»åã¯ãã¡ã€ã«ããã©ã«ãããã§ã€ã¹ãããGoogle Picker APIããå ã«é²ããŠã¿ãŸããæ€çŽ¢ç»é¢ãããPickerããšå ¥ãããšãGoogle Picker APIãèŠã€ãããŸãããã®APIã¯åŒãç¶ãèªèšŒæ å ±ãäœæããå¿ èŠããããŸãã
å³ïŒGoogle Picker APIã¯ããå©çšããŸã
èªèšŒæ å ±ãäœã
åŒãç¶ãèªèšŒæ å ±ãäœãå¿ èŠãããAPIããããŸããä»åã®Picker APIãåæ§ã§ããå³äžã®ãèªèšŒæ å ±ãäœæããã¯ãªãã¯ãããïŒå·Šãµã€ãããŒã®ãèªèšŒæ å ±ãããäœæéå§ããŸããããã§äœæããã®ã¯APIããŒãšåŒã°ããåäžã®ã³ãŒãã§ãGoogle Maps APIãªã©ã§ããã䜿ã£ãŠããïŒè¡ã®æååã§ãã
èªèšŒæ å ±ã»ã¯ã·ã§ã³ã®èªèšŒæ å ±ãäœæãã¯ãªãã¯ããAPIããŒãéžæãããã§ããã«ããŒãçæãããã®ã§ã³ããŒããŠãããŸããå¶éãå ããå Žåã«ã¯ãäœæããããŒãéãã以äžã®èšå®ãå ããŸãã
- APIã®å¶éã§ã¯ãGoogle Picker APIã®ã¿ã§äœ¿ããããã«å¶éãå ããŠãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®å¶éã¯éåžžã¯äžèŠã§ãããç¹å®ã®ã¹ãã¬ããã·ãŒãã§ã®ã¿æå¹ã«ãããã®ã§ããã°ãHTTPãªãã¡ã©ãŒã«ãŠscript.google.comãå«ãã ã¢ãã¬ã¹ã®å ¥åãå¿ èŠã§ãã
å³ïŒGASã§äœ¿ãã«ã¯ã²ãšæéãå¿ èŠãªHTTPãªãã¡ã©ãŒã®ååŸ
APIããŒãã»ãããã
ãµã³ãã«ã®ã¹ãã¬ããã·ãŒããéããã¡ãã¥ãŒãããäœæ¥é ç®ããéããAPIããŒãç»é²ãå®è¡ãååŸããAPIããŒãå ¥åããŠä¿åãããšã䜿ããããã«ãªããŸãã
å³ïŒãããªæãã®ãã€ã¢ãã°ã䜿ããŸã
ãã§ãã¯æé
APIããŒãã»ããããããã¡ãã¥ãŒãããäœæ¥é ç®ãâãäœæ¥ã®å®è¡ãããããšããµã€ãããŒãçŸããŸãã以äžã®æé ã§å®è¡ããŸãã
- åºæºå ããŒã¿ã®åã蟌ã¿ã®ããŒã¿éžæãã¯ãªãã¯
- Pickerãéãããã®ã§ãã·ã¹ãã èŠä»¶ã«åèŽããã¹ãã¬ããã·ãŒããã¡ã€ã«ãéžæã»èªã¿èŸŒã¿ã
- åããæ¯èŒå ããŒã¿ã®åã蟌ã¿ã®ããŒã¿éžæãã¯ãªãã¯
- Pickerãéãããã®ã§ãã·ã¹ãã èŠä»¶ã«åèŽããã¹ãã¬ããã·ãŒããã¡ã€ã«ãéžæã»èªã¿èŸŒã¿ã
- ãã®æç¹ã§åé¡ããªããã°ãåºæºå ã»æ¯èŒå ã«ãã§ã«ããŒã¿ãèªã¿èŸŒãŸããŠããŸãã
- æåŸã«å·®åæ€èšŒã®å®è¡ã®å®è¡ãã¿ã³ãã¯ãªãã¯ãããšäœæ¥éå§
- å·®åã®ã¿æœåºã®åãåããã«å¯ŸããŠããã¯ãããšçãããšãå·®åããã£ãåã®å€ã®ã¿ã衚瀺ããããããããã®å Žåã¯å šããŒã¿ãå·®åæœåºã«èšé²ãããããã«ãªããŸãïŒã©ã¡ããã¹ããŒãã«å·®ã¯ãããŸããïŒ
- å·®åã®ãã£ãããŒã¿ã¯èµ€åã§è¡šç€ºãããåºæºå ã«ã ãååšããã¬ã³ãŒãã¯åé€ã·ãŒãã«ãæ¯èŒå ã«ã®ã¿ååšããããŒã¿ã¯è¿œå ã·ãŒãã«ããããèšé²ãããŸãã
å³ïŒéåžžã«ã·ã³ãã«ãªæ©èœã®ã¿ã§ã
ãœãŒã¹ã³ãŒã
å®éã«å·®åãã§ãã¯ãè¡ãã³ãŒãã®ã¿ãæ²èŒããŠããŸãã
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
//ããŒã¿ var firstArray; var secondArray; //å·®åãã§ãã¯ãè¡ã function diffcheck() { //å·®åãã©ã° var sabunflg; //åãåãã var ui = SpreadsheetApp.getUi(); var re = ui.alert("å·®åãã§ãã¯", "2ã€ã®ã·ãŒãã®ããŒã¿ãæ¯èŒããŸããïŒ", ui.ButtonSet.YES_NO); switch(re){ case ui.Button.YES: break; case ui.Button.NO: ui.alert("å·®åãã§ãã¯ããã£ã³ã»ã«ããŸããã"); return 0; break; } //åãåãã2 var re2 = ui.alert("å·®åãã§ãã¯", "å·®åã ããæœåºããŸããïŒ", ui.ButtonSet.YES_NO); switch(re2){ case ui.Button.YES: sabunflg = true; break; case ui.Button.NO: sabunflg = false; break; } //2ã€ã®ã·ãŒãããŒã¿ãååŸãã var sheet = SpreadsheetApp.getActiveSpreadsheet(); firstArray = sheet.getSheetByName("åºæºå
").getDataRange().getDisplayValues() secondArray = sheet.getSheetByName("æ¯èŒå
").getDataRange().getDisplayValues(); //å·®åãã©ã°ãèŠãŠåŠçãåå² var ret; if(sabunflg == true){ ret = sabuninsert(0); }else{ ret = sabuninsert(1); } //çµäºã¡ãã»ãŒãžã衚瀺 ui.alert("ããŒã¿ã®æœåºäœæ¥ãå®äºããŸãã"); } //å·®åæœåºã¡ã€ã³ã«ãŒãã³ function sabuninsert(allflg){ //ã¹ãã¬ããã·ãŒããååŸ var sheet = SpreadsheetApp.getActiveSpreadsheet(); //å·®åæœåºã®äžèº«ãã¯ãªã¢ãã var sabunsheet = sheet.getSheetByName("å·®åæœåº"); sabunsheet.getDataRange().clearContent(); //åé€ã·ãŒãã®äžèº«ãã¯ãªã¢ãã var delsheet = sheet.getSheetByName("åé€"); delsheet.getDataRange().clearContent(); //远å ã·ãŒãã®äžèº«ãã¯ãªã¢ãã var addsheet = sheet.getSheetByName("远å "); addsheet.getDataRange().clearContent(); //è¡èŠåºãã®ååŸ var kijunf = sheet.getSheetByName("åºæºå
"); var hikakuf = sheet.getSheetByName("æ¯èŒå
"); var tCol = kijunf.getLastColumn(); var rRec = kijunf.getLastRow(); var cRec = hikakuf.getLastRow(); var mArray = kijunf.getRange(1,1,1,tCol).getValues(); //åã·ãŒãã«èŠåºããã³ã㌠sabunsheet.getRange(1,1,1,tCol).setValues(mArray); delsheet.getRange(1,1,1,tCol).setValues(mArray); addsheet.getRange(1,1,1,tCol).setValues(mArray); //åºæºå
ã·ãŒããåããæ¯èŒå
ã·ãŒããæ¢çŽ¢ããïŒ1åç®ãš2åç®ã®å€ããã£ãŠç¹å®ããïŒ var checkman, checkman2; var sabflg , delflg; var eArray = []; //æžã蟌ã¿çšé
å var dArray = []; //åé€çšæžã蟌ã¿çšé
å var tArray = []; //1è¡ããšã§äœ¿ãäžæé
å var tArray2 = []; //1è¡ããšã§äœ¿ãäžæé
åïŒåé€çšïŒ var colors = []; //æåè²èšå®çš var tcolor = []; //æåè²èšå®çšäžæé
å var aArray = []; //远å çšæžã蟌ã¿çšé
å var tArray3 = []; //1è¡ããšã§äœ¿ãäžæé
åïŒè¿œå çšïŒ for(var i = 1;i<rRec;i++){ //1åç®ãš2åç®ããŒã¿ãååŸãã checkman = firstArray[i][0] + firstArray[i][1]; //ãã©ã°ãåæå sabflg = false; delflg = true; //äžæé
åãåæå tArray = []; tArray2 = []; tcolor = []; //æ¯èŒå
ã·ãŒããåã for(var j = 1;j<cRec;j++){ //1åç®ãš2åç®ããŒã¿ãååŸãã checkman2 = secondArray[j][0] + secondArray[j][1]; //firstArrayã®checkmanãšæ¯èŒ if(checkman == checkman2){ //IDãšååãäžèŽããŠããã®ã§ãå·®åãã§ãã¯ãè¡ã //åé€ãã©ã°ãéãã delflg = false; //é
åããŒã¿ã1åãã€ãã§ãã¯ãã for(var k = 2;k<tCol;k++){ //2ã€ã®é
åãæ¯èŒããŠåãå€ã®å Žåã«ã¯ã¹ã«ãŒãã if(firstArray[i][k] == secondArray[j][k]){ if(allflg == 0){ //空ã®ããŒã¿ã2ã€å
¥ãã tArray.push(""); tcolor.push("#000"); }else{ //å
šæ°å€è¡šç€ºãªã®ã§ãå€ãèšè¿°ããã //æ¯èŒå
ããŒã¿ãpushãã tArray.push(secondArray[j][k]); //æåè²ã¯ç°è²ãæå® tcolor.push("#d1d1d1"); //å·®åãã©ã°ãç«ãŠã sabflg = true; } }else{ //æ¯èŒå
ããŒã¿ãpushãã tArray.push(secondArray[j][k]); //æåè²ã¯èµ€è²ãæå® tcolor.push("#ff0000"); //å·®åãã©ã°ãç«ãŠã sabflg = true; } } //å·®åãã©ã°ãç«ã£ãŠããã1åç®ãš2åç®ãèšè¿°ãã tArray.splice(0, 0, firstArray[i][0]) ; tArray.splice(1, 0, firstArray[i][1]) ; tcolor.splice(0, 0, "#000"); tcolor.splice(1, 0, "#000"); //æžã蟌ã¿çšé
åã«pushãã eArray.push(tArray); colors.push(tcolor); //å
åŽã®ã«ãŒããæãã break; } } //åé€ãã©ã°ãèŠãŠTrueã®å Žåãåé€ã·ãŒãã«ããŒã¿ã远å if(delflg == true){ //é
åããŒã¿ã1åãã€ãã§ãã¯ãã for(var p = 0;p<tCol;p++){ //secondArrayåŽã®å€ãæžã蟌ã tArray2.push(firstArray[i][p]); } //æžã蟌ã¿çšé
åã«pushãã dArray.push(tArray2); } } //é
åããŒã¿ãã¹ãã¬ããã·ãŒãã«æžã蟌㿠//å·®åæœåºãžæžã蟌㿠try{ var colcnt = eArray[0].length;ãã//ã«ã©ã ã®æ°ãååŸãã var rowcnt = eArray.length; ãããã//è¡ã®æ°ãååŸãã sabunsheet.getRange(2,1,rowcnt,colcnt).setValues(eArray); sabunsheet.getRange(2,1,rowcnt,colcnt).setFontColors(colors); }catch(e){ } //åé€ãžæžã蟌㿠try{ colcnt = dArray[0].length; rowcnt = dArray.length; delsheet.getRange(2,1,rowcnt,colcnt).setValues(dArray); }catch(e){ } //æ¯èŒå
ã«è¿œå ãããŠãã±ãŒã¹ãæœåº var checkman3,checkman4; var addflg = true; for(var n = 1;n<cRec;n++){ //1åç®ãš2åç®ã®ããŒã¿ãååŸãã checkman3 = secondArray[n][0] + secondArray[n][1]; //ãã©ã°ãåæå addflg = true; //é
åãåæå tArray3 = []; //åºæºå
ã·ãŒããåã for(var m = 1;m<rRec;m++){ //1åç®ãš2åç®ã®ããŒã¿ãååŸãã checkman4 = firstArray[m][0] + firstArray[m][1]; //firstArrayã®checkmanãšæ¯èŒ if(checkman3 == checkman4){ //åé€ãã©ã°ãéãã addflg = false; //å
åŽã®ã«ãŒããæãã break; } } //远å ãã©ã°ãèŠãŠTrueã®å Žåã远å ã·ãŒãã«ããŒã¿ã远å if(addflg == true){ //é
åããŒã¿ã1åãã€ãã§ãã¯ãã for(o = 0;o<tCol;o++){ //secondArrayåŽã®å€ãæžã蟌ã tArray3.push(secondArray[n][o]); } //æžã蟌ã¿çšé
åã«pushãã aArray.push(tArray3); } } //远å ãžæžã蟌㿠try{ colcnt = aArray[0].length; rowcnt = aArray.length; addsheet.getRange(2,1,rowcnt,colcnt).setValues(aArray); }catch(e){ } //åŠçãè¿ã return 0; } |
- ãã£ãŠãããšã¯ã²ã©ãåçŽã§ãããå šãŠã¡ã¢ãªäžã§è¡ã£ãŠããçºãExcelçãããã¯ã·ã³ãã«ã§é«éã§åããããºãã§ãã
- JavaScriptã®ã»ããVBAãããé åæäœã楜ãªã®ã§ãã³ãŒãéèªäœãå°ãªãã§ãã
- å·®åæœåºãåé€ã远å ãè²èšå®çšã®4ã€ã®æžã蟌ã¿çšé åãšäžæçšé åãçšæããŠpushãããããŠããŸãã
- è²ããŒã¿ã¯ã¡ã€ã³ã®å€ãæžã蟌ã¿åŸã«ãsetFontColorsã«ãŠåããäžæ¬æžã蟌ã¿ããããŠããŸãã
- åé€ã远å ãªã©ã«ããŒã¿ãç¡ãå Žåã«ããªããŠãtry-catchã«ãŠãšã©ãŒãã©ãããçšæããŠããŸãã
- ãªããã¹ãã¬ããã·ãŒãããã®å€ã®ååŸã¯getValuesã§ã¯ãªãgetDisplayValuesã䜿ã£ãŠããŸããæ¥ä»ãæå»ãªã©ã®ããŒã¿ã®å€æäœæ¥ããåã®éãå€ã®æ··åšãªã©ã察å¿ãããçºã§ãã
- ã¹ãã¬ããã·ãŒãããŒã¿ãJSONåããŠã¬ã³ãŒãåäœã§æåã®ãã§ãã¯ãæããŠåäžã¬ã³ãŒããªãã°åŠçãã¹ã«ãŒããããã«ããããããã¡ãã£ãšã ãé«éåã§ããããã
é¢é£ãªã³ã¯
- 2ã€ã®Excelãã¡ã€ã«ã®å·®åãæ¯èŒããããŒã«
- VBAã§Excelã¯ãŒã¯ã·ãŒãã®ééãæ¢ããããïŒå·®åãã€ã©ã€ãïŒ
- ïŒã€ã®ã·ãŒããæ¯èŒããéãã»ã«ã«è²ãã€ãã
- Excel(ãšã¯ã»ã«)å®çšç·šïŒ2ã€ã®ã·ãŒãã®éè€ããŒã¿ãå¥ã·ãŒããžæœåºããŸã
- ãWinMergeãExcelãã¡ã€ã«ã®å·®åãæ¯èŒãã
- ããšã¯ã»ã«æçãç®èŠå³çŠïŒ 2ã€ã®è¡šããéããæ¢ãåºããæéã®æ¹æ³ããšã¯ïŒ
- Google Apps Scriptã䜿ã£ãŠ2ã€ã®2次å é åã®å·®åãååŸããã