Загрузка данных
function syncAprilNotesByFormula() {
var sourceId = "17mN1jx47wznx5s7COtEPZ4qCvShqLvTvRjO3iSTRILQ"; // Таблица 1
var targetSS = SpreadsheetApp.getActiveSpreadsheet(); // Таблица 2
var sourceSheets = SpreadsheetApp.openById(sourceId).getSheets();
var notesMap = {};
// --- 1. Сбор примечаний из Таблицы 1
for (var s = 0; s < sourceSheets.length; s++) {
var sourceSheet = sourceSheets[s];
if (sourceSheet.isSheetHidden()) continue;
var sourceData = sourceSheet.getDataRange().getValues();
if (sourceSheet.getLastRow() < 2) continue;
var formulas = sourceSheet
.getRange(2, 2, sourceSheet.getLastRow() - 1, 1)
.getFormulas(); // колонка B
for (var r = 1; r < sourceData.length; r++) {
var rawName = sourceData[r][0];
if (!rawName) continue;
var cleanName = String(rawName).replace(/\(.*?\)/g, "").trim();
// Уже нашли для этого сотрудника
if (notesMap[cleanName]) continue;
var noteText = sourceData[r][2];
var formula = formulas[r - 1][0];
// Формула в этой строке
if (formula && formula.includes("07.26")) {
notesMap[cleanName] = noteText;
continue;
}
// Ищем ниже среди строк без ФИО
for (var k = r + 1; k < sourceData.length; k++) {
if (sourceData[k][0]) break;
var nextFormula = formulas[k - 1][0];
if (nextFormula && nextFormula.includes("07.26")) {
notesMap[cleanName] = sourceData[k][2];
break;
}
}
}
}
Logger.log("Собрано " + Object.keys(notesMap).length + " сотрудников.");
// --- 2. Обновляем Таблицу 2
targetSS.getSheets().forEach(function(sheet) {
if (sheet.isSheetHidden()) return;
var lastRow = sheet.getLastRow();
var lastCol = sheet.getLastColumn();
if (lastRow < 4) return;
var data = sheet.getRange(1, 1, lastRow, lastCol).getValues();
// Ищем столбцы ФИО
var fioCols = [];
var headerRow2 = data[1];
for (var c = 0; c < headerRow2.length; c++) {
if (String(headerRow2[c]).toLowerCase().includes("количество проверенных")) {
fioCols.push(c);
}
}
if (fioCols.length === 0) return;
// Ищем только столбцы "07.26"
var targetCols = [];
var headerRow3 = data[2];
for (var c = 0; c < headerRow3.length; c++) {
var header = String(headerRow3[c]).trim().toLowerCase();
if (header === "07.26") {
targetCols.push(c);
}
}
if (targetCols.length === 0) return;
// Читаем все примечания
var notesRange = sheet.getRange(4, 1, lastRow - 3, lastCol);
var notesValues = notesRange.getNotes();
// Очищаем только столбцы 07.26
targetCols.forEach(function(col) {
for (var r = 0; r < notesValues.length; r++) {
notesValues[r][col] = "";
}
});
// Заполняем примечания
for (var r = 3; r < data.length; r++) {
for (var f = 0; f < fioCols.length; f++) {
var fioCol = fioCols[f];
var rawName = data[r][fioCol];
if (!rawName) continue;
var cleanName = String(rawName).replace(/\(.*?\)/g, "").trim();
if (!notesMap[cleanName]) continue;
var noteText = notesMap[cleanName];
// Ищем ближайший столбец "07.26" справа
for (var i = 0; i < targetCols.length; i++) {
if (targetCols[i] >= fioCol) {
notesValues[r - 3][targetCols[i]] = noteText;
break;
}
}
}
}
// Записываем примечания
notesRange.setNotes(notesValues);
});
Logger.log("Импорт примечаний для 07.26 завершён ✅");
}