Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PDF auslesen und per VBA in Excel schreiben

Frage Entwicklung VB for Applications

Mitglied: xsto123

xsto123 (Level 1) - Jetzt verbinden

30.05.2014, aktualisiert 05.06.2014, 16212 Aufrufe, 17 Kommentare, 4 Danke

Hallo zusammen,

ich bin auf der Suche nach einer Möglichkeit Daten automatisiert aus einem PDF auszulesen und in eine Excel-Tabelle zu schreiben.
Konkret geht es um folgende PDF: http://www.gtai.de/GTAI/Content/DE/Trade/Fachdaten/MKT/2008/07/mkt20080 ...

Hier möchte ich z.B. den Wert
- "Fläche:" "357.137,0 qkm"
- "Einwohner:" "2013" "80,5 Millionen"
usw.

in einzelnen Spalten einer Excel haben.

Ich habe bereits über Google nach einer Lösung gesucht und bin dabei auf dieses Forum gestoßen, nämlich auf diesen Beitrag: http://www.administrator.de/frage/pdf-auslesen-und-in-excel-schreiben-1 ...

Hier scheint es einen Lösungsansatz zu geben, allerdings funktioniert das bei mit leider nicht. Selbstverständlich habe ich Zeile 15, also den Suchbegriff, an meine PDF angepasst (Einwohner), aber es tut sich leider gar nichts. Ich arbeite mit Office 2010.

Kennt jemand eine Lösung für mein Problem bzw. könnte man das Script aus oben genannten Beitrag irgendwie an meine Bedürfnisse anpassen?
Ich wäre euch zu ewigem Dank verpflichtet, da ich sonst jedes PDF von jedem Land öffnen müsste und die gewünschten Daten herauskopieren müsste.

Vielen Dank bereits im Voraus für eure Hilfe.
Mitglied: colinardo
30.05.2014, aktualisiert 31.05.2014
Hallo xsto123, Willkommen auf Administrator.de!
Also du packst die pdftotext.exe in den Ordner deines Excel-Files und die auszulesenden PDF-Dateien ebenfalls in diesen Ordner. Dann kopierst du den Code von unten in dein Excel-File in den VBA-Editor (ALT-F11). Stelle bitte auch sicher das im Sicherheitscenter von Excel das Ausführen von Makros aktiviert ist!
Dann kannst du die Files hiermit auslesen wenn du im VBA-Editor das Makro ausführst: (WICHTIG: in diesem Beispiel wird nur das Land und die Fläche ausgelesen, das musst du dann noch um die gewünschten Felder erweitern, dies wird entsprechend mit Regular-Expressions aus den Textdateien extrahiert)
01.
Sub PDF2Excel() 
02.
    Dim i As Integer 
03.
    Dim strCMDLine As String, strTXT As String 
04.
    Dim FSO As Object, objSFold As Object, objWks As Object, WSHShell As Object, file As Object, rngLastRow As Range 
05.
    Dim colPFiles As New Collection, colTFiles As New Collection, regex As Object 
06.
     
07.
    Set WSHShell = CreateObject("WScript.Shell") 
08.
    Set FSO = CreateObject("Scripting.FileSystemObject") 
09.
    Set regex = CreateObject("vbscript.regexp") 
10.
    regex.MultiLine = True 
11.
    Set objSFold = FSO.GetFolder(ThisWorkbook.Path) 
12.
     
