Toon posts:

[vb.net] .DOC en .ODT bestanden openen in texteditor

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een tekstverwerker en ben al dagen lang opzoek naar de code om .DOC en .ODT bestanden te laten openen - en het dus goed laat uitlezen, nu krijg ik een rare onleesbare tekst. Maar ik kan dus niets vinden.

Kan iemand mij misschien helpen.

Dit is mijn gebruikte code, alvast bedankt!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub LinkerBoxToolStripMenuItem1_Click(sender As System.Object, e As System.EventArgs) Handles LinkerBoxToolStripMenuItem1.Click
       
        Dim AllText As String = "", Lineoftext As String = ""
        OpenFileDialog1.Filter = "All Files |*.*"
        OpenFileDialog1.ShowDialog()
        If OpenFileDialog1.FileName <> "" Then

        End If
        Try
            FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
            Do Until EOF(1)
                Lineoftext = LineInput(1)
                AllText = AllText & Lineoftext & vbCrLf
            Loop
            RichTextBox1.Text = AllText
        Catch
        Finally
            FileClose(1)
        End Try
      end sub

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat het volgende je wel verder helpt: Wikipedia: OpenDocument

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Open eens een van die twee files in een teksteditor. Wat jij daar ziet, ziet VB.NET ook. Je code weet niet dat het een Word of OpenOffice-document betreft als jij het gewoon behandelt als een platte tekstfile. Verder: wat heeft je zoektocht opgeleverd? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Big Joe
  • Registratie: Maart 2004
  • Laatst online: 22-09 21:57
Wat je het beste kunt doen is Word het bestand laten openen. Word kan vanzelfsprekend de tekst van het bestand wel gewoon lezen, dus dat scheelt jou een hoop werk. De onderstaande code opent Word (in jouw geval moet je dit nog iets aanpassen zodat hij het bestand opent dat je wilt inlezen).

Daarna stuurt hij de code CTRL+A, gevolgt door CTRL+C.
Daarna kunnen we de tekst uitlezen door het clipboard uit te lezen.

Op deze manier hoef je niet moeilijk te doen met het inlezen van de bestanden!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Module Module1
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Integer)
    Sub Main()
        Dim WshShell = CreateObject("WScript.Shell")
        WshShell.Run("WINWORD", 9)
        Sleep(2000)

        WshShell.SendKeys("^a")
        Sleep(1000)
        WshShell.SendKeys("^c")
        Sleep(1000)

        Dim text As String
        text = My.Computer.Clipboard.GetText()
    End Sub

End Module

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ja, want Word opstarten en wat keys simuleren is natuurlijk veel beter en veel handiger voor de gebruiker dan domweg de COM-component die ervoor bestaat gebruiken. Voor de duidelijkheid, youris1: dit wil je dus absoluut niet doen. Ik weet niet eens waar ik moet beginnen met uitleggen waarom niet.....

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Big Joe
  • Registratie: Maart 2004
  • Laatst online: 22-09 21:57
NMe schreef op dinsdag 12 april 2011 @ 16:46:
Ja, want Word opstarten en wat keys simuleren is natuurlijk veel beter en veel handiger voor de gebruiker dan domweg de COM-component die ervoor bestaat gebruiken. Voor de duidelijkheid, youris1: dit wil je dus absoluut niet doen. Ik weet niet eens waar ik moet beginnen met uitleggen waarom niet.....
Nou, ik vraag me toch wel af waarom jouw methode beter zou zijn (serieus).

Het COM-component staat nou niet bekent om zijn gebruiksvriendelijkheid en de performance laat ook de nodige wensen over! Bovendien is dit makkelijker te debuggen, omdat je precies kan instellen wat er allemaal gebeurt. Van het COM-component weet je niet wat er allemaal op de achtergrond gebeurt.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Big Joe schreef op dinsdag 12 april 2011 @ 16:50:
[...]

Nou, ik vraag me toch wel af waarom jouw methode beter zou zijn (serieus).

