Avatar billede steensommer Praktikant
20. maj 2004 - 14:28 Der er 5 kommentarer og
2 løsninger

Kopiere fra word til text-fil

Hej WORD og VBA eksperter

Opgaven lyder i sin enkelthed på at dele af et word-dokument skal kopieres over i en txt-fil kaldet patient.txt. Den skal anvendes af en elektronisk patient journal der har specifikke krav til opbygning af txt-filen (jeg forsøger at sammenkæde et
velfungerende word dokument med journalprogrammet). Egentlig fungerer nedenstående godt nok - jeg har dog følgende problemer:

1) En teksfil har åbenbart en max-længde hvorfor ikke alt tekst medtages - kan det laves således at der automatisk skiftes linie efter et antal tegn - og at denne nye linie starter med:  Tekst:

2) Den sidste kopierede gruppe er en tabel i word. Den kopierer desværre tabellen og ikke kun data hvorved den fremkommer en del der ikke kan anvendes i en txt-fil - kan det ændres?

3) Kan det lade sig gøre at fjerne tomme linier i tekst-filen patient.txt

Sub ExportData()
'Leo Heuser, 18-5-2004
Dim DummyRange As Range
Dim EndWord As String
Dim EndRange As Range
Dim StartWord As String
Dim StartRange As Range
Dim WantedRange As Range

    StartWord = "efterbehandling"
    EndWord = "efterkontrol"
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=StartWord, MatchCase:=False
    DummyRange.Select
    Selection.Move unit:=wdLine, Count:=1
    Set StartRange = Selection.Range
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=EndWord, MatchCase:=False
    Set EndRange = DummyRange
    Set WantedRange = ActiveDocument.Range(Start:=StartRange.Start,
End:=EndRange.Start)
    WantedRange.Copy
    ChangeFileOpenDirectory "F:\Faelles\InDex\dokumenter\Epikriseskabelon\"
    Documents.Open FileName:="Ganglion.dot"
    ActiveDocument.Bookmarks("Medicin").Select
    Selection.Paste

    ThisDocument.Activate
    StartWord = "efterkontrol"
    EndWord = "epikrise"
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=StartWord, MatchCase:=False
    DummyRange.Select
    Selection.Move unit:=wdLine, Count:=1
    Set StartRange = Selection.Range
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=EndWord, MatchCase:=False
    Set EndRange = DummyRange
    Set WantedRange = ActiveDocument.Range(Start:=StartRange.Start,
End:=EndRange.Start)
    WantedRange.Copy
    ChangeFileOpenDirectory "F:\Faelles\InDex\dokumenter\Epikriseskabelon\"
    Documents.Open FileName:="Ganglion.dot"
    ActiveDocument.Bookmarks("Efterkontrol").Select
    Selection.Paste

    ThisDocument.Activate
    StartWord = "epikrise"
    EndWord = "undersøgelser"
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=StartWord, MatchCase:=False
    DummyRange.Select
    Selection.Move unit:=wdLine, Count:=1
    Set StartRange = Selection.Range
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=EndWord, MatchCase:=False
    Set EndRange = DummyRange
    Set WantedRange = ActiveDocument.Range(Start:=StartRange.Start,
End:=EndRange.Start)
    WantedRange.Copy
    ChangeFileOpenDirectory "F:\Faelles\InDex\dokumenter\Epikriseskabelon\"
    Documents.Open FileName:="Ganglion.dot"
    ActiveDocument.Bookmarks("Epikrise").Select
    Selection.Paste

    ThisDocument.Activate
    StartWord = "undersøgelser"
    EndWord = "overlæge"
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=StartWord, MatchCase:=False
    DummyRange.Select
    Selection.Move unit:=wdLine, Count:=1
    Set StartRange = Selection.Range
    Set DummyRange = ActiveDocument.Content
    DummyRange.Find.Execute findtext:=EndWord, MatchCase:=False
    Set EndRange = DummyRange
    Set WantedRange = ActiveDocument.Range(Start:=StartRange.Start,
End:=EndRange.Start)
    WantedRange.Copy
    ChangeFileOpenDirectory "F:\Faelles\InDex\dokumenter\Epikriseskabelon\"
    Documents.Open FileName:="Ganglion.dot"
    ActiveDocument.Bookmarks("Undersøgelser").Select
    Selection.Paste

    ActiveDocument.SaveAs
FileName:="\\Server\faelles\InDex\Dokumenter\Epikriseskabelon\patient.txt",
FileFormat:=wdFormatText, _
        LockComments:=False, Password:="", AddToRecentFiles:=True,
WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False,
SaveAsAOCELetter:= _
        False, Encoding:=1252, InsertLineBreaks:=False,
AllowSubstitutions:=False _
        , LineEnding:=wdCRLF

End Sub


vh Steen
Avatar billede rvm Nybegynder
20. maj 2004 - 18:10 #1
Hej

Ad 1:
Jeg ville starte med at gemme filen som en .txt - så bliver den automatisk konverteret og problemet med linielængde er løst.

Ad 2:
Word har en funktion, hvor du kan lave en tabel om til tekst:
Vælg menupunktet Tabel, Konverter, "Tabel til tekst"

Ad 3:
Lav en funktion, der starter med i Cursoren i toppen af dokumentet.
Tryk Shift + End (linien markeres)
Tæl længden af det markerede
Hvis den kun et punkt lang, så er det en tom linie
Slet linien

Jeg har har dog ikke lige testet punkt 3, men det skulle virke *S*
Avatar billede steensommer Praktikant
20. maj 2004 - 19:52 #2
Hej
Ad 1) Hvorfor skulle det at starte med at gemme filen løse konverteringsproblemet?
Ad 2) Jo men det skulle jo alt sammen gøres med ovenstående VBA (eller tilsvarenden) og ikke manuelt - skal anvendes af sekretærer
Ad 3) Idéen lyder godt men tror du det fungerer i en tekst-fil?
Avatar billede rvm Nybegynder
20. maj 2004 - 20:45 #3
Hej
Ad 1: Fordi, du så ikke får problemet med de lange sætninger

Ad 2: Ja - men du har jo allerede markeret området. Så kan du jo optage en makro, der konverterer området til tekst og derefter kopierer det - og selvfølgelig sætte makroen ind i din kode.

Her er et kodeeksempel:
    Selection.Rows.ConvertToText Separator:=wdSeparateByTabs, NestedTables:=True

Ad 3: Du kunne gøre det i hele dokumenter før du begynder kopieringen
Avatar billede steensommer Praktikant
20. maj 2004 - 20:50 #4
Hej
Jeg har dog fortsat det problem at den skabelon (Ganglion.dot) der danner udgangspunktet for patient.txt jo indeholder bookmarks hvori den kopierede text skal indsættes - og text'en skal stå på en helt speciel måde for at blive accepteret af programmet. Bookmarks forsvinder vel i det øjeblik jeg gemmer .dot filen som text?
Avatar billede rvm Nybegynder
20. maj 2004 - 23:33 #5
Det har du ret i... Har du prøver at gemme indholdet i en streng før du sætter det ind i text-filen?
Avatar billede steensommer Praktikant
21. maj 2004 - 08:30 #6
"Desværre" på ferie de næste dage så jeg når ikke at gøre det færdigt før efter weekenden :0)
Avatar billede steensommer Praktikant
25. juni 2004 - 23:40 #7
Hej rvm

Undskyld den lange ventetid. Jeg har fået hjælp fra anden side men din tid skal selvfølgelig belønnes - vi deler point. OK?

vh Steen
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
Kategori
Tag et kursus i Word og øg effektiviteten

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