UNPKG

newmax-utils

Version:
76 lines (75 loc) 3 kB
"use strict"; 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, };