Hoe kan ik openstaande posten en bankmutaties downloaden in Google Sheets vanuit Exact Online?

Deze uitleg zal zich nog ontwikkelen. In ieder geval komt een uitleg er bij over de for csv clausule en hoe je willekeurige welke tabel kunt downloaden.

De gegevens vanuit Exact Online importeer je in Google Sheets via de volgende stappen:

  • Registreer een account op Invantive Cloud.
  • Maak een virtuele database op Exact Online.
  • Voeg een applicatie toe met een module.
  • Definieer de query in de module.
  • Kopieer de hyperlink voor de module.
  • Plak de code in Google Sheets.

Onderstaand worden de stappen verder uitgewerkt:

Registreer account en maak virtuele Exact Online database

De stappen voor registratie en een virtuele Exact Online database definieren lees je terug op Verbind Power BI met Exact Online. Volg deze stappen tot “Power BI connector instellen voor Exact Online”.

Voeg applicatie en module toe

Doorloop de volgende stappen:

Definieer query in module

Door de volgende stappen:

De code is:

begin
  cloud_http.set_response_content_type('text/csv');
  cloud_http.set_response_header_value('Content-Disposition', 'attachment; filename="download.csv"');
  for r
  in
  ( select number_attr, invoicedate, outstandingamtdc from AROutstandingItems@eol for csv
  )
  loop
    cloud_http.append_to_response_body_text(r.csv);
  end loop;
end;

Kopieer de hyperlink

Doorloop de volgende stappen:

Direct Laden in Google Sheets

De volgende stap is om de module rechtstreeks in Google Sheets te laten laden via de volgende stappen:

Gebruikte Google Sheets code voor downloaden CSV met Basic Authentication:

//
// This function assumes the CSV has no fields with commas,
// and strips out all the double quotes.
//
// Based upon:
// https://redfin.engineering/when-importdata-isnt-good-enough-retrieving-csv-files-behind-basic-auth-with-a-google-apps-script-6c563f3328c5
//
function parseCsvResponse(csvString) 
{
  var retArray = [];
  var strLines = csvString.split(/n/g);
  var strLineLen = strLines.length;
  for (var i = 0; i < strLineLen; i++) 
  {
    var line = strLines[i];
    if (line != '') 
    {
      retArray.push(line.replace(/"/g, "").split(/,/));
    }
  }
  return retArray;
}

function populateSheetWithCSV(sheetName, csvUrl, user, pw) 
{
  //
  // Request the CSV.
  //
  var resp = UrlFetchApp.fetch
  ( csvUrl
  , {
      headers: 
      {
         // Use basic authentication.
         'Authorization': 'Basic ' + Utilities.base64Encode(user + ':' + pw, Utilities.Charset.UTF_8)
      }
    }
  );
  //
  // Parse the response as a CSV.
  //
  var csvContent = parseCsvResponse(resp.getContentText());
  // Clear everything in the sheet.
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  sheet.clearContents().clearFormats();
  // Set the values in the sheet (as efficiently as we know how).
  sheet.getRange
  ( 1
  , 1
  , csvContent.length /* Rows. */
  , csvContent[0].length /* Columns. */
  )
  .setValues(csvContent)
  ;
}