newmax-utils
Version:
Utils & Libs for Newmax Tech
76 lines (75 loc) • 3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.googleSheets = void 0;
const google_spreadsheet_1 = require("google-spreadsheet");
const googleCreds_1 = require("../configs/googleCreds");
const renameObj_1 = require("../renameObj");
const get = async (spreadsheetId, sheetId = 0) => {
const doc = new google_spreadsheet_1.GoogleSpreadsheet(spreadsheetId, googleCreds_1.auth);
await doc.loadInfo();
return doc.sheetsById[sheetId];
};
const update = async (sheet, data, replaceFromKey) => {
const header = Object.keys(data[0]);
const getMaxColName = Object.keys((0, renameObj_1.renameObjKey)(header)).slice(-1)[0];
const rangeByHeader = `A:${getMaxColName}`;
if (replaceFromKey) {
let rows = [];
let replaceFromRow = 2;
try {
rows = await sheet.getRows();
}
catch (error) {
await sheet.setHeaderRow(header);
}
for (let i = 0; i < rows.length; i++) {
if (`${rows[i].get(replaceFromKey)}` === `${data[0][replaceFromKey]}`) {
replaceFromRow = rows[i]?.rowNumber;
break;
}
replaceFromRow++;
}
const range = `A${replaceFromRow}:${String.fromCharCode(64 + header.length)}`;
await sheet.clear(range);
}
else {
await sheet.clear(rangeByHeader);
await sheet.setHeaderRow(header);
}
await sheet.addRows(data);
};
const append = async (sheet, data) => {
if (!data || data.length === 0) {
console.log('No data to append');
return;
}
// Просто добавляем данные - заголовки создадутся автоматически при первом добавлении
await sheet.addRows(data);
console.log(`✅ Добавлено ${data.length} строк в лист "${sheet.title}"`);
};
const copy = async ({ spreadsheetId, prefix, shareTo, }) => {
const doc = new google_spreadsheet_1.GoogleSpreadsheet(spreadsheetId, googleCreds_1.auth);
await doc.loadInfo();
const newDoc = await google_spreadsheet_1.GoogleSpreadsheet.createNewSpreadsheetDocument(googleCreds_1.auth, {
title: `${doc.title}${prefix ? ' - ' + prefix : ''}`,
});
const sheets = doc.sheetsByIndex;
for (let sheet of sheets) {
const rows = await sheet.getRows();
const headers = sheet.headerValues;
const newSheet = await newDoc.addSheet({ title: sheet.title });
await newSheet.setHeaderRow(headers);
const rowsData = rows.map((row) => headers.map((header) => row.get(header)));
await newSheet.addRows(rowsData);
}
await newDoc.deleteSheet(0);
await Promise.all(shareTo.map(async (item) => await newDoc.share(item)));
const url = `https://docs.google.com/spreadsheets/d/${newDoc.spreadsheetId}/edit`;
return { id: newDoc.spreadsheetId, url };
};
exports.googleSheets = {
get,
update,
append,
copy,
};