NodeJS node js googlesheets

Kecer

Участник
Автор темы
241
11
Приветствую, использую библиотеку google-spreadsheet для node js, у меня есть таблица с Именами и к этим именам привязан возраст и город проживания.
Как я могу реализовать такую функцию что бы условно говоря я искал по столбцу Name определённого пользователя и мог изменить у этого пользователя допустим возраст, или город
Вот таблица
1696001550607.png


Был очень благодарен за помощь!
 
Решение
Есть, дело в том что тут нету массива в общем, то-есть обычным find обойтись нельзя, смори у меня есть код такой

JavaScript:
    const doc = new GoogleSpreadsheet('Код доступа', serviceAccountAuth);
    await doc.loadInfo(); // loads document properties and worksheets
    const sheet = doc.sheetsByIndex[0];
    const rows = await sheet.getRows(); // preload
    await sheet.loadCells('A1:'+String.fromCharCode(65+sheet.columnCount-1)+rows.length+1); // подгружаем все нужные ячейки( ascii - код буквы "А" + количество столбцов - подгружаем к примеру от A1 до C8)
    for(let i=0; i < sheet.columnCount; i++) // идём по первой строке
    {
        if(sheet.getCell(0, i).value == keyValue) // нашли нужный столбец(с именем)
        {...

Kecer

Участник
Автор темы
241
11
ну примерно так
JavaScript:
const rows = await sheet.getRows();
const userRow = rows.find(row => row.Name === 'Alex');
userRow.Age = 200;
userRow.Country = 'Muhosransk';
await userRow.save();
const userRow = rows.find(row => row.Name === 'Alex');

Ничо не находит, undefined
 

Kecer

Участник
Автор темы
241
11
у тебя таблица то есть? в переменную sheet ее запиши
Есть, дело в том что тут нету массива в общем, то-есть обычным find обойтись нельзя, смори у меня есть код такой

JavaScript:
    const doc = new GoogleSpreadsheet('Код доступа', serviceAccountAuth);
    await doc.loadInfo(); // loads document properties and worksheets
    const sheet = doc.sheetsByIndex[0];
    const rows = await sheet.getRows(); // preload
    await sheet.loadCells('A1:'+String.fromCharCode(65+sheet.columnCount-1)+rows.length+1); // подгружаем все нужные ячейки( ascii - код буквы "А" + количество столбцов - подгружаем к примеру от A1 до C8)
    for(let i=0; i < sheet.columnCount; i++) // идём по первой строке
    {
        if(sheet.getCell(0, i).value == keyValue) // нашли нужный столбец(с именем)
        {
            for(let j = 1; j < rows.length+1; j++) { // идём по всем значениям
                let cell = sheet.getCell(j, i); // получаем ячейку
                if(cell.value == oldValue) // если имя совпало
                {
                    sheet.getCell(j, i+9).value = newValue // меняем пост на новый
                    cell.save(); // сохраняем изменение
                    return; // умываем руки
                }
            }
        }
    }

Он идеально работал до обновы либы, но сейчас мне выдаётся следующия ошибка:
Error: At least one cell must have something to update
 

MrDorlik

Известный
977
392
Есть, дело в том что тут нету массива в общем, то-есть обычным find обойтись нельзя, смори у меня есть код такой

JavaScript:
    const doc = new GoogleSpreadsheet('Код доступа', serviceAccountAuth);
    await doc.loadInfo(); // loads document properties and worksheets
    const sheet = doc.sheetsByIndex[0];
    const rows = await sheet.getRows(); // preload
    await sheet.loadCells('A1:'+String.fromCharCode(65+sheet.columnCount-1)+rows.length+1); // подгружаем все нужные ячейки( ascii - код буквы "А" + количество столбцов - подгружаем к примеру от A1 до C8)
    for(let i=0; i < sheet.columnCount; i++) // идём по первой строке
    {
        if(sheet.getCell(0, i).value == keyValue) // нашли нужный столбец(с именем)
        {
            for(let j = 1; j < rows.length+1; j++) { // идём по всем значениям
                let cell = sheet.getCell(j, i); // получаем ячейку
                if(cell.value == oldValue) // если имя совпало
                {
                    sheet.getCell(j, i+9).value = newValue // меняем пост на новый
                    cell.save(); // сохраняем изменение
                    return; // умываем руки
                }
            }
        }
    }

Он идеально работал до обновы либы, но сейчас мне выдаётся следующия ошибка:
Error: At least one cell must have something to update
вместо 15 строки попробуй
JavaScript:
sheet.saveUpdatedCells([cell]);