#javascript #google-apps-script #google-sheets #automation
#javascript #google-apps-script #google-sheets #автоматизация
Вопрос:
У меня есть скрипт, который ежедневно добавляет новые данные с нашей производственной линии. Однако, поскольку он просто добавляет данные, формат не такой, каким он нужен для представления.
Нам нужен следующий формат: Номер заказа — Дата — Строка — Приоритет
Формат, который мы импортируем, следующий: Дата — Строка — Приоритет — Порядок #
Это скрипт, который мы используем для ежедневного добавления данных:
function CopySchedule() {
var Production = SpreadsheetApp.openById("ProductionID"); //Production Schedule
var ScheduleSheet = Production.getSheets()[0]; //Production Schedule Sheet 1
var startRow = 2;
var startCol = 1;
var numRows = 1000;
var numCol = 25;
var ScheduleData = ScheduleSheet.getRange(startRow, startCol, numRows, numCol); //Get info from Production Schedule
var Schedule = ScheduleData.getValues(); // Get Values
var MySchedule = SpreadsheetApp.getActiveSpreadsheet(); //Current Spreadsheet
var MySheet = MySchedule.getSheets()[5]; //Current Sheet on Spreadsheet
var now = new Date(); //Today's date
var today = Utilities.formatDate(now, "EST", "M-dd-yy"); //Reformat today date
for (var x = 0; x < 1000; x )
{
if (Schedule[x][0] == today) //if date is today
{
MySheet.appendRow(Schedule[x]); //add row from schedule to bottom of current sheet
}
}
}
Мы хотим, чтобы данные были представлены именно так
Вот как это добавляется в таблицу
Макросов было бы недостаточно, поскольку количество заказов, которые мы выполняем ежедневно, не является фиксированным #, если только не существует способа заставить макрос выбирать только новые ежедневные данные.
Ответ №1:
Формулировка проблемы:
Вам нужно сохранить значения в желаемом порядке. Судя по предоставленным скриншотам, правильный порядок должен быть:
[Schedule[x][3],Schedule[x][0],Schedule[x][1],Schedule[x][2]]
Решения:
Это можно выполнить двумя способами. Один из способов — использовать appendRow()
который не рекомендуется, особенно когда набор данных становится большим, а второй способ — использовать setValues()
более эффективный.
первое решение с appendRow():
function CopySchedule() {
var Production = SpreadsheetApp.openById("ProductionID"); //Production Schedule
var ScheduleSheet = Production.getSheets()[0]; //Production Schedule Sheet 1
var startRow = 2;
var startCol = 1;
var numRows = 1000;
var numCol = 25;
var ScheduleData = ScheduleSheet.getRange(startRow, startCol, numRows, numCol); //Get info from Production Schedule
var Schedule = ScheduleData.getValues(); // Get Values
var MySchedule = SpreadsheetApp.getActiveSpreadsheet(); //Current Spreadsheet
var MySheet = MySchedule.getSheets()[5]; //Current Sheet on Spreadsheet
var now = new Date(); //Today's date
var today = Utilities.formatDate(now, "EST", "M-dd-yy"); //Reformat today date
for (var x = 0; x < 1000; x )
{
if (Schedule[x][0] == today) //if date is today
{
MySheet.appendRow([Schedule[x][3],Schedule[x][0],Schedule[x][1],Schedule[x][2]]);
}
}
}
2-е решение с setValues() — Рекомендуется:
function CopySchedule() {
var Production = SpreadsheetApp.openById("ProductionID"); //Production Schedule
var ScheduleSheet = Production.getSheets()[0]; //Production Schedule Sheet 1
var startRow = 2;
var startCol = 1;
var numRows = 1000;
var numCol = 25;
var ScheduleData = ScheduleSheet.getRange(startRow, startCol, numRows, numCol); //Get info from Production Schedule
var Schedule = ScheduleData.getValues(); // Get Values
var MySchedule = SpreadsheetApp.getActiveSpreadsheet(); //Current Spreadsheet
var MySheet = MySchedule.getSheets()[5]; //Current Sheet on Spreadsheet
var now = new Date(); //Today's date
var today = Utilities.formatDate(now, "EST", "M-dd-yy"); //Reformat today date
data = [];
for (var x = 0; x < 1000; x )
{
if (Schedule[x][0] == today) //if date is today
{
data.push([Schedule[x][3],Schedule[x][0],Schedule[x][1],Schedule[x][2]]);
}
}
MySheet.getRange(MySheet.getLastRow() 1,1,data.length,data[0].length).setValues(data);
}
Комментарии:
1. Это именно то, что нам было нужно, большое вам спасибо! Если бы у меня было больше данных, чем в начальных 4 столбцах, пришлось бы мне продолжать
Schedule[x][n]
цепочку? или есть сокращение для ввода вплоть до строки z?2. @Index поскольку данные расписания упорядочены неправильно, вы должны указать это вручную.