13.
    strCMDLine = """" & ThisWorkbook.Path & "\pdftotext.exe"" -raw -layout -nopgbrk " 
14.
         
15.
    For Each file In objSFold.Files                                  ' alle Dateien einlesen 
16.
        If Right(file.Path, 4) = ".pdf" Then colPFiles.Add file.Path  ' nur *.pdf 
17.
    Next 
18.
     
19.
    For i = 1 To colPFiles.Count 
20.
         WSHShell.Run strCMDLine & """" & colPFiles.Item(i) & """", 0, True 
21.
    Next 
22.
     
23.
    For Each file In objSFold.Files                                  ' wieder alles einlesen 
24.
        If Right(file.Path, 4) = ".txt" Then colTFiles.Add file.Path  ' nur *.txt 
25.
    Next 
26.
     
27.
    Set objWks = Worksheets(1) 
28.
    Set rngLastRow = objWks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 
29.
     
30.
    For i = 1 To colTFiles.Count 
31.
        strTXT = FSO.OpenTextFile(colTFiles.Item(i)).ReadAll 
32.
         
33.
        'Land auslesen 
34.
        regex.Pattern = "^Wirtschaftsdaten kompakt: ([^\r\n]+)" 
35.
        Set matches = regex.Execute(strTXT) 
36.
        If matches.Count > 0 Then 
37.
            rngLastRow.Cells(1, 1).Value = matches(0).submatches(0) 'Land in Spalte A speichern 
38.
        End If 
39.
         
40.
        ' Fläche auslesen 
41.
        regex.Pattern = "^Fläche\s*([^\r\n]+)" 
42.
        Set matches = regex.Execute(strTXT) 
43.
        If matches.Count > 0 Then 
44.
            rngLastRow.Cells(1, 2).Value = matches(0).submatches(0)     'Fläche in Spalte B Speichern 
45.
        End If 
46.
         
47.
        Set rngLastRow = rngLastRow.Offset(1, 0) 
48.
        'Textdatei löschen 
49.
        Kill colTFiles.Item(i) 
50.
    Next 
51.
    Set FSO = Nothing 
52.
    Set regex = Nothing 
53.
    Set WSHShell = Nothing 
54.
    Set objSFold = Nothing 
55.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: xsto123
30.05.2014 um 14:53 Uhr
Hallo Uwe,

wow, das ist der Hammer. Das funktioniert perfekt und genau so, wie ich es mir gewünscht, aber niemals für möglich gehalten hätte. Vielen, vielen Dank.

Ich habe eben mal versucht das Script um "Einwohner" zu erweitern, um das Prinzip zu verstehen. Folgendes habe ich gemacht:

' Einwohner auslesen
regex.Pattern = "^Einwohner\s*([^\r\n]+)"
Set matches = regex.Execute(strTXT)
If matches.Count > 0 Then
einwohner = matches(0).submatches(0)
rngLastRow.Cells(2, 2).Value = matches(0).submatches(0) 'Fläche in Spalte B Speichern
End If

Das funktioniert auch, allerdings steht nun in einer Spalte "2013: 80,5 Millionen". Ist es möglich, dass die Jahreszahl und der eigentliche Wert (80,5 Millionen) in einzelnen Zellen eingetragen werden?

Und was wahrscheinlich wirklich nicht funktionieren wird, ist bestimmt, dass der Wert alleine ohne Maßangabe steht, also "357.137,0" ohne "qkm", "80,5" ohne "Millionen", usw., sodass ich die Daten in der Excel weiterverarbeiten kann. Oder?

Ich werde mich nun am Wochenende mit dem Thema beschäftigen und am Montag im Büro noch mal nachschauen, welche Daten ich genau brauche. Ich muss nämlich leider auch noch Daten aus anderen PDFs übertragen, daher versuche ich das Prinzip zu verstehen, damit ich es bestenfalls übertragen kann.

Ich danke dir auf jeden Fall vielmals für deine Mühe und wünsche ein schönes WE.
Bitte warten ..
Mitglied: colinardo
30.05.2014, aktualisiert um 15:19 Uhr
Mit Regular Expressions geht fast alles, außer Kaffee kochen

Und was wahrscheinlich wirklich nicht funktionieren wird, ist bestimmt, dass der Wert alleine ohne Maßangabe steht, also "357.137,0" ohne "qkm", "80,5" ohne "Millionen", usw., sodass ich die Daten in der Excel weiterverarbeiten kann. Oder?
Kein Problem, der Pattern in diesem Fall lautet:
regex.Pattern = "^Einwohner\s*(\d{4}): ([^\s]+) ([^\s]+)"
dann kannst du hiermit die Teile aufsplitten:
01.
jahr = matches(0).submatches(0) 
02.
zahl = matches(0).submatches(1) 
03.
einheit = matches(0).submatches(2) 
Die Klammern im Regex legen die Submatches fest, so lässt sich das ganze separaten Variablen zuordnen und weiterverarbeiten.

Wenn man den Regex-Ausdruck ausschreibt, würde sich das so lesen:
Assert position at the beginning of a line (at beginning of the string or after a line break character) «^» 
Match the characters “Einwohner” literally «Einwohner» 
Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*» 
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Match the regular expression below and capture its match into backreference number 1 «(\d{4})» 
   Match a single digit 0..9 «\d{4}» 
      Exactly 4 times «{4}» 
Match the characters “: ” literally «: » 
Match the regular expression below and capture its match into backreference number 2 «([^\s]+)» 
   Match a single character that is a “non-whitespace character” «[^\s]+» 
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+» 
Match the character “ ” literally « » 
Match the regular expression below and capture its match into backreference number 3 «([^\s]+)» 
   Match a single character that is a “non-whitespace character” «[^\s]+» 
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Für Tests mit Regex lass dir mal ein PDF mit pdftoexe die Textdatei ausgeben, dann siehst du genauer wie das File formatiert ist.

Für das Beispiel-PDF
pdftotext.exe -raw -layout -nopgbrk mkt200807555574_159860.pdf
Anhand dessen lässt sich dann der entsprechende Pattern aufbauen.

Grüße Uwe
Bitte warten ..
Mitglied: xsto123
30.05.2014 um 17:15 Uhr
Super, vielen Dank. Da habe ich ja einiges zu lesen und auszuprobieren. Aber selbst lernen ist sowieso immer am besten
Ich werde mich bei Problemen und Fragen, die mit Sicherheit auftauchen werden, wieder hier im Thread melden.

Vielen Dank noch mal für deine freundliche und kompetente Unterstützung. Tolles Forum hier

Viele Grüße
Bitte warten ..
Mitglied: xsto123
31.05.2014 um 17:53 Uhr
Hallo noch mal,

ich habe nun fast den ganzen Samstag damit verbracht und kam auch ganz gut voran. Nur die Regular Expressions machen mir doch ganz schön zu schaffen. Die sind leider für einen Anfänger nicht ganz so leicht zu verstehen.

Ich habe mir jetzt mal noch eine zweite PDF besorgt (http://www.gtai.de/GTAI/Content/DE/Trade/Fachdaten/MKT/2014/05/mkt20140 ...) und wollte mich mal an die Rohstoffe wagen. Folgendes habe ich ins Script eingefügt:

' Rohstoffe auslesen
regex.Pattern = "^Rohstoffe\s* ([^\s]+) ([^\r\,\n]+)"
Set matches = regex.Execute(strTXT)
If matches.Count > 0 Then
art = matches(0).submatches(0)
rohstoff = matches(0).submatches(1)
rngLastRow.Cells(1, 6).Value = matches(0).submatches(0) 'Art speichern
rngLastRow.Cells(1, 7).Value = matches(0).submatches(1) 'Rohstoff speichern
End If

Das funktioniert soweit auch, allerdings wird mir als "art" nur der Wert "agrarisch" ausgegeben und als "rohstoff" nur "Opium".

Ich hätte gerne jeden Rohstoff einzeln, sodass ich jeden einzelnen in eine Zelle ablegen kann.
Außerdem springt er leider auch nicht eine Zeile weiter auf "mineralisch".

Wäre über jede Hilfe dankbar.

PS. Gibt es eventuell irgendwo eine gute Übersicht über alle Regular Expressions, die man verwenden kann?

Viele Grüße und noch mal vielen Dank
Bitte warten ..
Mitglied: colinardo
31.05.2014, aktualisiert 01.06.2014
Hallo,
da hast du dir auch einen nicht so einfachen Fall für den Anfang herausgesucht ! Das Problem was ich gerade bemerke ist, dass der pdftotext-Interpreter je nach PDF mit den jetzigen Parametern keine konsistenten Textdateien erzeugt (die Daten in den rechten Spalten sind dann teilweise mehrfach nach unten versetzt und nicht mehr zuzuordnen) mit denen sich das einigermaßen zuverlässig extrahieren ließe.

Beispiel für dein PDF mit Afghanistan(du siehst alles etwas nach unten verschoben, so nicht handlebar):
Wirtschaftsdaten kompakt: Afghanistan 
 
Stand: April 2013 
 
Basisdaten 
 
Fläche                               652.230,0 qkm 
Einwohner 
Bevölkerungsdichte                   2013: 30,6 Millionen * 
Bevölkerungswachstum 
Geburtenrate                         2013: 46,9* Einwohner/qkm 
Fertilitätsrate 
Altersstruktur                       2013: 2,2% 
 
Analphabetenquote                    2013: 39,0 Geburten/1.000 Einwohner 
 
Rohstoffe        agrarisch           2012: 5,1 Geburten pro Frau 
 
                 mineralisch         2014: 0-14 Jahre: 42%; 15-24 Jahre: 22,2%; 25-54 Jahre: 
                                     29,4%; 55-64 Jahre: 2,5%; 65 Jahre und älter: 2,5% 
Mitglied in internationalen 
Wirtschaftszusammenschlüssen und     2000: 71,9% 
-abkommen 
                                     Opium, Weizen, Früchte, Nüsse, Wolle, Hammel, Schafsfell, 
Währung          Bezeichnung         Lammfell 
                 Kurs (März 2014) 
                 Jahresdurchschnitt  Erdgas, Erdöl, Kohle, Kupfer, Chromit, Talk, Baryt, Schwefel, 
                                     Blei, Zink, Eisenerz, Salz, Edel- und Halbedelsteinen
Womit ich es jetzt mal probiert habe ist mit folgenden Parametern pdftotext eine Art Tabellenansicht zu generieren, damit ist es einigermaßen konsistent, zumindest bei den beiden PDFs die du bis jetzt gepostet hast, wie das bei anderen aussieht kann ich nicht vorhersehen...
strCMDLine = """" & ThisWorkbook.Path & "\pdftotext.exe"" -table -nopgbrk " 
Hiermit sieht das ganze dann so aus:

                                                                                                                  15868 
 
