使用下面的脚本,格式化为文本的数字将更改为时间格式,即使我将 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,这不应该是正在发生。
你可以尝试这样的事情:
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();
}