Очистка форматов в Google Sheets
У меня есть Microsoft Flow, отправляющий данные в Google Sheet. Когда данные появляются на листе, у некоторых ячеек есть скрытый апостроф, который предотвращает вычисления и некоторую формулу.
У меня есть скрипт, который форматирует ячейки с номером, чтобы я мог выполнять вычисления. Что я не могу сделать, так это очистить апостроф от ячейки, которую я хочу запустить =NOW(), чтобы я мог создать метку времени.
Я создал скрипт, но не могу понять, как заставить эту ячейку делать то, что я хочу.
function setFormat(){SpreadsheetApp.getActiveSheet().getRange("A2:A").getValue().replace("'=NOW()","=NOW()");SpreadsheetApp.getActiveSheet().getRange("C2:C").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("D2:D").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("E2:E").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("F2:F").setNumberFormat('000');}`
1 ответ
Как насчет этого образца?
С помощью
getValues()
данные "A2:A" извлекаются. https://developers.google.com/apps-script/reference/spreadsheet/rangeДанные, полученные в 1, преобразуются из
'=NOW()
в=NOW()
,С помощью
setFormulas()
, преобразованные данные импортируются в "A2:A". https://developers.google.com/apps-script/reference/spreadsheet/rangesetNumberFormat()
отлично работает для вашего сценария.
Пример скрипта:
function setFormat(){
var ss = SpreadsheetApp.getActiveSheet();
var Data = ss.getRange("A2:A").getValues();
var replacedData = [[i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])];
ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData);
ss.getRange("C2:C").setNumberFormat('000');
ss.getRange("D2:D").setNumberFormat('000');
ss.getRange("E2:E").setNumberFormat('000');
ss.getRange("F2:F").setNumberFormat('000');
}
Если я неправильно понимаю ваш вопрос, извините.
Добавлено 1:
Тип =NOW()
как формула является объектом. Так только '=NOW()
как строка преобразуется в формулу =NOW()
сравнивая тип. Когда вы добавляете больше данных, добавленные данные будут преобразованы.
function setFormat(){
var ss = SpreadsheetApp.getActiveSheet();
var Data = ss.getRange("A2:A").getValues();
var replacedData = [typeof(i[0])=="object" ? ["=NOW()"] : [i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])];
ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData);
ss.getRange("C2:C").setNumberFormat('000');
ss.getRange("D2:D").setNumberFormat('000');
ss.getRange("E2:E").setNumberFormat('000');
ss.getRange("F2:F").setNumberFormat('000');
}
Добавлено 2:
Этот образец импортирует объект даты в виде строки, когда были импортированы новые данные.
function setFormat(){
var ss = SpreadsheetApp.getActiveSheet();
var Data = ss.getRange("A2:A").getValues();
var replacedData = [
typeof(i[0])=="object"
? [i[0]]
: [i[0].replace("=NOW()", Utilities.formatDate(
new Date(),
Session.getScriptTimeZone(),
'yyyy/M/d HH:mm:ss')
)
]
for each (i in Data) if(i[0])
];
ss.getRange(2, 1, replacedData.length, replacedData[0].length).setValues(replacedData);
ss.getRange("C2:C").setNumberFormat('000');
ss.getRange("D2:D").setNumberFormat('000');
ss.getRange("E2:E").setNumberFormat('000');
ss.getRange("F2:F").setNumberFormat('000');
}