Wirtschaftsdaten                           kompakt: Afghanistan 
 
Stand: April 2013 
 
Basisdaten 
 
Fläche                                     652.230,0 qkm 
 
Einwohner                                  2013: 30,6 Millionen * 
 
Bevölkerungsdichte                         2013: 46,9* Einwohner/qkm 
 
Bevölkerungswachstum                       2013: 2,2% 
 
Geburtenrate                               2013: 39,0 Geburten/1.000 Einwohner 
 
Fertilitätsrate                            2012: 5,1 Geburten pro Frau 
 
Altersstruktur                             2014: 0-14 Jahre: 42%; 15-24 Jahre: 22,2%; 25-54 Jahre: 
 
                                           29,4%; 55-64 Jahre: 2,5%; 65 Jahre und älter: 2,5% 
 
Analphabetenquote                          2000: 71,9% 
 
Rohstoffe          agrarisch               Opium, Weizen, Früchte, Nüsse, Wolle, Hammel, Schafsfell, 
 
                                           Lammfell 
 
                   mineralisch             Erdgas, Erdöl, Kohle, Kupfer, Chromit, Talk, Baryt, Schwefel, 
 
                                           Blei, Zink, Eisenerz, Salz, Edel- und Halbedelsteinen 
 
Mitglied in internationalen                SAARC, Colombo-Plan, UN ESCAP u.a.; zu bilateralen
Dann musst du aber auch für das Land den Regex anpassen.
Bei Regex kommt es auf jeden Buchstaben an, ob sichtbar oder nicht, deswegen passt dein Regex nicht weil ein Leerzeichen zwischen den einzelnen Rohstoffen auftritt und die Option [^\s]+ besagt: Matche alles was kein Whitspace-Character ist. Für den hinterern Submatch müsstest du den hier nehmen ([^\r\n]+ also alles was kein PageBreak ist. Du brauchst für den Regex zweitens einen Begrenzer für die Daten, weil du ja nicht weißt wie viele Klassen an Rohstoffe vorkommen. In diesem Fall wäre das der String Mitglied in internationalen der das ganze im Ganzen begrenzt. Und dann jeweils die Submatches sammeln. Da die Rohstoffe via Komma getrennt sind ließen sich diese mit der Split() Funktion voneinander trennen und in die jeweiligen Spalten überführen. Du siehst das ganze ist nicht so simpel wie du dir das vorstellst.

Ein Beispiel wie dies aussehen könnte(hier jetzt nur mit Ausgabe via MsgBox ohne Zuordnung zu dem Spalten, zum testen) (geht nur mit Abänderung der pdftotext-Zeile von oben:
01.
regex.Global = True 
02.
regex.IgnoreCase = True 
03.
regex.Pattern = "(agrarisch|mineralisch)\s+([\s\S]+?,[\r\n]+[\s\S]+?)[\r\n]{4}|(agrarisch|mineralisch)\s+([\s\S]+?)[\r\n]{4}" 
04.
Set matches = regex.Execute(strTXT) 
05.
If matches.count > 0 Then 
06.
	For Each match In matches 
07.
		' Rohstoffklasse 
08.
		rohstoffklasse = match.Submatches(0) 
09.
		MsgBox "Klasse: " & rohstoffklasse 
10.
		 
11.
		'ungewünschte Zeichen und Zeilenumbrüche entfernen 
12.
		raw = Replace(Trim(match.Submatches(1)),"," & vbNewLine,",",1,-1,1) 
13.
		raw = Replace(raw,vbNewLine,"") 
14.
		 
15.
		'Stoffe in Array splitten 
16.
		arrStoffe = Split(raw,",",-1,1) 
17.
		For i = 0 To UBound(arrStoffe) 
18.
			stoff = Trim(arrStoffe(i)) 
19.
			MsgBox stoff 
20.
		Next 
21.
	Next 
22.
End If
Eine Liste von verfügbaren Regex-Parametern kannst du in oben verlinkten Tutorial nachlesen, oder eine Referenzübersicht hier und hier

An deiner Stelle würde ich mich an die entsprechende Stelle wenden die die Daten veröffentlicht hat und dort eine Anfrage stellen ob die Daten zu Verfügung gestellt werden können. Das sind ja keine geheimen Daten sondern öffentlich verfügbare, vermutlich vom Bundesministerium für Wirtschaft und Energie zur Verfügung gestellt Das geht schneller und du sparst erheblich an Arbeitszeit (die sicherlich auch nicht umsonst ist). Hab das vor Jahren auch schon mal gemacht, die waren sehr umgänglich und haben mir entsprechende Daten gegen ein kleines Entgelt tabellarisch zur Verfügung gestellt.

Du kannst nämlich nicht sicher sein das alle PDFs alle exakt der selben Struktur folgen, da wird es sicherlich den ein oder anderen Ausreißer geben und du musst trotzdem wieder Hand anlegen. Und ich würde mich auf die Ausgabe von pdftotext nicht verlassen wenn später wichtige Berechnungen mit den Daten vorgenommen werden, und hinterher es dann doch nicht stimmt.

Alternativ die Daten in einem konsistenteren Zustand direkt auf den folgenden Seiten aus dem Web auslesen : http://www.laenderdaten.de/laender.aspx

Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: xsto123
01.06.2014 um 11:01 Uhr
Hallo Uwe,

vielen Dank noch mal.

1.) Ist aus dem Web auslesen denn einfacher? Die meisten Daten benötige ich sowieso aus dem CIA Factbook (https://www.cia.gov/library/publications/the-world-factbook/geos/br.html). Die von dir genannte Seite basiert zwar auf dem Factbook, hat aber, soweit ich das sehe, leider nicht alle Daten drin und auch nicht aktuell.

2.) Darf ich fragen, wie man sich die Daten per pdftotext.exe so darstellen lässt, wie du es gemacht hast? Du hattest weiter oben eine Möglichkeit beschrieben, aber wenn ich die per CMD in Windows anwende, wird bei mir eine TXT Datei erstellt, die nicht so geordnet ist wie deine. Außerdem sieht Afghanistan bei mir so aus:

15868 
Wirtschaftsdaten kompakt: Afghanistan 
Stand: April 2013 
*) Schätzung bzw. Prognose 
© Germany Trade & Invest 2014 - Gefördert durch das Bundesministerium für Wirtschaft und Energie aufgrund eines 
Beschlusses des Deutschen Bundestages. 
Basisdaten 
Fläche 652.230,0 qkm 
Einwohner 2013: 30,6 Millionen * 
Bevölkerungsdichte 2013: 46,9* Einwohner/qkm 
Bevölkerungswachstum 2013: 2,2% 
Geburtenrate 2013: 39,0 Geburten/1.000 Einwohner 
Fertilitätsrate 2012: 5,1 Geburten pro Frau 
Altersstruktur 2014: 0-14 Jahre: 42%; 15-24 Jahre: 22,2%; 25-54 Jahre: 
29,4%; 55-64 Jahre: 2,5%; 65 Jahre und älter: 2,5% 
Analphabetenquote 2000: 71,9% 
Rohstoffe agrarisch Opium, Weizen, Früchte, Nüsse, Wolle, Hammel, Schafsfell, 
Lammfell 
mineralisch Erdgas, Erdöl, Kohle, Kupfer, Chromit, Talk, Baryt, Schwefel, 
Blei, Zink, Eisenerz, Salz, Edel- und Halbedelsteinen 
Mitglied in internationalen 
Wirtschaftszusammenschlüssen und 
-abkommen 
SAARC, Colombo-Plan, UN ESCAP u.a.; zu bilateralen 
Abkommen siehe www.wto.org -> Trade Topics, Regional 
Trade Agreements, RTA Database, By Country 
Währung Bezeichnung Afghani (Af) ; 1 Af = 100 Puls 
Kurs (März 2014) 1 Euro = 79,140 Af; 1 US$ = 57,710 Af 
Jahresdurchschnitt 2013: 1 Euro = 73,703 Af; 1 US$ = 55,597 Af 
2012: 1 Euro = 65,805 Af; 1 US$ = 51,065 Af 
2011: 1 Euro = 65,521 Af; 1 US$ = 46,860 Af 
Wirtschaftslage 
Bruttoinlandsprodukt (BIP, nom.) 
- Mrd. Af 2013: 1.148,1*; 2014: 1.248,7*; 2015: 1.378,5* 
- Mrd. US$ 2013: 20,7*; 2014: 21,7*; 2015: 23,2* 
BIP je Einwohner (nominal) 
- Af 2013: 37.579*; 2014: 39.919*; 2015: 43.069* 
- US$ 2013: 678,7*; 2014: 695,2*; 2015: 725,7* 
BIP-Entstehung (%) 2012: Land-/Forst-/Fischwirtschaft 30,3; 
Transport/Logistik/Kommunikation 20,3; Bergbau/Industrie 
14,3; Handel/Gaststätten/Hotels 8,4; Bau 8,1; Anderes 18,5 
BIP-Verwendung (%) 2012: Privatverbrauch 92,3; Staatsverbrauch 16,2; 
Bruttoanlageinvestitionen 15,2; Außenbeitrag -27,3 
*) Schätzung bzw. Prognose 
© Germany Trade & Invest 2014 - Gefördert durch das Bundesministerium für Wirtschaft und Energie aufgrund eines 
Beschlusses des Deutschen Bundestages. 
Wirtschaftswachstum 
Wirtschaftswachstum nach Sektoren 
(%, real) 
2012: Land-/Forst-/Fischwirtschaft 18,2; Bergbau/Herstellung 
6,5; Handel/Gaststätten/Hotels 3,7; Bau 1,5; 
Transport/Logistik/Kommunikation -0,8 
Inflationsrate (%) 2013: 7,4; 2014: 6,1*; 2015: 5,5* 
Arbeitslosenquote (%) 2004: 3,4 
Haushaltssaldo (% des BIP) 2013: -0,6; 2014: -0,4*; 2015: -0,8* 
Leistungsbilanzsaldo (% des BIP) 2013: 2,9*; 2014: 3,3*; 2015: -0,3* 
Investitionen (netto, öffentlich und 
privat, % des BIP) 
2013: 18,0*; 2014: 17,2*; 2015: 18,5* 
Jährliche Neuverschuldung (% des 
BIP) 
2013: 0,6; 2014: 0,4*; 2015: 0,8* 
Ausländische Direktinvestitionen 
- Transfer (Mio. US$) 2010: 211,3; 2011: 83,4; 2012: 93,8 
- Bestand (Mio. US$) 2010: 1.391,6; 2011: 1.475,1; 2012: 1.568,9 
Außenhandel 
Außenhandel (Mrd. US$) 2010 % 2011 % 2012 % 
Einfuhr 5,2 57,6 6,4 23,1 6,2 -3,1 
Ausfuhr 0,4 0,0 0,4 0,0 0,4 0,0 
Saldo -4,8 -6,0 -5,8 
Außenhandelsquote (Ex- + 
Importe/BIP in %) 
2010: 36,6; 2011: 38,0; 2012: 32,5 
Exportquote (Exporte/BIP in %) 2010: 2,6; 2011: 2,2; 2012: 2,0 
Einfuhrgüter nach SITC (% der 
Gesamteinfuhr) 
2012: Nahrungsmittel 4,1; Nichtmetallische Mineralien 2,6; 
Textilien/Bekleidung 2,1; Chem. Erzg. 0,8; Elektronik 0,2; 
Sonstige 90,2 
Ausfuhrgüter nach SITC (% der 
Gesamtausfuhr) 
2012: Textilien/Bekleidung 17,0; Nahrungsmittel 12,6; 
Rohstoffe 5,0; Erdöl 0,0; Chemikalien 0,0; Sonstige 65,4 
*) Schätzung bzw. Prognose 
© Germany Trade & Invest 2014 - Gefördert durch das Bundesministerium für Wirtschaft und Energie aufgrund eines 
Beschlusses des Deutschen Bundestages. 
Wichtige Handelspartner 
Beziehung der EU zu Afghanistan 
Außenhandel (Mio. Euro) 2011 % 2012 % 2013 % 
Einfuhr 
der EU 
47,6 15,5 56,5 18,7 55,6 -1,6 
Ausfuhr 
der EU 
890,0 15,8 934,5 5,0 572,6 -38,7 
Saldo 842,4 878,0 517,0 
Beziehung Deutschlands zu Afghanistan 
Außenhandel (Mio. Euro) 2011 % 2012 % 2013 % 
dt. Einf. 10,9 -53,0 14,3 31,2 13,2 -7,7 
dt. Ausf. 282,5 5,2 294,1 4,1 165,6 -43,7 
Saldo 271,6 279,8 152,4 
Deutsche Einfuhrgüter nach SITC (% 
der Gesamteinfuhr) 
2013: Nahrungsmittel 19,9; Rohstoffe 11,9; Nichtmetallische 
Mineralien 9,7; Textilien/Bekleidung 7,2; Chem. Erzg. 6,1; 
Sonstige 45,2 
*) Schätzung bzw. Prognose 
© Germany Trade & Invest 2014 - Gefördert durch das Bundesministerium für Wirtschaft und Energie aufgrund eines 
Beschlusses des Deutschen Bundestages. 
Deutsche Ausfuhrgüter 
nach SITC (% der 
Gesamtausfuhr) 
Rangstelle bei deutschen Einfuhren 2013: 144 * 
Rangstelle bei deutschen Ausfuhren 2013: 108 * 
Deutsche Direktinvestitionen (Mio. 
Euro) 
- Nettotransfer 
(Zunahme/Kapitalausfuhr: -) 
2011: -1; 2012: -1; 2013: 0 
Direktinvestitionen Afghanistans in 
Deutschland (Mio. Euro) 
- Nettotransfer 2011: 0; 2012: 0; 2013: 0 
Investitionsschutzabkommen Abkommen vom 19./20.4.05, in Kraft seit 12.10.07 
Bilaterale öffentliche 
Entwicklungszusammenarbeit 
- Finanzielle Zusammenarbeit 2012: 103 Mio. Euro 
- Technische Zusammenarbeit 2012: 90 Mio. Euro 
Botschaft der Bundesrepublik 
Deutschland 
Kabul, www.kabul.diplo.de 
Botschaft Afghanistans in 
Deutschland 
Berlin, www.botschaft-afghanistan.de 
Infrastruktur 
Straßennetz (befestigt) 2006: 12.350 km 
Festnetzanschlüsse 2012: 0 pro 1.000 Einwohner 
Mobiltelefonanschlüsse 2012: 604 pro 1.000 Einwohner 
Internetnutzer 2012: 54 pro 1.000 Einwohner 
Personenkraftwagen 2011: 21 pro 1.000 Einwohner 
Einschätzung des Geschäftsumfelds 
Hermes Länderkategorie 7 
Rangstelle: 
Ease of Doing Business 2014 164 von 189 Ländern 
*) Schätzung bzw. Prognose 
© Germany Trade & Invest 2014 - Gefördert durch das Bundesministerium für Wirtschaft und Energie aufgrund eines 
Beschlusses des Deutschen Bundestages. 
Global Competitiveness Index 2013- 
2014 
nicht gelistet beim World Economic Forum 
Corruption Perception Index 2013 175 von 177 Ländern 
Länderbonität Institutional Investor März 2014: Rang 171; Bonitätsindex 11,8; 1-Jahres- 
Veränderung 2,2 
Quellen: Germany Trade & Invest bemüht sich, in allen Datenblättern einheitliche Quellen zu nutzen, so dass die Daten 
für unterschiedliche Länder möglichst vergleichbar sind. Die kursiv gedruckten Daten stammen aus nationalen 
Quellen oder sind für das jeweilige Land in unserer Standardquelle nicht verfügbar. Dies ist bei einem Vergleich dieser 
Daten mit den Angaben in Datenblättern zu anderen Ländern zu berücksichtigen. Auf Anfrage nennen wir Ihnen gerne 
die für den jeweiligen Indikator verwendete Quelle. 
Ihr Ansprechpartner bei 
Germany Trade & Invest 
Ulrich Binkert 
T. +49 (0) 228 24993-267 
F. +49 (0) 228 24993-77-267 
ulrich.binkert@gtai.de 
Germany Trade & Invest ist die Gesellschaft zur Außenwirtschafts- 
förderung der Bundesrepublik Deutschland. Die Gesellschaft berät 
ausländische Unternehmen, die ihre Geschäftstätigkeit auf den deutschen 
Markt ausdehnen wollen. Sie unterstützt deutsche Unternehmen, die 
ausländische Märkte erschließen wollen, mit Außenwirtschaftsinfor- 
mationen. 
Germany Trade & Invest 
Gesellschaft für Außenwirtschaft und 
Standortmarketing mbH 
Villemombler Straße 76 T. +49 (0) 228 24993-0 
53123 Bonn F. +49 (0) 228 24993-212 
Deutschland info@gtai.de 
www.gtai.de
Das scheint weniger (?) verschoben wie bei dir zu sein, oder? Lässt sich damit eventuell eher etwas anfangen?