Het COM-component staat nou niet bekent om zijn gebruiksvriendelijkheid en de performance laat ook de nodige wensen over! Bovendien is dit makkelijker te debuggen, omdat je precies kan instellen wat er allemaal gebeurt. Van het COM-component weet je niet wat er allemaal op de achtergrond gebeurt.
Je wil serieus een third party applicatie runnen alleen om jouw applicatie te laten werken. Dat brengt met zich mee: meer geheugengebruik, overbodig veel extra processorkracht, enz. Bovendien zit je keypresses te simuleren. Werkt lekker als Word een foutmelding opgooit of een andere vorm van input vraagt na startup, bijvoorbeeld om je licentie te activeren. En dan heb ik het nog niet over je sleeps....wat nou als het starten langer duurt dan twee seconden? Wat nou als gedurende de tijd dat je script draait ineens een ander programma de focus krijgt? Ga je ineens willekeurige andere dingen copy/pasten.

Nogmaals, deze methode is echt Fout met een hoofdletter F.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 27-09 00:06

ZaZ

Tweakers abonnee

Het COM component is gewoon een library waarvan je gewoon weet wat er gebeurt. Bij jouw methode heb je geen idee wat er gebeurt. Om maar een paar dingen te noemen:
Sendkeys werkt nagenoeg niet meer op nieuwe Windows (gelukkig)
Als het wel werkt, dan knal je gewoon toetsen naar je programma met 0,0 validatie of iets wel gelukt is.
Die Sleeps zijn gewoon gokjes van hoe lang het programma nodig heeft om op te starten of acties uit te voeren.

Eigenlijk is bijna elke regel code van die snippet gewoon keihard fout. Sorry, maar veel genuanceerder kan ik het niet brengen.

Lekker op de bank


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:43
Big Joe schreef op dinsdag 12 april 2011 @ 16:50:
[...]


Nou, ik vraag me toch wel af waarom jouw methode beter zou zijn (serieus).

Het COM-component staat nou niet bekent om zijn gebruiksvriendelijkheid en de performance laat ook de nodige wensen over! Bovendien is dit makkelijker te debuggen, omdat je precies kan instellen wat er allemaal gebeurt. Van het COM-component weet je niet wat er allemaal op de achtergrond gebeurt.
- Ik heb geen Word op mijn PC staan
- Ik heb net een andere tekst in mijn clipboard gezet, die ik straks nodig ga hebben
- ...

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

- Ik heb een andere versie van Word op mijn pc staan die andere toetsaanslagen accepteert
- Ik heb een andere taalversie van Word/Windows waardoor de shortcut keys anders zijn

;)

Overigens zou de TS misschien makkelijker met OpenOffice/LibreOffice aan de gang gaan (er zijn voorbeelden voor VB.Net/C# gebruik met OpenOffice).
In het ergste geval (gebruiker heeft geen LibreOffice of Office), kan (een subset van) Libreoffice gedistribueerd worden. Ik had ergens een site gezien waarop op een ASP.NET server LibreOffice zo gebruikt is om documentconversies uit te voeren, dacht op Codeproject.com.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
NMe schreef op dinsdag 12 april 2011 @ 17:04:
[...]

Nogmaals, deze methode is echt Fout met een hoofdletter F.
Ik ben het helemaal met je eens, don't get me wrong. Maar de COM component doet in wezen gewoon precies hetzelfde, heb je alleen een API eromheen.

Als het effe kan zou ik sowieso helemaal wegblijven van alles wat met Office Interop te maken heeft.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Grijze Vos schreef op woensdag 13 april 2011 @ 08:55:
Maar de COM component doet in wezen gewoon precies hetzelfde
Ik vind het verschil nogal wezenlijk eigenlijk; je clipboard blijft in tact, je zit niet te frotten met sendkeys, focus en andere zaken, je kunt fouten vangen en afhandelen en krijgt dus feedback (met wat screenshots en OCR kom je misschien wat dichterbij :+ ), de memory footprint is een stuk lager, je kunt het in een server-omgeving betrouwbaar(der) gebruiken etc. etc.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Het zal altijd sneller zijn als er een API is die Office-functionaliteit kan nabootsen in plaats van aanspreken natuurlijk, maar ik ken zelf alleen COM en heb geen idee wat je nog meer kan gebruiken. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Iedereen bedankt en sorry voor de late reactie :O.
Pagina: 1