You are heresoftware / Excel

Excel


mu - maildir utils

Ik zag deze tweet passeren van @DriesBultynck:
zoekt nog steeds een manier om een reeks mails uit gmail te exporteren naar excel (incl. date + content). Niemand?

Volgens @haploc zou dat wel moeten lukken met Perl, Email::Simple en Spreadsheet::SimpleExcel. Aangezien ik niet zo vlot ben met Perl, heb ik een andere oplossing gezocht en gevonden: mu (kort voor Maildir Utils).

Helaas heeft mu geen kant-en-klaar pakket voor Debian dus moet het van source geïnstalleerd worden.

cd download
wget http://mu0.googlecode.com/files/mu-0.9.7.tar.gz
tar -xvf mu-0.9.7.tar.gz
cd mu-0.9.7

Op mijn systeem ontbraken nog een paar dependencies, met een paar keer ./configure te draaien heb ik ze kunnen achterhalen:

sudo apt-get install build-essential libglib2.0-dev libgmime-2.4-dev libxapian-dev xdg-utils guile-1.8-dev libgtk2.0-dev

Daarna mu configureren:

./configure

Als alles goed gegaan is, dan krijg je op het einde ongeveer zo'n output:

mu configuration is complete.
-----------------------------
Xapian version                       : xapian-config - xapian-core 1.2.3
GLib version                         : 2.24.2
GMime version                        : 2.4.14
GTK+ version                         : 2.20.1
GIO version                          : 2.24.2
Guile version                        : 1.8.7

Build unit tests (glib >= 2.22)      : yes
Build 'mug' toy-ui (requires GTK+)   : yes
McCabe's Cyclomatic Complexity tool  : yes
xdg-open                             : /usr/bin/xdg-open

Have direntry->d_ino                 : yes
Have direntry->d_type                : yes
-----------------------------

Daarna builden en installeren:

make
sudo make install
cd

Klaar? Bijna. mu werkt door een maildir te indexeren als een database, waar je dan queries op kan loslaten. Voor het indexeren gaat mu uit van een aantal zinnige defaults dus het is niet meer dan:

mu index

Afhankelijk van de grootte van de maildir kan dit even duren. Alhoewel. Bij mij viel het nog best mee:

time mu index
mu: indexing messages under /home/amedee/Maildir [/home/amedee/.mu/xapian]
/ processing mail; processed: 69736; updated/new: 69736, cleaned-up: 0
mu: elapsed: 210 second(s), ~ 332 msg/s
mu: cleaning up messages [/home/amedee/.mu/xapian]                                                                                                              
\ processing mail; processed: 69736; updated/new: 0, cleaned-up: 0
mu: elapsed: 2 second(s), ~ 34868 msg/s

real    3m32.500s
user    1m21.021s
sys     0m7.692s

Als je mu regelmatig gebruikt, dan is misschien geen slecht idee om mu index toe te voegen als cron job.

Nu mu geïnstalleerd is, kan je queries draaien zoals

mu find "iText" --format=xml > mu-iText.xml

Dit geeft bij mij als output:

<?xml version="1.0" encoding="UTF-8" ?>
<messages>
        <message>
                <from>1T3XT BVBA &lt;info [at] 1t3xt [dot] info&gt;</from>
                <to>Post all your questions about iText here &lt;itext-questions [at] lists [dot] sourceforge [dot] net&gt;</to>
                <subject>Re: [iText-questions] Adding watermark in front of the page    background color</subject>
                <date>1323524095</date>
                <size>7149</size>
                <msgid>4EE35FFF [dot] 6070006 [at] 1t3xt [dot] info</msgid>
                <path>/home/amedee/Maildir/.mailinglijst.itext-questions/cur/1323524308.25506_3.intrepid:2,</path>
                <maildir>/.mailinglijst.itext-questions</maildir>
        </message>
        <message>
                <from>Balder VC &lt;lists [at] redlab [dot] be&gt;</from>
                <to>itext-questions [at] lists [dot] sourceforge [dot] net</to>
                <subject>Re: [iText-questions] XMLWorker &amp; RTL</subject>
                <date>1323524276</date>
                <size>7769</size>
                <msgid>4EE360B4 [dot] 8040008 [at] redlab [dot] be</msgid>
                <path>/home/amedee/Maildir/.mailinglijst.itext-questions/cur/1323524480.9255_3.intrepid:2,</path>
                <maildir>/.mailinglijst.itext-questions</maildir>
        </message>
        <message>
                <from>Balder VC &lt;lists [at] redlab [dot] be&gt;</from>
                <to>Post all your questions about iText here &lt;itext-questions [at] lists [dot] sourceforge [dot] net&gt;</to>
                <subject>[iText-questions] Fwd: Re:  XMLWorker &amp; RTL</subject>
                <date>1323525006</date>
                <size>19787</size>
                <msgid>4EE3638E [dot] 7020708 [at] redlab [dot] be</msgid>
                <path>/home/amedee/Maildir/.mailinglijst.itext-questions/cur/1323525223.17054_3.intrepid:2,</path>
                <maildir>/.mailinglijst.itext-questions</maildir>
        </message>
</messages>

Meer voorbeelden van queries zijn te vinden op de mu cheatsheet.

Nu is het gewoon nog een kwestie van:

  1. Een lokale IMAP-server installeren die Gmail binnentrekt (zelf ben ik nogal fan van Dovecot)
  2. De gepaste query verzinnen, met XML output.
  3. De XML-file binnentrekken in een spreadsheetprogramma.

Voila, dit is één mogelijke oplossing.

Excel/VBA High Resolution Timer

Copy-paste code voor mezelf, omdat ik dit dikwijls nodig heb.

Option Explicit
 
Sub TimeTestAPI()
' source: John Green / Stephen Bullen / Felipe Martins:
'         Excel 2000 VBA Programmer´s Reference
'         Wrox Press Ltd., Birmingham, 1999, 3. Reprint November 2000
'         Chapter 18: Programming with Windows API, page 336f
    Dim obTimer As New CHighResTimer
    Dim x As Integer
    Dim y As Integer
    Dim A As Integer
    Dim B As Integer
    Dim C As Integer
    Dim i As Integer
    Dim j As Integer
 
    obTimer.StartTimer

' voert enkele berekeningen uit om wat tijd te verdrijven ;-)
    x =
    y =
    For i = 1 To 1000
        For j = 1 To 1000
            A = x + y + i
            B = y - x - i
            C = x - y - i
        Next j
    Next i
 
    obTimer.StopTimer
 
    Debug.Print obTimer.Elapsed * 1000
    MsgBox "De berekening duurde " & obTimer.Elapsed * 1000 & _
           " milliseconden.", vbInformation, _
           "Info aan " & Application.UserName
End Sub

'**************************************************************
'PUT FOLLOWING CODE IN A CLASS MODULE CHighResTimer
'**************************************************************
Option Explicit
 
'How many times per second is the counter updated?
Private Declare Function QueryFrequency Lib "kernel32" _
        Alias "QueryPerformanceFrequency" ( _
        lpFrequency As Currency) As Long
 
'What is the counter's value
Private Declare Function QueryCounter Lib "kernel32" _
        Alias "QueryPerformanceCounter" ( _
        lpPerformanceCount As Currency) As Long
 
'Variables to store the counter information
Dim cyFrequency As Currency
Dim cyOverhead As Currency
Dim cyStarted As Currency
Dim cyStopped As Currency
 
Private Sub Class_Initialize()
   Dim cyCount1 As Currency, cyCount2 As Currency
 
   'Get the counter frequency
   QueryFrequency cyFrequency
 
   'Call the hi-res counter twice, to check how long it takes
   QueryCounter cyCount1
   QueryCounter cyCount2
 
   'Store the call overhead
   cyOverhead = cyCount2 - cyCount1
End Sub
 
Public Sub StartTimer()
   'Get the time that we started
   QueryCounter cyStarted
End Sub
 
Public Sub StopTimer()
   'Get the time that we stopped
   QueryCounter cyStopped
End Sub
 
Public Property Get Elapsed() As Double
    Dim cyTimer As Currency
 
   'Have we stopped or not?
   If cyStopped = Then
      QueryCounter cyTimer
   Else
      cyTimer = cyStopped
   End If
 
   'If we have a frequency, return the duration, in seconds
   If cyFrequency > Then
      Elapsed = (cyTimer - cyStarted - cyOverhead) / cyFrequency
   End If
End Property

API van Mobile Vikings misbruiken

API van Mobile Vikings misbruiken

De url is https://mobilevikings.com/api/1.0/rest/mobilevikings/call_history.xml?from_date=2009-09-01T00:00:00&page_size=10000
Ineens 10.000 records tegelijk proberen opvragen, dat zullen ze wel aankunnen zeker? Wink Nose

Mobile Vikings call history in Excel

Op de website van Mobile Vikings is het niet zo gemakkelijk om in één keer een overzicht te krijgen voor je call history voor een periode van langer dan 1 dag.
Een export naar XML of CSV of XLS voorzien ze ook niet.

Toch is het vrij eenvoudig om uw call history binnen te trekken in uw favoriete spreadsheet.

Microsoft Excel 2003

Ga naar File -> Open (Bestand -> Openen) en geef de volgende bestandsnaam in:
https://mobilevikings.com/api/1.0/rest/mobilevikings/call_history.xml?from_date=2009-09-01T00:00:00&page_size=1000

Een beetje uitleg:

from_date=2009-09-01T00:00:00
is de startdatum van de call log, in dit voorbeeld 2009-09-01.

page_size=1000
is het aantal items per pagina. De default waarde is 25, maar omdat ik alles op één pagina wil, geef ik een voldoende groot getal in.
EDIT: gewijzigd naar 1000 na een van onderstaande comments. Het is niet de bedoeling dat ik de server van Mobile Vikings laat crashen.

Volgens de API documentatie van Mobile Vikings kan je ook nog een einddatum meegeven:

until_date=2009-10-01T00:00:00

Excel komt eerst vragen om uw Mobile Vikings login en wachtwoord.

Daarna vraagt Excel hoe het XML-bestand geopend moet worden. Kies daar Als een XML lijst.

Klik op OK bij de melding dat er geen schema is.

Je krijgt dan je call history. Ik vind het wel handig om dan te kunnen filteren op is_data of op is_sms.

OpenOffice.org Calc

Om een of andere reden wil OOo Calc het XML-bestand niet rechtstreeks van de URL openen (getest met Portable OpenOffice.org 3.0).
Ik heb het ook geprobeerd met Insert -> Link to External Data, maar dat lukt ook niet.
En als ik de URL eerst open in een browser en dan lokaal opsla, dan opent OpenOffice.org het bestand met Writer ipv met Calc, dwz je ziet dan de raw XML. Daar valt dus weinig mee aan te vangen.

Als iemand weet hoe ik het aan de praat krijg voor OpenOffice, smijt het aub in de comments. Dankuwel!

Reclame... ;-)

Met dank aan
  • Jasmina
  • Celine
  • Pieter
  • Jeff
  • Hans
  • Jurgen
  • Jurgen
  • Marijke
  • Amedee
  • Erik
  • Danny
  • Sofie
  • Lars
  • Christophe
  • Peter
  • Jeroen
  • Jurgen
om mij een gratis herlading twv €15 te bezorgen!

Waar ben ik?