Beim GTAI habe ich bereits angefragt, leider wollen sie die Daten nicht als Excel zur Verfügung stellen. Daher muss ich irgendwie weiter versuchen, das Teil zum Laufen zu bringen

Vielen Dank und schönen Sonntag.
Bitte warten ..
Mitglied: colinardo
01.06.2014, aktualisiert um 11:35 Uhr
zu 1.) Ja es ist auf jeden Fall einfacher da die Daten dort schon in Tabellenform vorliegen, und du nicht auf die unvorhersehbare Umwandlung von pdftotext angewiesen bist.

zu 2.)
Die Parameter wie pdftotext aufgerufen wurde kannst du ja im Code nachvollziehen.

In meiner letzten Variante habe ich die Tabellenformatierung genommen:
pdftotext.exe -table -nopgbrk deinpdf.pdf"
Warum das Teil jetzt auf unterschiedlichen Systemen unterschiedliche Ergebnisse liefert kann ich im Moment nicht sagen, entweder du hast andere Parameter verwendet oder ??, da ist aber ein Auslesen aus dem Web wesentlich zuverlässiger. Ich mach die nächste Woche dazu mal ein Beispiel (sowas mach ich dann aber meistens entweder mit Powershell oder AutoIT)

Es wäre aber auch mal gut zu wissen welche Daten du brauchst und von welchen Ländern, sonst mach ich wieder das falsche Beispiel. Ich kann dir hier leider nicht mein ganzes Wissen dazu mitteilen, aber gegen ein entsprechendes Entgeld könnten wir darüber reden das ich dir die Daten als Excel aufbereite, meine Zeit ist ja auch nicht umsonst

