使用脚本附加行会将文本格式的值更改为时间格式的值

问题描述 投票:0回答:1

使用下面的脚本,格式化为文本的数字将更改为时间格式,即使我将 Logged_Data 表中的 E2:E 列格式化为“纯文本”。这是什么原因呢?我能做什么来解决它?

在 Data_Input!D8 中,单元格格式为“纯文本”:

但是,当它出现在 Logged_Data 表中时,它的格式为时间:

这是我正在使用的脚本:

function transposeAndAppend() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let shtIn = ss.getSheetByName("Data_Input");
  let shtOut = ss.getSheetByName("Logged_Data");

  let responses = shtIn.getRange("D4:D11").getValues();
  //responses is a 2d array that looks like this [[a],[b],[c]]
  
  //first transpose it
  let transResp = responses[0].map((resp,i)=>responses.map(r => r[i]))
  //we now have [[a,b,c]] 

  shtOut.appendRow(transResp.flat())

    //Clear the 'form'
  shtIn.getRange("D4:D11").clearContent();
}

根据 Google 支持部门的 Hyde 的说法,https://support.google.com/docs/thread/99094988/can-you-format-the-data-when-doing-appendrow?hl=en,这不应该是正在发生。

google-apps-script google-sheets append
1个回答
0
投票

你可以尝试这样的事情:

function transposeAndAppend() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let shtIn = ss.getSheetByName("Sheet0");
  let shtOut = ss.getSheetByName("Sheet1");
  let responses = shtIn.getRange("D4:D11").getValues();
  let formats = shtIn.getRange("D4:D11").getNumberFormats();
  let transResp = responses[0].map((resp, i) => responses.map(r => r[i]));
  let transForm = formats[0].map((f,i) => formats.map(r => r[i]));//get numberformats
  shtOut.getRange(shtOut.getLastRow() + 1, 1, transResp.length,transResp[0].length).setValues(transResp);
  shtOut.getRange(shtOut.getLastRow(), 1, transForm.length, transForm[0].length).setNumberFormats(transForm);//set transformed numberformats
  shtIn.getRange("D4:D11").clearContent();
}
© www.soinside.com 2019 - 2024. All rights reserved.