function updateLogSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var payrollSheet = ss.getSheetByName("Payroll");
var logSheet = ss.getSheetByName("Log");
// Get the Emp.code from A1 of the Payroll sheet
var empCode = payrollSheet.getRange("A1").getValue();
// Get the values in the Date list from A3:A of the Payroll sheet
var logIds = payrollSheet.getRange("A3:A").getValues().flat().filter(Boolean);
var logValues = logSheet.getRange("A2:AH").getValues();
logValues = logValues.filter(function (x) {
return !(x.every(element => element === (undefined || null || '')))
});
for (var i = 0; i < logValues.length; i++) {
for (var j = 0; j < logIds.length; j++) {
if (logIds[j] === logValues[i][0]) {
var payrollIndex = j + 3;
if (logValues[i][2] == empCode && payrollIndex !== -1) {
var rowIndex = i + 2; // Add 2 because the range starts at A2
if (rowIndex != -1) {
// Update the cells in the Log sheet
logSheet.getRange(rowIndex, 2).setValue(payrollSheet.getRange("B" + payrollIndex).getValue()); // Date
logSheet.getRange(rowIndex, 28).setValue(payrollSheet.getRange("AB" + payrollIndex).getValue()); // + symbol
logSheet.getRange(rowIndex, 31).setValue(payrollSheet.getRange("AE" + payrollIndex).getValue()); // empty
logSheet.getRange(rowIndex, 34).setValue(payrollSheet.getRange("AH" + payrollIndex).getValue()); // Manual Hrs Adjust
logSheet.getRange(rowIndex, 7).setValue(payrollSheet.getRange("G" + payrollIndex).getValue()); // 1st ClockIN TIME
logSheet.getRange(rowIndex, 8).setValue(payrollSheet.getRange("H" + payrollIndex).getValue()); // 1-IN-Loc
logSheet.getRange(rowIndex, 9).setValue(payrollSheet.getRange("I" + payrollIndex).getValue()); // 1-Activity
logSheet.getRange(rowIndex, 11).setValue(payrollSheet.getRange("J" + payrollIndex).getValue()); // 1-Project
logSheet.getRange(rowIndex, 13).setValue(payrollSheet.getRange("K" + payrollIndex).getValue()); // 1-Note
logSheet.getRange(rowIndex, 23).setValue(payrollSheet.getRange("L" + payrollIndex).getValue()); // 2-IN-TIME
logSheet.getRange(rowIndex, 24).setValue(payrollSheet.getRange("M" + payrollIndex).getValue()); // 2-IN-Loc
logSheet.getRange(rowIndex, 25).setValue(payrollSheet.getRange("N" + payrollIndex).getValue()); // 2-Activity
logSheet.getRange(rowIndex, 27).setValue(payrollSheet.getRange("O" + payrollIndex).getValue()); // 2-Project
logSheet.getRange(rowIndex, 29).setValue(payrollSheet.getRange("P" + payrollIndex).getValue()); // 2-Note
logSheet.getRange(rowIndex, 38).setValue(payrollSheet.getRange("Q" + payrollIndex).getValue()); // 3-IN-TIME
logSheet.getRange(rowIndex, 40).setValue(payrollSheet.getRange("R" + payrollIndex).getValue()); // 3-IN-Loc
logSheet.getRange(rowIndex, 41).setValue(payrollSheet.getRange("S" + payrollIndex).getValue()); // 3-Activity
logSheet.getRange(rowIndex, 43).setValue(payrollSheet.getRange("T" + payrollIndex).getValue()); // 3-Project
logSheet.getRange(rowIndex, 44).setValue(payrollSheet.getRange("U" + payrollIndex).getValue()); // 3-Note
logSheet.getRange(rowIndex, 15).setValue(payrollSheet.getRange("V" + payrollIndex).getValue()); // 1-OUT-TIME
logSheet.getRange(rowIndex, 16).setValue(payrollSheet.getRange("W" + payrollIndex).getValue()); // 1-OUT-Loc
logSheet.getRange(rowIndex, 17).setValue(payrollSheet.getRange("X" + payrollIndex).getValue()); // 1-OUT-Activity
logSheet.getRange(rowIndex, 21).setValue(payrollSheet.getRange("Y" + payrollIndex).getValue()); // 1-OUT-Note
logSheet.getRange(rowIndex, 31).setValue(payrollSheet.getRange("Z" + payrollIndex).getValue()); // 2-OUT-TIME
logSheet.getRange(rowIndex, 32).setValue(payrollSheet.getRange("AA" + payrollIndex).getValue()); // 2-OUT-Loc
logSheet.getRange(rowIndex, 33).setValue(payrollSheet.getRange("AB" + payrollIndex).getValue()); // 2-OUT-Activity
logSheet.getRange(rowIndex, 37).setValue(payrollSheet.getRange("AC" + payrollIndex).getValue()); // 2-OUT-Note
logSheet.getRange(rowIndex, 47).setValue(payrollSheet.getRange("AD" + payrollIndex).getValue()); // 3-OUT-TIME
logSheet.getRange(rowIndex, 48).setValue(payrollSheet.getRange("AE" + payrollIndex).getValue()); // 3-OUT-Loc
logSheet.getRange(rowIndex, 49).setValue(payrollSheet.getRange("AF" + payrollIndex).getValue()); // 3-OUT-Activity
logSheet.getRange(rowIndex, 53).setValue(payrollSheet.getRange("AG" + payrollIndex).getValue()); // 3-OUT-Note
}
}
payrollIndex = -1;
break;
}
}
}
}
Прикрепленная ссылка и изображение образца листа для справки
https://docs.google.com/spreadsheets/d/1UiwpNM2S0aeo4QinbEi-NqyPkGFVoZobqareeAOCsHs/edit?usp=sharing
это точные столбцы, которые нужно обновить
Заработная плата в журнал
Б к Б
от г до г
я к Дж
от J до К
от К до М
слева направо
от М до Х
от Н до Я
от О до АА
P к переменному току
Q в AL
Р в АН
от S до АО
Т в АК
от U до AS
от В до О
от W до P
от Х до Q
от Y до U
от Z до АЕ
АА в АФ
от АБ до АГ
АК в АК
из AD в Австралию
АЭ в АВ
АФ в АВ
АГ в БА
Спасибо :)
Спасибо :) работает точно с требованиями 👍👍👍
И это также быстро. Спасибо :)
Но одна вещь, которая не соответствует идентификационному коду Payroll (A3: A) = Log (A2: A), затем обновите значение с помощью указанной строки идентификатора.
👍 В строке const obj = srcValues.reduce((o, e) => (o[e[0]] = e, o), {}); создает объект (obj), где ключами являются значения в первом столбце массива srcValues (который исходит из листа заработной платы), а значения представляют собой целые строки.
Что касается вашего нового выпуска In the line const obj = srcValues.reduce((o, e) => (o[e[0]] = e, o), {});, it creates an object (obj) where the keys are the values in the first column of the srcValues array (which comes from the Payroll sheet), and the values are the entire rows.
, я должен извиниться за свое плохое знание английского языка. К сожалению, я не могу понять вашу новую проблему. Но, я хотел бы поддержать вас. Итак, могу я спросить вас о деталях вашего нового выпуска? Под этим я хотел бы попытаться понять это.
Спасибо за вопрос. Просто хочу знать, что данный модифицированный скрипт проверяет, совпадает ли платежная ведомость (A3:A) с журналом (A2:A).
Спасибо за ответ. Насчет Just want to know, that the given modified script checks whether the payroll (A3:A) matches with Log (A2:A).
, в предложенном мною скрипте проверяется столбец "А" обоих листов. И лист «Журнал» обновляется путем проверки того же значения столбца «А». Если я неправильно понял ваш ответ, прошу прощения.
Я считаю, что ваша цель заключается в следующем.
В таком случае, как насчет следующей модификации?
function sample() {
// Ref: https://tanaikech.github.io/2022/07/04/converting-a1notation-to-gridrange-and-vice-versa-using-google-apps-script-without-any-scopes/
const columnLetterToIndex_ = letter => [...letter.toUpperCase()].reduce((c, e, i, a) => (c += (e.charCodeAt(0) - 64) * Math.pow(26, a.length - i - 1)), -1);
// These values are from your question.
const conversion = [["B", "B"], ["G", "G"], ["I", "J"], ["J", "K"], ["K", "M"], ["L", "W"], ["M", "X"], ["N", "Y"], ["O", "AA"], ["P", "AC"], ["Q", "AL"], ["R", "AN"], ["S", "AO"], ["T", "AQ"], ["U", "AS"], ["V", "O"], ["W", "P"], ["X", "Q"], ["Y", "U"], ["Z", "AE"], ["AA", "AF"], ["AB", "AG"], ["AC", "AK"], ["AD", "AU"], ["AE", "AV"], ["AF", "AW"], ["AG", "BA"]];
const converted = conversion.map(e => e.map(f => columnLetterToIndex_(f)));
const ss = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = ss.getSheetByName("Payroll");
const dstSheet = ss.getSheetByName("Log");
const srcValues = srcSheet.getRange("A3:AG" + srcSheet.getLastRow()).getValues();
const obj = srcValues.reduce((o, e) => (o[e[0]] = e, o), {});
const dstRange = dstSheet.getRange("A2:BA" + dstSheet.getLastRow());
const values = dstRange.getValues().map(e => {
const ar = obj[e[0]];
if (ar) {
converted.forEach(([a, b]) => e[b] = ar[a] || null);
}
return e;
});
dstRange.setValues(values);
}
conversion
взяты из вашего вопроса. Если вы хотите изменить это, измените значения.
Хотя я не уверен, правильно ли я понял ваш ожидаемый результат, я предложил модифицированный скрипт в качестве ответа. Пожалуйста, подтвердите это. Если я неправильно понял ваш ожидаемый результат, приношу свои извинения.