Grüße Uwe
Bitte warten ..
Mitglied: xsto123
04.06.2014 um 19:39 Uhr
So, ich habe es jetzt endlich geschafft, im Büro nachzuschauen, welche Daten ich genau brauche. Zuerst einmal wollte ich nun doch die GTAI PDFs funktionstüchtig machen und mich danach erst um das CIA Factbook kümmern. Ich habe mir dazu alle PDFs die ich brauche gespeichert. Das Auslesen von Fläche und Einwohner funktioniert bei allen einwandfrei. Nun brauche ich noch folgende Felder:

Bruttoinlandsprodukt (BIP, nom.)
- Mrd. Euro 2012:2.666 2013:2.738 2014:2.835*

Wachstum der Industrieproduktion nach Sektoren (%, real)
2013: Kfz u. -teile 1,8; Maschinenbau -1,4; Nahrungsmittel 0,1; Elektronik -0,2; Elektrische Ausrüstungen -2,9; Metall-Erzeugnisse 1,4; chem. Erzeugnisse 0,6; Gummi- u. Kunststoffwaren 1,9

Inflationsrate (%) 2012: 2,1; 2013: 1,6; 2014: 1,7*

Arbeitslosenquote (%) 2012: 5,5; 2013: 5,4*; 2014: 5,3*

Staatsverschuldung (% des BIP, netto) 2012: 81,0; 2013: 78,4; 2014: 77,1*

Einfuhrgüter nach SITC (% der Gesamteinfuhr)
2013: Erdöl und Gas 13,9; Maschinen 11,9; Chem. Erzeugnisse 11,6 (dar. Arzneimittel 3,9); Elektrotechnik 9,8; Straßenfahrzeuge 7,9; Nahrungsmittel 6,1; Sonstige 38,8

Ausfuhrgüter nach SITC (% der Gesamtausfuhr)
2013: Maschinen 18,3; Straßenfahrzeuge 16,6; Chem. Erzeugnisse 14,7 (dar. Arzneimittel 5,2); Elektrotechnik 9,0; Metallwaren: 7,4; Nahrungsmittel: 4,7; Sonstige: 29,3

Meinst du, das bekommt man mit den Regex irgendwie hin? Ich habe einige TXT-Dateien kontrolliert und bei mir war eigentlich keine verschoben. Dafür funktioniert bei mir der -table Befehl überhaupt nicht.

Ich wäre dir unendlich dankbar, wenn du mir mit den Regex für diese Werte weiterhelfen könntest. Ich kann natürlich auch verstehen, wenn du das aufgrund der Zeit nicht kannst. Vielleicht würde es auch schon reichen, wenn du es mir noch mal an einem Beispiel erklären könntest. Ich kann leider nicht programmieren, daher fehlt mir wahrscheinlich das Grundverständnis für den Aufbau dieser Regex.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 04.06.2014, aktualisiert 05.06.2014
Hi,
habe vorgestern das Factbook komplett mit allen Ländern in ein Excel Sheet eingelesen. Die einzelnen Kategorien befinden sich dabei jeweils in einer separaten Zelle, aber noch nicht von Zahlen und Einheiten getrennt - das ist quasi unmöglich da hier soviel unterschiedliche Varianten vorkommen. Aber mit ein wenig Nacharbeit in Excel mit zusätzlichen Spalten und Formel ist das für dich sicherlich kein Problem.

Schick mir deine E-Mail-Adresse via Personal Message dann lass ich dir das Sheet morgen zukommen Oder ich schick dir einen Downloadlink.

Grüße Uwe
Bitte warten ..
Mitglied: xsto123
06.06.2014 um 20:01 Uhr
Hallo Uwe,

ich wollte kurz Bescheid geben, dass ich fast alle Regex hinbekommen habe (danke für den Tipp mit RegexBuddy, hat die Arbeit wirklich sehr erleichtert). Das einzige, woran ich jetzt noch scheitere ist:

Einfuhrgüter nach SITC (% der Gesamteinfuhr)
2013: Erdöl und Gas 13,9; Maschinen 11,9; Chem. Erzeugnisse 11,6 (dar. Arzneimittel 3,9); Elektrotechnik 9,8; Straßenfahrzeuge 7,9; Nahrungsmittel 6,1; Sonstige 38,8

Könntest du mir eventuell noch ein (hoffentlich) letztes Mal weiterhelfen? Wäre wirklich der Hammer

Vielen Dank
Bitte warten ..
Mitglied: colinardo
06.06.2014, aktualisiert um 22:49 Uhr
Hi Daniel,
ich wollte kurz Bescheid geben, dass ich fast alle Regex hinbekommen habe
super, respekt Da gibt sich mal einer Mühe, das ist hier oft nicht selbstverständlich. Daumen hoch!

Also aus der Lameng, ohne groß zu Testen, da ich hier den Originaltext von pdftotext nicht da habe und nur mein Smartphone sollte das in etwa so aussehen:
Ich habe es mit dem Drumherum geschrieben, da dies ja ein zweistufiger Prozess ist (erst mal die Zeile mit den Werten extrahieren und dann jeweils das Gut und die dazugehörige Prozentzahl). Das sind ja nicht immer gleich viele Güter in den PDFs ... deswegen dieser Weg!
01.
regex.pattern = "^(Einfuhrgüter nach SITC)[\s\S]+?^(\d{4}):([\s\S]+?)^Ausfuhrgüter" 
02.
regex.Ignorecase = True 
03.
regex.Multiline = True 
04.
set matches = regex.Execute(strTXT) 
05.
if matches.Count > 0 then 
06.
	category = matches(0).Submatches(0) 
07.
	jahr = matches(0).Submatches(1) 
08.
	msgbox category 
09.
	msgbox jahr 
10.
	result = Replace(Trim(matches(0).Submatches(2)),vbNewline,"") 
11.
	regex.Global = True 
12.
	regex.pattern = "([^;]+?)([\d,]+)" 
13.
	set smatches = regex.Execute(result) 
14.
	for each match in smatches 
15.
		gut = match.Submatches(0) 
16.
		prozent = match.Submatches(1) 
17.
		msgbox gut & ":" & prozent 
18.
	Next 
19.
else 
20.
 	msgbox "No Match" 
21.
End if
Schöne Pfingsten bei diesem Traumwetter
Grüße Uwe
Bitte warten ..
Mitglied: xsto123
07.06.2014 um 15:00 Uhr
Hallo Uwe,

auch das funktioniert wieder perfekt. Vielen Dank für die riesige Mühe, die du dir hier machst.
Es ist mir schon richtig peinlich zu fragen, aber nun werden die Daten ja per Msg Box ausgegeben. Bekomme ich die irgendwie noch in jeweils eine neue Zelle? Bestenfalls so (Beispiel):

Deutschland | 2011 | Erdöl | 20,5 | Eisen | 8,5 | usw.

Ich habe es schon selbst versucht, aber leider bekomme ich immer nur den letzten Wert in eine Zelle. Wahrscheinlich muss da irgendwie eine Schleife rein, damit er immer neue Spalten einfügt, solange es Daten gibt, oder? Leider übersteigt das meine Kenntnisse

