Google script автоматическое приписание "id"
Доброе утро, Это мой код, который должен обновлять и синхронизировать данные между 3 листами Google. каким-то образом он также добавляет атрибут «ID» в столбец «B» на листах. Моя проблема в том, что я не могу найти, какой элемент это делает
const accountant = {
'id': '1XkqS-Z1AvywD6WAws6eLNAf902Xdyts_DRWuN--3nYg',
'sheetWork': 'Zaliczka',
'sheetSystem': '? System'
}
function onOpenTrigger (e) { // Пример скрипта onOpen
let ui = SpreadsheetApp.getUi()
ui.createMenu('? System')
.addItem('Sprawdzenie synhronizacji', 'updateSelectRows')
.addToUi()
}
function onEditTrigger (e) {
let sheet = e.source.getActiveSheet(),
sheetName = sheet.getName(),
range = e.range,
row = range.getRow(),
column = range.getColumn(),
value = range.getValue(),
oldValue = e.oldValue,
ui = SpreadsheetApp.getUi()
if(/Koordynator/.test(sheetName)){
if(row > 3){
const namesSpecialColumnsConnect = ['Stawka netto']
const headColumnCheck = sheet.getRange(2, column).getValue()
if(headColumnCheck === 'Connect'){
const headColumn = sheet.getRange(3, column).getValue()
const headRow = sheet.getRange(row, 2).getValue()
const sheetAccountant = SpreadsheetApp.openById(accountant['id']).getSheetByName(accountant['sheetWork'])
const dataAccountant = sheetAccountant.getRange(1, 1, sheetAccountant.getLastRow(), sheetAccountant.getLastColumn()).getValues()
if(column === 3 && headRow === '' && value !== ''){
const sheetSystem = SpreadsheetApp.openById(accountant['id']).getSheetByName(accountant['sheetSystem'])
const headRow = sheetSystem.getRange(2, 1).getValue()
sheetSystem.getRange(2, 1).setValue(headRow+1)
sheet.getRange(row, 2).setValue(String(headRow))
const length = sheetAccountant.getRange(4, 1, sheetAccountant.getLastRow()).getValues().filter(row => row[0] !== '').length
sheetAccountant.getRange(length+4, 1, 1, 2).setValues([[String(headRow), value]])
sheetAccountant.getRange(length+4, 5).setValue(sheetName)
} else if(column === 2 && value === '' && oldValue !== undefined){
const headOfSheetAccountant = dataAccountant[2]
const numberRowsOfSheetAccountant = dataAccountant.map(row => String(row[0]))
const targetRow = numberRowsOfSheetAccountant.indexOf(String(oldValue))+1
if(targetRow > 0){
try{sheetAccountant.deleteRow(targetRow)} catch(e) {ui.alert(e)}
}
sheet.deleteRow(row)
} else if (column > 2 && namesSpecialColumnsConnect.indexOf(headColumn) === -1){
const headOfSheetAccountant = dataAccountant[2]
const targetColumn = headOfSheetAccountant.indexOf(headColumn)+1
const numberRowsOfSheetAccountant = dataAccountant.map(row => row[0])
const targetRow = numberRowsOfSheetAccountant.indexOf(headRow)+1
try{sheetAccountant.getRange(targetRow, targetColumn).setValue(value)} catch(e) {ui.alert(e)}
} else if (headColumn === 'Stawka netto' && value !== '') {
const numberRowsOfSheetAccountant = dataAccountant.map(row => row[0])
const targetRow = numberRowsOfSheetAccountant.indexOf(headRow)+1
const headOfSheetAccountant = dataAccountant[2]
let targetColumn = headOfSheetAccountant.indexOf(headColumn)+1 // Ищем индекс колонки ставка нетто
try{sheetAccountant.getRange(targetRow, targetColumn).setValue(value)} catch(e) {ui.alert(e)} // вставляем значение ставки нетто
targetColumn = headOfSheetAccountant.indexOf('Stawka brutto')+1 // Ищем индекс колонки ставка брутто
const stavkaBrutto = sheetAccountant.getRange(targetRow, targetColumn).getValue() // берем значение ставки брутто
targetColumn = headOfSheetAccountant.indexOf('Roznica stawek')+1 // Ищем индекс колонки розницы ставок
const roznicaStawek = stavkaBrutto - value - 1
try{sheetAccountant.getRange(targetRow, targetColumn).setValue(roznicaStawek < 0 ? 0 : roznicaStawek)} catch(e) {ui.alert(e)} // вставляем значение розницы ставок
const headOfSheetKoordinator = sheet.getRange(3, 1, 1, sheet.getLastColumn()).getValues()[0]
targetColumn = headOfSheetKoordinator.indexOf('Roznica stawek')+1 // Ищем индекс колонки розницы ставок
sheet.getRange(row, targetColumn).setValue(roznicaStawek < 0 ? 0 : roznicaStawek) // вставляем значение розницы ставок
}
}
}
}
}
function updateSelectRows () {
const spreadsheet = SpreadsheetApp.getActiveSheet()
const sheetName = spreadsheet.getName()
const ui = SpreadsheetApp.getUi()
if (/Koordynator/.test(sheetName)) {
const headColumns1 = spreadsheet.getRange(2, 1, 1, spreadsheet.getLastColumn()).getValues()[0]
const headColumns2 = spreadsheet.getRange(3, 1, 1, spreadsheet.getLastColumn()).getValues()[0]
const dataFrom = spreadsheet.getRange(4, 1, spreadsheet.getLastRow()-3, spreadsheet.getLastColumn()).getValues().filter(row => row[0] === true)
if (dataFrom.length > 0) {
const sheetAccountant = SpreadsheetApp.openById(accountant['id']).getSheetByName(accountant['sheetWork'])
let dataTo = sheetAccountant.getRange(1, 1, sheetAccountant.getLastRow(), sheetAccountant.getLastColumn()).getValues()
let columnNamesTo = sheetAccountant.getRange(3, 1, 1, sheetAccountant.getLastColumn()).getValues()[0]
let rowsNamesTo = sheetAccountant.getRange(1, 1, sheetAccountant.getLastRow()).getValues().map(row => row[0])
for (let i in dataFrom) {
let dataRow = dataFrom[i]
for (let j in headColumns1) {
if (headColumns1[j] === 'Connect') { // Нужно ли синхронизировать данную колонку
let columnName = headColumns2[j]
let columnIndex = columnNamesTo.indexOf(columnName)
if (columnIndex !== -1) { // Есть ли такая колонка в таблице координатора
let rowName = dataRow[1]
let rowIndex = rowsNamesTo.indexOf(rowName)
if (rowIndex !== -1) { // Есть ли такая строка в таблице координатора
let valueFrom = dataRow[j]
let valueTo = dataTo[rowIndex][columnIndex]
if (valueFrom !== valueTo) { // Нужно ли обновлять значение
sheetAccountant.getRange(rowIndex+1, columnIndex+1).setValue(valueFrom)
}
} else {
let lastRow = sheetAccountant.getRange(4, 1, sheetAccountant.getLastRow()-3).getValues().filter(row => row[0] !== '').length + 4
sheetAccountant.getRange(lastRow, 1).setValue(rowName)
dataTo = sheetAccountant.getRange(1, 1, sheetAccountant.getLastRow(), sheetAccountant.getLastColumn()).getValues()
rowsNamesTo = sheetAccountant.getRange(1, 1, sheetAccountant.getLastRow()).getValues().map(row => row[0])
}
}
}
}
}
spreadsheet.getRange(4, 1, spreadsheet.getLastRow()-4).setValue(false)
} else {
ui.alert('You have not chosen anything!')
}
}
}
У меня есть лист под названием, например, «лист 1» и лист «лист 2». на первом листе у меня есть столбец A, который называется ID во втором листе есть такой же столбец «ID», но в данном случае это B Часть этого кода автоматически вводит номер «ID» в указанную ячейку после заполнения ячейки столбца B на листе 1 или столбца C на листе 2.