質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

解決済

スクリプトを使用し、他のファイルからデータを転記した際、日付のシリアル値が変わってしまう。

mattsuncaca
mattsuncaca

総合スコア2

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

2回答

0リアクション

1クリップ

646閲覧

投稿2021/11/05 10:36

前提

スクリプトを用いて、下記の動作を実現しました。
・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

function PastePlan() { //現在のスプシのidと、貼り付け対象のシートを取得 const Spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const thisSsId = Spreadsheet.getId(); Logger.log(thisSsId); const pasteSheet = Spreadsheet.getSheetByName('予測');  //コピー元データのExcelファイルを名前から取得 const folder = DriveApp.getFolderById('1PSSwUksFZTHGdWQU351EUBgOHDlMTJBM');//ロ―データフォルダのID const files = folder.getFilesByName('plan_' + thisSsId + '.csv'); const file = files.next(); Logger.log(file); //おそらく、Excelからスプシへの変換で必要な操作(ネット上のコード) options = { title : file.getName(), mimeType: MimeType.GOOGLE_SHEETS, parents : [{ id: folder.getId() }] }  //スプシ形式に変換したコピー元データのシートから、すべての値を取得 const newSs = SpreadsheetApp.openById(Drive.Files.insert(options, file.getBlob()).id); //ExcelをSSに変換し取得 const newSheet = newSs.getActiveSheet(); const values = newSheet.getDataRange().getValues();  //下記ですでに、「Mon Nov 01 16:00:00 GMT+09:00 2021」の表示 Logger.log(values[1][0]); //現在のスプシの貼り付け先シートに、コピーした範囲を貼り付け pasteSheet.getRange(1, 2, values.length, values[0].length).setValues(values); //スプシ形式に変換したファイルをゴミ箱に移動 //DriveAppクラスからファイルIDでファイル一意に取得する const fileData = DriveApp.getFileById(newSs.getId()); //IDから取得したファイルをゴミ箱のフラグをtrueにする const getData = fileData.setTrashed(true); }

試したこと

前任者は、似た状況で、下記のコードで対応しているぽいですが、僕のスキルレベルでは分かりませんでした><

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週間たたない、基礎概念もおぼろな初心者ですが、何卒、よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。