Viele Grüße
Bitte warten ..
Mitglied: colinardo
LÖSUNG 07.06.2014, aktualisiert um 18:12 Uhr
ich weis jetzt zwar nicht in welcher Spalte du dich befindest, aber das legst du in Zeile 9 fest.
01.
regex.pattern = "^(Einfuhrgüter nach SITC)[\s\S]+?^(\d{4}):([\s\S]+?)^Ausfuhrgüter" 
02.
regex.Ignorecase = True 
03.
regex.Multiline = True 
04.
set matches = regex.Execute(strTXT) 
05.
if matches.Count > 0 then 
06.
	category = matches(0).Submatches(0) 
07.
	jahr = matches(0).Submatches(1) 
08.
 
09.
        currentColumn = 10 
10.
        rnglastRow.Cells(1,currentColumn).Value = category 
11.
        rnglastRow.Cells(1,currentColumn + 1).Value = jahr 
12.
 
13.
	result = Replace(Trim(matches(0).Submatches(2)),vbNewline,"") 
14.
	regex.Global = True 
15.
	regex.pattern = "([^;]+?)([\d,]+)" 
16.
	set smatches = regex.Execute(result) 
17.
 
18.
        currentColumn = currentColumn + 2 
19.
 
20.
	for each match in smatches 
21.
		gut = match.Submatches(0) 
22.
		prozent = match.Submatches(1) 
23.
                 
24.
	        rnglastRow.Cells(1,currentColumn).Value = gut 
25.
                rnglastRow.Cells(1,currentColumn + 1).Value = prozent 
26.
                currentColumn = currentColumn + 2 
27.
	Next 
28.
else 
29.
 	msgbox "No Match" 
30.
End if
Grüße Uwe
Bitte warten ..
Mitglied: xsto123
07.06.2014 um 18:12 Uhr
Du bist ein Gott. :D
Habe mein Script vollendet und über alle Länder laufen lassen. Ich muss nur noch ganz wenige von Hand nacharbeiten (max. 15 Minuten Arbeit). Normalerweise wäre ich an der ganzen Liste bestimmt mehrere Wochen gesessen. So habe ich jetzt zwar auch einige Stunden in das Script und das Lernen der Regex investiert, aber das bringt mir zum einen persönlich auch etwas und zweitens kann man die Liste nun immer sehr schnell aktualisieren, wenn die PDFs erneuert werden.

Nun kann ich nächste Woche beruhigt ins Büro. Vielen Dank dir. Wünsche ein tolles sonniges WE.
Bis demnächst mal wieder ;)
Bitte warten ..
Mitglied: cuwie.de
18.03.2015 um 14:31 Uhr
Hallo zusammen,

ich muss das hier mal wieder ein bisschen aufwärmen, weil es mir auch sehr viel geholfen hat, Danke dafür schonmal vorweg.
In meinem Falle nutze ich das Script um PDF-Rechnungen auszulesen und in Excel zu erfassen. Dank der zusätzlichen Regex-Tipps und -Links bekomme ich so die Eckdaten (Rechnungsnummer, Datum, Gesamtbetrag etc.) wunderbar raus, aber wie schaffe ich es, die Detailangaben der Rechnungen auszulesen?
Meine Rechnungen sehen ungefähr so aus:

Kopfdaten
Kopfdaten
Kopfdaten
Kopfdaten
Kopfdaten
Kopfdaten
Kopfdaten

Allgemeine Informationen
Allgemeine Informationen
Allgemeine Informationen

Rechnungsdetails:
Bestellung 0815
Mitarbeiter 01 Tag 01 - Tag 03
Tag 01 5 STD 42,00 EUR 210,00 EUR
Tag 02 5 STD 42,00 EUR 210,00 EUR
Tag 03 5 STD 42,00 EUR 210,00 EUR

Mitarbeiter 02 Tag 01 - Tag 03
Tag 01 5 STD 42,00 EUR 210,00 EUR
Tag 02 5 STD 42,00 EUR 210,00 EUR
Tag 03 5 STD 42,00 EUR 210,00 EUR
Gesamt Bestellung 0815 1.260,00 EUR

Bestellung 0816
Mitarbeiter 01 Tag 01 - Tag 03
Tag 01 5 STD 42,00 EUR 210,00 EUR
Tag 02 5 STD 42,00 EUR 210,00 EUR
Tag 03 5 STD 42,00 EUR 210,00 EUR

Mitarbeiter 02 Tag 01 - Tag 03
Tag 01 5 STD 42,00 EUR 210,00 EUR
Tag 02 5 STD 42,00 EUR 210,00 EUR
Tag 03 5 STD 42,00 EUR 210,00 EUR
Gesamt Bestellung 0816 1.260,00 EUR
Gesamt 2.520,00 EUR
,
Fußzeile
Fußzeile
Fußzeile
Fußzeile
__________________________________________________________________________

Am liebsten wäre mir jetzt eine Liste, in der ich je gearbeitetem Tag eine Zeile bekomme, für die Auswertung brauche ich natürlich je Zeile auch allgemeine Angaben, aber wie gesagt, das klappt ja schon. Wie muss ich vorgehen, um die einzelnen Zeilen rauszuziehen? Mit Regex komme ich da ja nicht wirklich weiter...
Hat noch jemand hier einen Tipp für mich? Danke schonmal im Voraus!

Gruß,

Carsten
Bitte warten ..
Mitglied: colinardo
18.03.2015, aktualisiert um 14:34 Uhr
Hallo Carsten,
bitte mach dafür einen eigenen Thread auf, Danke. Den Usprungs-TO interessiert das sicher nicht !

Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

Batch & Shell
gelöst Loginzeiten aus dem Ereignisprotokoll in Excel schreiben (1)

Frage von l-Ne0n zum Thema Batch & Shell ...

Microsoft Office
gelöst Verschieben von Zellinformation in andere Spalte (per VBA) excel 2010 (5)

Frage von thomas1972 zum Thema Microsoft Office ...

VB for Applications
Bilder vom LDAP in VBA - Excel (3)

Frage von Roadrunner777 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (10)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...