Электронная таблица - игнорировать Macros.gs.
Я борюсь с эффективностью этой задачи, потому что считаю, что есть более простой способ, чем мой.
Я пытаюсьзаполнить этот лист данными из листа «towquest», где мне действительно нужны только четыре столбца: дата, время, идентификатор, группа, где столбец F = 136. Этот лист представляет список заказов.У меня нет прямого доступа к нашей базе данных, поэтому я могу только извлечь этот файл Excel.Этот список содержит только те заказы, которые не были зарегистрированы.
Представьте, что вы извлекаете данные утром, а затем днем, этот более поздний список будет короче для клиентов, которые уже зарегистрировались,день и дольше кем-то, кто сделал бронирование.
После того, как данные заполнены, и мне нужно обновить этот лист, скажем, вечером или другим утром, мне нужно сравнить предыдущие данные с новыми, чтобыизбегайте дубликатов.
Поэтому я создал для него три специальных листа: DataBlackBox / database /, Query и Unique листов.
Метод добавления новых данных:
COPY DATARANGE FROM UNIQUE TO DATABLACKBOX to ARTIFICIALLY CREATE DUPLICATES
SELECT ONLY DATA WITH BRANCH NUMBER 136, FORMAT TIME AND DATE AND COPY to DATABLACKBOX
IN QUERY SHEET ARE SELECTED ONLY DATA APPEARING ONCE = VERY NEW BOOKINGS
COPY DATA FROM QUERY SHEET AND ADD ONTO DASHBOARD
DELETE DATABLACKBOX SHEET DATA AND POPULATE THEM WITH UNIQUES ONLY / this is done to avoid thousands and thousands of rows and speed up the process /
ОДИН ЖЕ ПРОЦЕСС СДЕЛАН, КОГДА ДОБАВЛЯЕТСЯ ТОЛЬКО 1 НОВЫЙ БРОНИРОВАНИЕ ВРУЧНУЮ, ШАГ 2 ПРОДОЛЖАЕТСЯ НА ЛИСТЕ ДОПОЛНЕНИЯ БРОНИРОВАНИЯ
Мой вопрос заключается в том, могу ли я как-то лучше выполнить весь этот процесс - например, не использовать три листа.Я бы ожидал более простой код, чем этот.Это работает, но я хотел бы видеть лучшие решения от профессионалов или даже подсказку.
function searchSheet() { //search sheet by keyword = towquest - the new entry data sheet always contains towquest
var out = new Array();
var key = "towquest"; // keyword
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); //get name of sheets into an array
// loop runs through the array to find the keyword
for ( var i = 0; i<sheets.length; i++){
out[i] = sheets[i].getName();
if( out[i].indexOf(key) > -1 ){ // indexOf() gives positive number when keyword found
var result = out[i];
break;
}
}
Logger.log(result);
return result;
}
function rawDataFormatFilter() { // time and date cells are not in the right format
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var ss = sheet.getSheetByName(searchSheet());
var lastRow = ss.getLastRow();
ss.insertColumnBefore(2);
var downrange = ss.getRange(2, 2, lastRow-1);
ss.getRange("B2").setFormula("=DATEVALUE(C2)").copyTo(downrange);
var dateFormat = "dd/mm";
var range = ss.getRange("B2:B");
range.setNumberFormat(dateFormat);
ss.insertColumnBefore(4);
var downrange2 = ss.getRange(2, 4, lastRow-1);
ss.getRange("D2").setFormula("=TIME(E2/100,MOD(E2,100),)").copyTo(downrange2);
var timeFormat = "HH:mm";
var range2 = ss.getRange("D2:D");
range2.setNumberFormat(timeFormat);
var queryRange = ss.getRange("$T$1").setValue("=QUERY(B:S, \"Select B,D,F,N,S where H=136\",1)"); // create query
var downrange3 = ss.getRange("S2:S");
var timezone = "GMT+1";
var timestamp_format = "dd/MM/yy HH:mm"; // Timestamp Format.
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
ss.getRange("$S$2").setValue(date).copyTo(downrange3);
var copyRange = ss.getRange("T2:X");
Logger.log(copyRange);
return copyRange;
};
function uniqueDataPaste(paste){ //copypaste data from unique sheet
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var uniqueSheet = sheet.getSheetByName("UNIQUE");
var uniqueRange = uniqueSheet.getRange(1, 1, uniqueSheet.getLastRow(), uniqueSheet.getLastColumn());
uniqueRange.copyTo(paste, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
Logger.log(uniqueRange);
}
function rawDataPaste() { //copypaste data from new dataset sheet
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var dataSetSheet = sheet.getSheetByName(searchSheet());
var pasteSheet = sheet.getSheetByName('DataBlackBox');
var lastRow = sheet.getLastRow();
var paste = pasteSheet.getRange(pasteSheet.getLastRow()+1, 1);
Logger.log(paste);
uniqueDataPaste(paste);
dataSetSheet.getRange("T2:X").copyTo(paste, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
//dataSetSheet.activate();
//SpreadsheetApp.getActiveSpreadsheet().deleteActiveSheet();
};
function bookingPaste() { //copypaste AddBooking sheet data
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var addSheet = sheet.getSheetByName('AddBooking');
var pasteSheet = sheet.getSheetByName('DataBlackBox');
var lastRow = pasteSheet.getLastRow();
var paste = pasteSheet.getRange(pasteSheet.getLastRow()+1, 1);
Logger.log(paste);
uniqueDataPaste(paste);
addSheet.getRange("B5:E20").copyTo(paste, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
function sortDash(){ // sorts dash by date
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DASHBOARD');
sheet.getRange("B5:R");
sheet.sort(2, true);
}
function insertIntoDash(){ // inserts data into dashboard sheet
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var querySheet = sheet.getSheetByName("QUERY");
var dashSheet = sheet.getSheetByName("DASHBOARD");
var queryRange = querySheet.getRange(1, 1, querySheet.getLastRow(), querySheet.getLastColumn());
queryRange.copyTo(dashSheet.getRange(dashSheet.getLastRow()+1, 2), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
Logger.log(queryRange);
//inserts data to DASHBOARD only from QUERY sheet + insert checkboxes
sortDash();
}
function blackboxClearOut(){ //clears out data from DataBlackBox to avoid thousands of rows by updating
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var blackboxSheet = sheet.getSheetByName('DataBlackBox');
var uniqueSheet = sheet.getSheetByName('UNIQUE');
var uniqueCopy = uniqueSheet.getRange(1, 1, uniqueSheet.getLastRow(), uniqueSheet.getLastColumn()-1); // -1 cause there's timeStamp, not in use for now
uniqueCopy.copyTo(uniqueSheet.getRange(1, uniqueSheet.getLastColumn()+1), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
var uniqueStorageRange = uniqueSheet.getRange(1, 6, uniqueSheet.getLastRow(),uniqueSheet.getLastColumn());
blackboxSheet.getRange(1, 1, blackboxSheet.getLastRow(), blackboxSheet.getLastColumn()-2).clearContent(); // -2 cause there's text now
uniqueStorageRange.copyTo(blackboxSheet.getRange(1, 1), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
uniqueStorageRange.clear();
}
function towquestPaste(){
var result;
searchSheet();
rawDataFormatFilter(result);
rawDataPaste();
insertIntoDash();
blackboxClearOut();
}
function addBookingPaste(){
bookingPaste();
insertIntoDash();
blackboxClearOut();
}