Исправљање #РЕФ грешака у Гоогле табелама

Исправљање #РЕФ грешака у Гоогле табелама
Google Apps Script

Разумевање проблема са прилозима Гоогле табела

Када радите са Гоогле табелама, уобичајен задатак је слање података листа као прилога у Екцел-у путем е-поште. Овај процес се може поједноставити коришћењем Гоогле Аппс Сцрипт-а, омогућавајући корисницима да пошаљу више листова у једној е-поруци. Међутим, могу се појавити проблеми, као што је грешка #РЕФ, која обично указује на референтни проблем у подацима који се извозе.

Овај проблем се често манифестује када Гоогле табеле користе сложене формуле попут КУЕРИ(), које се не преводе добро када се листови конвертују у Екцел формат. Грешка нарушава интегритет података у прилогу, што представља значајан изазов за кориснике који се ослањају на ове извозе за извештавање или анализу.

Цомманд Опис
SpreadsheetApp.getActiveSpreadsheet() Добија активну табелу за коју је скрипта везана.
spreadSheet.getSheetByName(sheet).getSheetId() Враћа јединствени идентификатор за лист унутар табеле.
UrlFetchApp.fetch(url, params) Прави захтев на одређену УРЛ адресу користећи различите параметре за управљање ХТТП захтевом.
Utilities.sleep(milliseconds) Паузира извршавање скрипте на одређени број милисекунди да би спречио достизање ограничења брзине АПИ-ја.
ScriptApp.getOAuthToken() Преузима ОАутх 2.0 токен за тренутног корисника ради провере аутентичности захтева.
getBlob() Добија податке датотеке преузете са УРЛ адресе као блоб, који се користи за прилагање датотека у е-поруке.

Објашњење функционалности скрипте

Достављена скрипта је дизајнирана да аутоматизује процес слања више Гоогле табела као Екцел прилога у једној е-поруци. Почиње декларисањем низа имена листова намењених за извоз. Скрипта преузима активну табелу и понавља низ имена листова да би генерисала УРЛ-ове за преузимање за сваки лист. Ове УРЛ адресе су посебно форматиране за извоз листова као Екцел датотека. Употреба 'Утилитиес.слееп(10000);' овде је кључно увести кашњење између захтева за преузимање, помажући да се управља оптерећењем на Гоогле-овим серверима и спречи да скрипта достигне ограничења брзине.

Свака УРЛ адреса преузима одговарајући лист као блоб, који се затим именује према унапред дефинисаном низу имена датотека. Овај корак је критичан јер конвертује податке са листова у формат погодан за прилоге е-поште. Након припреме свих блоб-ова датотека, скрипта конструише објекат е-поште са назначеним примаоцима, линијом предмета и телом поруке. Блобови су приложени овој е-поруци, која се затим шаље помоћу 'МаилАпп.сендЕмаил(мессаге);' команда. Ова функција је део МаилАпп услуге Гоогле Аппс Сцрипт, омогућавајући скриптама да шаљу е-поруке, позивнице и обавештења.

Решавање грешака Гоогле табеле #РЕФ при извозу

Решење за Гоогле Аппс Сцрипт

function sendExcelAttachmentsInOneEmail() {
  var sheets = ['OH INV - B2B', 'OH INV - Acc', 'OH INV - B2C', 'B2B', 'ACC', 'B2C'];
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadSheetId = spreadSheet.getId();
  var urls = sheets.map(sheet => {
    var sheetId = spreadSheet.getSheetByName(sheet).getSheetId();
    return \`https://docs.google.com/spreadsheets/d/${spreadSheetId}/export?format=xlsx&gid=${sheetId}\`;
  });
  var reportName = spreadSheet.getSheetByName('IMEIS').getRange(1, 14).getValue();
  var params = {
    method: 'GET',
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true
  };
  var fileNames = ['OH INV - B2B.xlsx', 'OH INV - Acc.xlsx', 'OH INV - B2C.xlsx', 'B2B.xlsx', 'ACC.xlsx', 'B2C.xlsx'];
  var blobs = urls.map((url, index) => {
    Utilities.sleep(10000);  // Delay added to avoid hitting rate limits
    var response = UrlFetchApp.fetch(url, params);
    return response.getBlob().setName(fileNames[index]);
  });
  var message = {
    to: 'email@domain.com',
    cc: 'email@domain.com',
    subject: 'Combined REPORTS - ' + reportName,
    body: "Hi Team,\n\nPlease find attached Reports.\n\nBest Regards!",
    attachments: blobs
  }
  MailApp.sendEmail(message);
}

Напредни увид у проблеме са извозом Гоогле табела

Извоз података из Гоогле табела у Екцел формате помоћу скрипти може открити сложеност у управљању подацима, посебно када се користе напредне функције као што је КУЕРИ(). Грешка #РЕФ која се јавља у таквим извозима обично указује на нерешене референце у оквиру Екцел окружења, које се не јављају у самим Гоогле табелама. Ова разлика често настаје зато што неке од функционалности у Гоогле табелама, као што су одређене КУЕРИ() операције или прилагођене скрипте, нису подржане или се понашају другачије у Екцел-у.

Ово питање наглашава важност обезбеђивања компатибилности између формула Гоогле табела и Екцеловог руковања формулама и упитима за податке. Програмери често морају да имплементирају додатне провере или алтернативне методе како би осигурали интегритет података када прелазе из Гоогле-овог окружења у Мицрософт-ово, посебно када аутоматизују процесе као што су прилози података у табели у е-пошти.

Уобичајени упити за скриптовање Гоогле табела

  1. питање: Зашто се грешка #РЕФ појављује при извозу из Гоогле табела у Екцел?
  2. Одговор: Грешка #РЕФ обично се јавља зато што одређене референце или формуле у Гоогле табелама нису препознате или су некомпатибилне са окружењем за формуле Екцел.
  3. питање: Како могу да спречим достизање ограничења брзине помоћу Гоогле Аппс скрипти?
  4. Одговор: Примена пауза у скрипту помоћу Утилитиес.слееп(милисекунде) може помоћи у управљању учесталошћу захтева и избегавању прекорачења Гоогле-ових ограничења брзине.
  5. питање: Шта мутеХттпЕкцептионс ради у позиву преузимања УРЛ адресе?
  6. Одговор: Омогућава скрипти да настави са извршавањем без избацивања изузетка ако ХТТП захтев не успе, што је корисно за елегантно управљање грешкама.
  7. питање: Могу ли да прилагодим назив датотеке сваког листа приликом извоза у Екцел?
  8. Одговор: Да, можете да подесите прилагођена имена за сваку блоб конвертовану са листа пре него што их приложите е-поруци, као што је приказано у скрипти.
  9. питање: Постоји ли начин да директно извезете Гоогле табеле у Екцел без средњих скрипти?
  10. Одговор: Да, можете ручно да преузмете Гоогле табелу у Екцел формату директно из менија Датотека у Гоогле табелама, али аутоматизација овога захтева скриптовање.

Коначни увид у изазове извоза листова

Кроз ово истраживање постаје очигледно да иако Гоогле Аппс Сцрипт пружа моћне алате за аутоматизацију и побољшање функционалности Гоогле табела, одређене сложености настају приликом повезивања са различитим платформама као што је Екцел. #РЕФ грешке су уобичајена замка, посебно када се ради о сложеним упитима и референцама података који се не преводе добро изван Гоогле-овог екосистема. Разумевање ових ограничења и њихово планирање у скриптама може значајно да смањи појаву таквих проблема, што доводи до лакшег процеса управљања подацима.