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:

  • Ga naar “Applicaties” (1).
  • En kies “Nieuw” (2).
    Voeg applicatie toe
  • Voer de applicatienaam “Download Google Sheets” in (3).
  • Kies “Opslaan” (4).
    Applicatie Download Google Sheets
  • Kies “Modules” (5).
    Ga naar Modules
  • Voeg een module toe via “Nieuw” (6).
    Nieuwe module

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:

  • Klik bij de applicatie op “Uitvoeren” (12).
    Applicatie uitvoeren
  • Kies de geregistreerde database (13).
  • Kies “Uitvoeren” (14).
    Applicatie uitvoeren
  • Het standaard modulemenu verschijnt.
  • De module kan uitgevoerd worden (15).
  • Maar bewaar eerst de link om de module los uit te voeren tegen de database (16).
  • Bij direct uitvoeren verschijnt na enkele seconden een CSV in de downloadbalk voor alle gekozen Exact Online administraties (17).
    CSV Open Verkoopfacturen
  • De hyperlink van stap (16) kan ook in de browser uitgevoerd worden (18) met dezelfde CSV als resultaat (19).

Direct Laden in Google Sheets

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

  • Start Google Sheets.
  • Kies “Extra” (1) en dan “Apps Script” (voorheen: “Script Editor”) (2).
    Google Sheets Script Editor
  • Plak de onderstaande code in de Apps Script Editor (3).
  • Kies “Opslaan” (4).
  • Voeg het werkblad “Data” toe aan het spreadsheet (5).
  • Voeg de URL toe (6).
  • Voeg de Cloud gebruikersnaam toe (7).
  • Voeg het Cloud wachtwoord toe (8).
  • Voeg tenslotte de formule toe om de gegevens te downloaden (9): =populateSheetWithCSV("Data", celurl, celgebruiker, celwachtwoord).
    Laad Exact Online gegevens in Google Sheets
  • De data verschijnt in het werkblad “Data”.
  • Als de formule ververst, wordt de data ook bijgewerkt volgens de cache instellingen op de database in Invantive Cloud.

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)
  ;
}