• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Gegevens uit dagelijkse email inlezen

  • Onderwerp starter Onderwerp starter Haije
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Haije

Terugkerende gebruiker
Lid geworden
24 mrt 2009
Berichten
4.423
Besturingssysteem
Windows 11
Office versie
Office 2016 Professional Plus en Office 2010 Home & Student
Hallo helpers,

elke dag krijg ik een mail waarin aangegeven hoeveel stroom er opgewekt is met mijn zonnepanelen (zie bijlage voor de inhoud)

Wat ik me afvraag is of ik deze bestanden kan laten inlezen in een Excelsheet en zo ja, hoe.

dagelijks rapport - Outlook.png
 
Het kan met VBA maar het kan ook met Power Query (from microsoft Exchange)
 
Laatst bewerkt:
@JVeer

ik lees regelmatig over PowerQuery, maar heb het zelf nog niet gebruikt.
Zou je stap voor stap kunnen beschrijven hoe ik dat aanpak?

Ik maak gebruik van Office 2016 Pro Plus
 
Laatst bewerkt:
Get Data --> from other sources --> from microsoft Exchange --> vul daar je email in --> daarna vermoedelijk inloggen.

Nu krijg je inzicht in al je mail. Kies een database en ga naar transform data.
Je kunt nu filteren op Daily Generation Info in je mail subject.
 
Dankje, ik ga het proberen.
 
Krijg je deze gegevens niet via een website binnen ?
 
Als het een Body tekst is kun je deze ook runnen. Zet alles onder elkaar in kolom A1

Code:
Sub jec()
 Dim ar() As Variant, it As Variant, objFilter As String, x As Long
 objFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%Daily Generation Info%'"
 
 For Each it In CreateObject("outlook.application").getnamespace("mapi").getdefaultfolder(6).Items.Restrict(objFilter)
    ReDim Preserve ar(x)
    ar(x) = it.body
    x = x + 1
 Next
 
 Sheets(1).Cells(1, 1).Resize(x) = Application.Transpose(ar)
End Sub
 
@JVeer,

ik stuit op deze melding:
Foutmelding - Excel.png

De mail komt binnen op een gmail.com adres
 
Die melding ken ik helaas niet. Werkt de macro wel bij je?
 
Dan maar even vanaf de basis.
Werkt deze code ?

Code:
Sub M_snb()
 For Each it In CreateObject("outlook.application").getnamespace("mapi").getdefaultfolder(6).Items
   msgbox it.body
 Next
End Sub
 
Dit werkt in die zin dat er gegevens getoond worden uit een binnengekomen mail.
 
Wat is je gewenste output? De bodytekst in een cel?
 
wat ik uiteindelijk wil is de volgende gegevens, elk in een cel, maar allemaal op dezelfde regel:
datum
hoeveelheid gegenereerde stroom op datum
maandtotaal van gegenereerde stroom
totaal gegenereerde stroom
CO2 reductie
 
Dit zou moeten werken, bij mij wel in ieder geval

Code:
Sub jec()
 Dim ar() As Variant, sp as Variant, it As Variant, objFilter As String, x As Long, j As Long
 ReDim ar(4, 0)
 objFilter = "Daily Generation"
 
 For Each it In CreateObject("outlook.application").getnamespace("mapi").getdefaultfolder(6).Items.Restrict("[Subject]='" & objFilter & "'")
   If it.Subject = "Daily Generation Info" Then
      ReDim Preserve ar(4, 4 * (x + 1))
      sp = Application.Index(Filter(Split(it.body, vbLf), ":"), Array(10, 3, 4, 5, 8))
      For j = 1 To 5
        ar(j - 1, x) = Application.Trim(Split(sp(j), ":")(1))
      Next
      x = x + 1
   End If
 Next
 
 Sheets(1).Cells(2, 1).Resize(x, 5) = Application.Transpose(ar)
End Sub
 
De gegevens die ik zie mbv de code van @snb zijn van een hotmail-account.
De gegevens die ik zoek worden gestuurd naar een gmail-account dat ik in Outlook beheer

Is daar nog iets anders voor nodig?
 
Heb ook een API link

Ik heb ook nog een API link, maar weet niet wat daar mee aan te vangen
 
Dan is jouw hoofdaccount blijkbaar een hotmailaccount. (vandaar getdefaultfolder(6) in plaats van getfolder(6)).
Dan kun je de gmail account als hoofdaccount instellen.
Als je dat niet wil moeten we even op zoek naar de naam van de inbox van dat gmail-account

Je kunt ook de Solax cloud app op je telefoon/tablet/laptop/computer installeren.
De gegevens van jouw systeem worden in de Solax cloud opgeslagen.
Als je een account aanmaakt (=registreren door de barcode op de achterzijde van de converter te scannen) kun je de app gebruiken om de produktie van de panelen uit te lezen.
 
Laatst bewerkt:
In dat geval zo

Code:
Sub jec()
 Dim ar() As Variant, sp As Variant, it As Variant, x As Long, j As Long
 ReDim ar(4, 0)

 For Each it In CreateObject("outlook.application").getnamespace("mapi").Folders("xxx@gmail.com").Folders("Postvak IN").Items
   If it.Subject = "Daily Generation Info" Then
      ReDim Preserve ar(4, 4 * (x + 1))
      sp = Application.Index(Filter(Split(it.body, vbLf), ":"), Array(10, 3, 4, 5, 8))
      For j = 1 To 5
        ar(j - 1, x) = Application.Trim(Split(sp(j), ":")(1))
      Next
      x = x + 1
   End If
 Next

 Sheets(1).Cells(2, 1).Resize(x, 5) = Application.Transpose(ar)
End Sub
 
@JEC, @snb,

bedankt voor jullie ideeën.

Vooralsnog is het dit geworden:
Code:
Sub inlezen()
For Each it In CreateObject("outlook.application").getnamespace("mapi").Folders(4).Folders("Postvak IN").Folders("Solax MV").Items
delen = Split(it.body, vbLf)
If it.Subject = "Daily Generation Info" Then
    With Sheets("Dagelijks")
        waar = .Range("A1000000").End(xlUp).Offset(1).Address
        .Range(waar) = it.Subject                                       'periode
        .Range(waar).Offset(, 1) = CDate(delen(59))                     'datum
        .Range(waar).Offset(, 2) = Left(delen(17), Len(delen(17)) - 4)  'dagelijkse opwekking
        .Range(waar).Offset(, 3) = Left(delen(23), Len(delen(23)) - 4)  'maandelijkse opwekking
        .Range(waar).Offset(, 4) = Left(delen(29), Len(delen(29)) - 4)  'totale opwekking
        .Range(waar).Offset(, 5) = Left(delen(47), Len(delen(47)) - 3)  'CO2 reductie
    End With
Else
    With Sheets("Wekelijks")
        waar = .Range("A1000000").End(xlUp).Offset(1).Address
        .Range(waar) = it.Subject                                       'periode
        .Range(waar).Offset(, 1) = CDate(delen(53))                     'datum
        .Range(waar).Offset(, 2) = Left(delen(17), Len(delen(17)) - 4)  'wekelijkse opwekking
        .Range(waar).Offset(, 3) = Left(delen(23), Len(delen(23)) - 4)  'totale opwekking
        .Range(waar).Offset(, 4) = Left(delen(41), Len(delen(41)) - 3)  'CO2 reductie
    End With
End If
    x = x + 1
Next
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan