Mit dem Excel aus Office 2008 mit einem Intel-Mac auf MySQL zugreifen

Heute kam mir zum ersten Mal eine sinnvolle Anwendung für eine ODBC-Anbindung einer MySQL-Datenbank an Microsoft Excel in den Sinn. Zum Glück war meine erste Aktion nach der Idee eine Google-Suche. Dadurch habe ich einen Foreneintrag gefunden, der mir eine Menge Arbeit erspart hat.
Der Hintergrund ist, dass es eine Reihe von Problemen gibt:

  • Obwohl Office 2008 Macs mit Intel-Prozessoren nativ unterstützt, ist das Hilfsprogramm Microsoft Query seit 2002 unverändert und hat nur PowerPC-Code.
  • Der freie ODBC-Connector von MySQL wird nicht als „fat binary“ angeboten, sondern nur wahlweise als ppc- oder x86-Code.
  • Excel 2008 hat eine hartkodierte Liste von unterstützten ODBC-Konnektoren, die nicht den MySQL-Connector enthält.

Wenn man eine schnelle und einfache Lösung für alle genannten Problem will, kann man einen der offiziell von Microsoft unterstützten Konnektoren kaufen. Getestet habe ich nur den von Actual Technologies (siehe unten).

Da es einen freien Konnektor gibt, sehe ich aber nicht ein, warum ich einen kaufen soll. Hier sind die Schritte, um den freien MySQL-Connector benutzen zu können:

  • bei MySQL die Konnektoren für PowerPC und x86 separat runterladen (im „package format“)
  • Achtung: in gemounteter Form heißen beide gleich, so dass man die Architektur nicht mehr erkennen kann. Deshalb sollten die Images jeweils manuell nach Bedarf gemountet werden.
  • Das Image für x86 mounten (Doppelklick) und den Installer für x86 ausführen
  • im Terminal wie folgt aus den Shared Libraries beider Architekturen sog. „fat binaries“ bauen:
  • mkdir ODBC_ppc ODBC_x86 ODBC_fat
  • cd ODBC_x86
  • pax -zrf /Volumes/MySQL Connector ODBC 5.1/MySQL Connector ODBC 5.1.pkg/Contents/Archive.pax.gz
  • x86-Image auswerfen, ppc-Image mounten
  • cd ../ODBC_ppc
  • pax -zrf /Volumes/MySQL Connector ODBC 5.1/MySQL Connector ODBC 5.1.pkg/Contents/Archive.pax.gz
  • cd ..
  • lipo ./ODBC_ppc/usr/local/lib/libmyodbc3S-5.1.5.so ./ODBC_x86/usr/local/lib/libmyodbc3S-5.1.5.so -output ODBC_fat/libmyodbc3S-5.1.5.so -create
  • lipo ./ODBC_ppc/usr/local/lib/libmyodbc3S.so ./ODBC_x86/usr/local/lib/libmyodbc3S.so -output ODBC_fat/libmyodbc3S.so -create
  • lipo ./ODBC_ppc/usr/local/lib/libmyodbc5.so ./ODBC_x86/usr/local/lib/libmyodbc5.so -output ODBC_fat/libmyodbc5.so -create
  • sudo cp ODBC_fat/* /usr/local/lib/
  • An dieser Stelle hat man einen „fetten“ MySQL-Connector, den man mit Dienstprogramme->ODBC-Administrator konfigurieren kann. Ich habe einen Benutzer-DSN hinzugefügt.
  • Da Excel sich noch weigert, wenn man Daten->Externe Daten->Neue Abfrage erstellen auswählt, muss man die Demo-Version von Actual Technologies installieren.
  • Jetzt startet Microsoft Query, wenn man es aus Excel aufruft, und man kann auch den MySQL-Connector benutzen


Flattr this

Das Problem mit der digitalen Ausleihe – E-Books in wenigen Arbeitsschritten herunterladen

Um digitale Bücher schnell auszuleihen benötigt man Hilfsmittel, die automatisch die einzelnen Kapitel herunterladen um dann die einzelnen Dokumente zu einem einzigen PDF zusammenzufügen.

E-Books sind der Traum eines Bibliotheksnutzers. Einmal heruntergeladen kann das Buch sofort, überall und so lange man will gelesen werden. Weil das Ausleihen damit viel zu einfach wird, hat man dem willigen Benutzer jedoch noch ein paar Steine in den Weg gelegt.

Viele PDF-Dateien müssen einzeln heruntergeladen werden
Viele PDF-Dateien müssen einzeln heruntergeladen werden

Wer schon einmal ein digitales Buch ausgeliehen hat kennt das Problem wahrscheinlich. Man landet beispielsweise auf der Seite des Anbieters www.springerlink.com bei dem der Download lizenziert ist und hat dann lediglich die Möglichkeit alle Kapitel des Buches einzeln als PDF herunter zu laden. Noch dazu heißt dann jede Datei „fulltext.pdf“ und muss nach dem herunterladen umbenannt werden, damit man die Kapitel noch auseinanderhalten kann. Bei Büchern mit mehr als 20 Kapiteln hört die Freude am digitalen Download aber auf.

Wenn man sich die vielen Arbeitsschritte ersparen will muss man automatisieren. Eine Möglichkeit dazu ist die Nutzung des Firefox Add-ons „DownThemAll!“ und des PDF-Konverters „FreePDF“.

Mit DownThemAll! kann man alle Kapitel auf einmal herunterladen. Dazu muss das Add-on zuerst im Firefox installiert werden. Neustart des Browsers nicht vergessen! Anschließend bekommt man auf der Seite mit den PDF-Dokumenten nach einem Rechtsklick und Klick auf „DownThemAll!“ alle Links auf dieser Seite angezeigt. Nun müssen wir zuerst die Einstellungen bearbeiten (ganz unten rechts). Den Schieberegler „Max. Anzahl gleichzeitiger Downloads“ ganz nach links schieben, damit nur noch eine Datei  gleichzeitig heruntergeladen wird. Dadurch erreichen wir, dass die PDFs in der richtigen Reihenfolge auf unserem Rechner landen. Nun noch „Falls ein Dateiname…“ auf „Umbenennen“ stellen, damit nicht bei jedem PDF erneut  nachgefragt wird. Nach Klick auf „OK“ müssen wir nun auf das Pluszeichen vor „Schnelles Filtern“ klicken und dort folgenden Eintrag einfügen:“*.pdf“. Noch die Checkbox „Andere Filter deaktivieren“ auswählen und gegebenenfalls den Pfad ändern, an dem die Dateien gespeichert werden sollen. Es empfiehlt sich einen eigenen Ordner anzulegen indem man einfach an die bestehende Adresse einen Zusatz wie „buchxy“ hinzufügt. Alle Dateien landen dann nach Klick auf „Starten!“ in dem Ordner buchxy unter den Eigenen Dateien.

Nun wäre es ja praktisch, wenn wir anstatt der vielen einzelnen Dateien ein einziges Dokument hätten. Das Zusammenfügen erledigt FreePDF für uns. Damit FreePDF funktioniert muss erst Ghostscript installiert werden. Danach kann FreePDF durch Klick auf die aktuellste Versionsnummer heruntergeladen und installiert werden. Jetzt befindet sich im Startmenü unter FreePDF das Programm FreePDF Join. Oben Rechts wählt man durch Klick auf das Ordnersymbol den Ordner mit den heruntergeladenen Dateien aus, markiert alle Dateien und klickt auf „Öffnen“. Jetzt sollte man darauf achten, dass die Dokumente auch ja in der richtigen Reihenfolge sind und anschließend auf das Disketten Symbol klicken. Nun muss man nur noch einen Namen für die zusammengefügt Datei eingeben, am besten den Titel des Buches und fertig ist man.

Nun hat man das  Buch in einem Dokument und kann es komplett nach Stichwörtern durchsuchen.

DNS-Abfragen mit JNDI

Für unser Java-Projekt benötigen wir genau eine DNS-Abfrage. In der Vergangenheit haben wir dazu dnsjava verwendet, aber eigentlich ist es natürlich Overkill, für eine einzige Abfrage eine komplette zusätzliche Library mitzuschleppen. Deshalb war ich froh zu entdecken, dass DNS mittlerweile mit Java-Bordmitteln funktioniert. Es ist ein bisschen versteckt, weil es Teil der JNDI-Extension ist, die für Verzeichnisdienste aller Art benutzt werden kann.

Wenn man aber erstmal weiß, dass damit auch DNS gemeint ist, geht der Rest ziemlich einfach, wenn man davon absieht, dass man sich das eigentliche Ergebnis mit einer Regular Expression extrahieren muss:

DirContext ictx = new InitialDirContext();
Attribute myAttr = ictx.getAttributes("dns:/_kerberos._udp.ad.uni-koeln.de",
        new String[] {"SRV"}).get("SRV");
NamingEnumeration<?> myEnum = myAttr.getAll();
Pattern p = Pattern.compile(".*\s(\p{Alpha}.*$)");
Matcher m;
while (myEnum.hasMoreElements()) {
      m = p.matcher(myEnum.next().toString());
      if (m.find()) {
   	  myKRB_Servers.append(m.group(1)+":");
      }
}
System.setProperty("java.security.krb5.kdc", myKRB_Servers.toString());

Wir setzen auf diese Weise die Adressen der jeweils aktuellen Kerberos5-Server im Active Directory der Uni. Möglicherweise geht das noch eleganter, aber schon so ist es eine deutliche Verbesserung gegenüber dem vorigen Konstrukt.