前提
スクリプトを用いて、下記の動作を実現しました。
・GoogleDrive上のほかフォルダにアップロードされたExcelファイルのシートを、ファイル名で探す
・Excel形式からスプシ形式に変換し、コピー
・現在のスプシの特定のシートに貼り付け
発生している問題・エラーメッセージ
しかし、スプシに貼り付けられたデータのうち、
元データのA列は日付("yyyy/m/d"形式)なのですが、なぜか
例) 元のエクセルA1のデータ └2021/11/1(※シリアル値:44501) 貼付け後のA1のデータ └2021/11/01 16:00:00(※シリアル値:44501.6666666667)
となってしまい、その後の操作で非常に都合が悪いです。
(アメリカ時間が基準になっている??)
日付が変わらず、"yyyy/m/d"形式になるよう、コントロールできれば最高です。
該当のソースコード
コードをすべて記載しました。各箇所の概要はコメントアウトで記載しています。
個人的には、おそらくExcelからスプシ形式に変換する部分で何か起こってるのではと思います・・・。
GAS
1function PastePlan() { 2 //現在のスプシのidと、貼り付け対象のシートを取得 3 const Spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 const thisSsId = Spreadsheet.getId(); 5 Logger.log(thisSsId); 6 const pasteSheet = Spreadsheet.getSheetByName('予測'); 7 8 //コピー元データのExcelファイルを名前から取得 9 const folder = DriveApp.getFolderById('1PSSwUksFZTHGdWQU351EUBgOHDlMTJBM');//ロ―データフォルダのID 10 const files = folder.getFilesByName('plan_' + thisSsId + '.csv'); 11 const file = files.next(); 12 Logger.log(file); 13 14 //おそらく、Excelからスプシへの変換で必要な操作(ネット上のコード) 15 options = { 16 title : file.getName(), 17 mimeType: MimeType.GOOGLE_SHEETS, 18 parents : [{ id: folder.getId() }] 19 } 20 21 //スプシ形式に変換したコピー元データのシートから、すべての値を取得 22 const newSs = SpreadsheetApp.openById(Drive.Files.insert(options, file.getBlob()).id); //ExcelをSSに変換し取得 23 const newSheet = newSs.getActiveSheet(); 24 const values = newSheet.getDataRange().getValues(); 25 26 //下記ですでに、「Mon Nov 01 16:00:00 GMT+09:00 2021」の表示 27 Logger.log(values[1][0]); 28 29 30 //現在のスプシの貼り付け先シートに、コピーした範囲を貼り付け 31 pasteSheet.getRange(1, 2, values.length, values[0].length).setValues(values); 32 33 //スプシ形式に変換したファイルをゴミ箱に移動 34 //DriveAppクラスからファイルIDでファイル一意に取得する 35 const fileData = DriveApp.getFileById(newSs.getId()); 36//IDから取得したファイルをゴミ箱のフラグをtrueにする 37 const getData = fileData.setTrashed(true); 38}
試したこと
前任者は、似た状況で、下記のコードで対応しているぽいですが、僕のスキルレベルでは分かりませんでした><
plansheet_copyFrom.getRange(2,1,lastRow1-1,1).setNumberFormat(dateFormats); var copyValue = plansheet_copyFrom.getRange(2,1,lastRow1-1,lastCol1).getValues(); Sheet2.getRange(2,2,lastRow1-1,lastCol1).setValues(copyValue); var copyValuedate = []; for (var i = 0; i <= copyValue.length-1 ; i++) { var Value = Utilities.formatDate(copyValue[i][0], "Asia/Tokyo", dateFormats); var c_date = Value.toString(10);; copyValuedate[i] = c_date; }
ネットでいろいろ検索してみましたが、同様のパターンが見つからず途方に暮れているので、
皆様の力をお借りできれば幸いです。
GASをいじり始めて1週間たたない、基礎概念もおぼろな初心者ですが、何卒、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/09 05:47