Avatar billede dane022 Seniormester
19. april 2023 - 21:09 Der er 7 kommentarer og
1 løsning

Vba: Hent tekst fra PDF via Word (figurer)

Jeg prøver at hente tekst fra en blanket der oprindeligt er i PDF. Målet er at få overført oplysningerne fra blanketten til Excel via Word. Problemet opstår ved at ikke al tekst hentes med til Excel. Det skyldes, at dele af blanketten ved åbning i Word i stedet for tekst, vises som figurer med tekst og den del hentes ikke med. F.eks. er denne kode brugt:

For Each pg In wdoc.Paragraphs
    wline = pg.Range.Text
    Debug.Print wline
    Next pg

Det er ikke lykkedes mig at finde en løsning på at hente den tekst der er inden i figurer. Jeg tænker mine handlemuligheder enten er at finde en vba kode der kan finde ud af at hente fra figurer, eller også en anden/bedre konvertering fra PDF til Excel.

Hvad ville eksperterne råde mig til?

Iflg. vba optager i Word, så har et eksempel på en figur nedenstående ID, men det fejler når jeg kører koden:
    ActiveDocument.Shapes.Range(Array("Group 4069")).Select
    ActiveDocument.Shapes.Range(Array("Rectangle 87")).Select
Avatar billede ebea Ekspert
19. april 2023 - 22:08 #1
De fleste programmer, er ikke egnet til at hente tekst ud af PDF filer, hvis teksten er indlejret i figurer.
For at det skal lykkes, skal du bruge et program som kan OCR scanne samtidig. d.v.s. at al tekst scannes igennem, og hentes ud.

"Problemet" med disse, er at det er købe programmer. Og Word kan som du har opdaget, heller ikke gøre det med at hente tekst ud af "kasserne", som de er indlejret i.

Programmet som jeg linker til her, kan gøre det online, mod betaling:
https://smallpdf.com/pdf-to-excel
Avatar billede Tom K. Forsker
19. april 2023 - 22:08 #2
Excel 2021 har allerede funktionen til at importere data fra pdf filer direkte så du undgår Word, skulle det være enløsning eller skal det være vba kode?
Avatar billede ebea Ekspert
19. april 2023 - 22:22 #3
#2 - Den funktion har samme problem, som OP oplever.
Avatar billede dane022 Seniormester
19. april 2023 - 22:24 #4
Hej Tom. Det er nødt til at være en automatiseret løsning.

Har, efter jeg oprettede spørgsmålet, set en youtube video hvor PDF dokumentet åbnes i notepad og derfra hentes ind i excel, netop for at få alt med. Ved ikke om det er en god løsning
Avatar billede Tom K. Forsker
19. april 2023 - 22:59 #5
#dane022
Du kan sagtens lave en automatiseret funktion i fanebladet data.
Har selv lavet import af halv store mængder af pdf filer, men vil indskyde at disse var elektronisk genereret og ikke en scanning. De var fra en fast formular.
Jeg har ingen erfaring med import fra NotePad, men jeg syntes du skal prøve det af, og del gerne dine erfaringer her.
Mvh 😉
Avatar billede thomas_bk Ekspert
20. april 2023 - 14:44 #6
Du kan måske have bedre held ved at bruge kameraet til at importere med.

Eksempel her
https://www.youtube.com/watch?v=nfMv_xvMS7E
Avatar billede thomas_bk Ekspert
20. april 2023 - 14:46 #7
Nyere excel kan også importere data fra billedfiler, så måske det er nemmere end at gå via kameraet
Avatar billede dane022 Seniormester
20. april 2023 - 21:44 #8
Det blev notepad løsningen det endte med. Det er selvfølgelig en mærkelig formatering det hentes ind med. Æ, ø og å kan den ikke finde ud af. Men med udskift formlen, kan jeg hente det jeg skal bruge

Sub hent_kvittering_indhold()
Dim form_filename As String
Dim fso As New FileSystemObject
Dim tstream As TextStream
Dim vline, vkey As String
Dim Række, Kolonne As Integer
Dim lastRow, lastcolumn As Long

Application.ScreenUpdating = False
Application.Calculation = xlManual

vkey = ") Tj"
form_filename = "C:\Users\" & Environ("USERNAME") & "\downloads\document.pdf"
Set tstream = fso.OpenTextFile(form_filename, ForReading, False)

Do While Not tstream.AtEndOfStream
    vline = tstream.ReadLine

lastRow = Worksheets("kvittering").Cells(Rows.Count, 1).End(xlUp).Row + 1
lastcolumn = 1 'Worksheets("kvittering").Cells(1, Columns.Count).End(xlToLeft).Column + 1

If InStr(vline, vkey) > 0 Then
    Worksheets("kvittering").Cells(lastRow, lastcolumn).Value = vline
    lastRow = lastRow + 1
    End If
    Loop

Set tstream = Nothing
Set fso = Nothing

Kill form_filename

Application.ScreenUpdating = True
Application.Calculation = xlAutomatic

End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester