0

Good night, I got a script here, it works perfectly, except that I have one of the columns with date information (column E) and when imported, they return me in a string format, I don't know how to go around this for my weak knowledge!

1 Answers1

3

Although I'm not sure whether I could correctly understand your actual situation, when this sample script is modified, how about the following modification?

Modified script:

From:

function getdata2() {
  const srcSpreadsheetId = "###"; // Please set source Spreadsheet ID.
  const dstSpreadsheetId = "###"; // Please set destination Spreadsheet ID.
  const srcRange = "'Database'!A1:U";
  const dstRange = "Database";

  const values = Sheets.Spreadsheets.Values.get(srcSpreadsheetId, srcRange).values;
  const sheetId = SpreadsheetApp.openById(dstSpreadsheetId).getSheetByName(dstRange).getSheetId();
  Sheets.Spreadsheets.batchUpdate({requests:[{repeatCell:{range:{sheetId},fields:"userEnteredValue"}}]}, dstSpreadsheetId);
  Sheets.Spreadsheets.Values.update({values}, dstSpreadsheetId, dstRange, {valueInputOption: "USER_ENTERED"});
}

To:

function getdata2() {
  const srcSpreadsheetId = "###"; // Please set source Spreadsheet ID.
  const dstSpreadsheetId = "###"; // Please set destination Spreadsheet ID.
  const srcRange = "'Database'!A1:U";
  const dstRange = "Database";

  // Here, the date object is retrieved as the serial number.
  const values = Sheets.Spreadsheets.Values.get(srcSpreadsheetId, srcRange, { dateTimeRenderOption: "SERIAL_NUMBER", valueRenderOption: "UNFORMATTED_VALUE" }).values;

  const dstSheet = SpreadsheetApp.openById(dstSpreadsheetId).getSheetByName(dstRange);
  const sheetId = dstSheet.getSheetId();
  Sheets.Spreadsheets.batchUpdate({ requests: [{ repeatCell: { range: { sheetId }, fields: "userEnteredValue" } }] }, dstSpreadsheetId);
  Sheets.Spreadsheets.Values.update({ values }, dstSpreadsheetId, dstRange, { valueInputOption: "USER_ENTERED" });

  // Here, the number format is copied.
  const numberFormats = SpreadsheetApp.openById(srcSpreadsheetId).getRange(srcRange).getNumberFormats();
  dstSheet.getRange(1, 1, numberFormats.length, numberFormats[0].length).setNumberFormats(numberFormats);
}

Note:

  • If the date object is put in only column "E" and the same number format is used, the last 2 lines might be able to be modified as follows. In this case, it supposes that the 1st row is the date object. If the header row is existing, please modify getRange("E2").

      const numberFormat = SpreadsheetApp.openById(srcSpreadsheetId).getRange(srcRange).getSheet().getRange("E1").getNumberFormat();
      dstSheet.getDataRange().setNumberFormat(numberFormat);
    

Reference:

Tanaike
  • 181,128
  • 11
  • 97
  • 165
  • Simply perfect! Hit the fly! Thank you so much! – Sidney Cardoso dos Santos Oct 22 '22 at 05:00
  • @Sidney Cardoso dos Santos About `Simply perfect! Hit the fly! Thank you so much! `, welcome. Thank you for letting me know. I'm glad your issue was resolved. If your question was solved, please push an accept button. Other people who have the same issue with you can also base your question as a question that can be solved. And I think that your issue and solution will be useful for them. If you don't find the button, feel free to tell me. https://stackoverflow.com/help/accepted-answer – Tanaike Oct 22 '22 at 05:07