Veröffentlicht 17. Juli 201312 j Gibt es eine Möglichkeit au meiner vb.net Anwendung heraus die Position eines bestimmten Wortes in einem Worddocument zu ermitteln? Quasi sowas wie range.indexof(text)?
17. Juli 201312 j Du hast doch alle Stichwoerter die du brauchst... aber weil du so nett fragst: Let me google that for you
17. Juli 201312 j Autor ich suche nicht den Index des wortes in einem vb.net internen String, sondern in einer Worddatei, klar kann ich den ganzen text der Worddatei in einen String kopieren, aber die frage war so gemeint ob es auch direkt geht. Bearbeitet 17. Juli 201312 j von Lsteinme
17. Juli 201312 j Autor Szenario: Ich habe mir eine Formatvorlage erstellt, diese wird mit XML dateien befüllt. Ganz oben ist eine Tabelle mit Daten darüber an wen das Dokument gehen soll sowie einigen weiteren Dingen. darunter soll ein Inhaltsverzeichnis darunter dann alle XML-Items. Es geht darum das Inhaltsverzeichnis, welches ich dummerweise über den Word-mechanismus NACH der XML einlese erzeugen muss zwischen die Tabelle ganz oben und das erste XML-Item zu platzieren(Grund dafür ist irrelevant). Hierfür habe ich in der vorlag das Wort XPLACEOFCONTENTTABLEX eingefügt. jetzt muss ich halt raus finden an welcher stelle genau dieses Wort in meinem Worddokument beginnt. der Code für das einfügen der Contenttable wäre dann folgender: dim s as string="XPLACEOFCONTENTTABLEX " dim startofword as integer= worddoc.range.METHODENNAME(s) With WordDoc .TablesOfContents.Add(Range:=WordDoc.Range(startofword, startofword+s.length), _ RightAlignPageNumbers:=True, _ UseHeadingStyles:=True, _ IncludePageNumbers:=True, _ AddedStyles:="styleSection", _ UseHyperlinks:=False, _ HidePageNumbersInWeb:=True, _ UseOutlineLevels:=True) .TablesOfContents(1).Range.Font.Size = 12 .TablesOfContents(1).TabLeader = Word.WdTabLeader.wdTabLeaderDots End With oder so ähnlich, ob das mit dem Length sein muss müsst ich dann halt noch sehen. Bearbeitet 17. Juli 201312 j von Lsteinme
17. Juli 201312 j Nochmal die Frage: Was genau meinst du mit Position? In welcher Form muss die Positionsinformation vorliegen, damit du dort einfügen kannst?
17. Juli 201312 j Ich bin weder VB- noch .net-Fan, aber vielleicht hilft dir das hier weiter. Dort ist erleutert, wie man Word-Dateien öffnen kann, Suchen musst du dann selber hinkriegen.
17. Juli 201312 j Autor @Klotzkopp das ist ne gute Frage, ich vermute stark es geht hier um die Position des Buchstabens im Fliestext, also ohne interne Formatierungszeichen etc, da ich es aber auch nicht sicher weis, hab ich die frage nach der .Indexof methode gesellt, die mit der Range methode von Word vernünftig zusammen arbeitet^^ @pr0gg3r, öffnen kann ich sie ja, das Inhaltsverzeichnis ist auch drin, nur aktuell an der aller ersten Position im Text, was gleich wieder gemecker von den Leuten die das Wordinhaltsverzeichnis haben wollten nach sich ziehen wird^^ Es gibt in bei der COM-Komponete zwar den begriff des "Find" als Attribut eines Worddocuments, ich hab aber noch nicht raus ob und wie man damit was anderes machen kann wie den bestehenden Text durch einen anderen zu ersetzen.
17. Juli 201312 j ich vermute stark es geht hier um die Position des Buchstabens im Fliestext, also ohne interne Formatierungszeichen etc, da ich es aber auch nicht sicher weis, hab ich die frage nach der .Indexof methode gesellt, die mit der Range methode von Word vernünftig zusammen arbeitet^^ Vermutungen helfen dir hier nicht weiter. Prüf nach, was genau du zum Einfügen brauchst, dann kann man gezielt suchen. Es bringt ja nichts, wenn wir hier herausarbeiten, wie man den absoluten Zeichenindex oder Zeilen- und Spaltennummer oder was weiß ich heraussucht, und am Ende brauchst du ein Absatz-Objekt mit Offset.
17. Juli 201312 j Autor ok es scheint sich um den index des Buchstaben im fliestext zu handeln, ich habs jetzt einfach mal mit range.text.indexof versucht, das geht aber etwas in die hose, weil im range.text jede menge Schwarze ausgefüllte kreise drin sind, die nicht mit zur zeichenposition zählen wenn ich die Position an Word zurück gebe. Obendrein, kann ich die Punkte auch nicht einfach zählen und später abziehen, weil mein Visualstudio sich weigert das Zeichen irgendwie anzuzeigen, außer es ist in dem String... Bearbeitet 17. Juli 201312 j von Lsteinme
17. Juli 201312 j Laut Doku sollte Range.Text unformatierten Text enthalten. Wo siehst du denn diese schwarzen Kreise? Im Debugger?
17. Juli 201312 j Autor hai, wenn ich worddoc.range.text sage und gehe mit dem Mauszeiger über den Text sehe ich die kreise, klick ich rein, sind sie nicht da. ich Checke grade noch was die berechnung hier durcheinander bringt, die "Kreise" warens nicht. Das sind scheinbar zeichen für "Hier steht kein Zeichen", was normalerweise nicht optisch interpretiert wird kopier mal "" und entfern die beiden Anführungsstriche, aber im Editor, da siehst du das Zeichen. EDIT: Halt sie warens doch Ich hatte beim späteren indexbestimmen noch ne alte ungefilterte Referenz drin
17. Juli 201312 j Autor Dim s As String = "XPLACEFORSUMMARYX" Dim text As String = worddoc.Range.Text text = text.Replace(""c, "") text = text.Trim Dim startpos As Integer = text.IndexOf(s) war die lösung für das Indexproblem, wenn auch wahrscheinlich nicht die beste, da ich erst auslesen, dann suchen musste. schätze es müsste eigentlich auch ohne auslesen gehen.
17. Juli 201312 j Autor Arbeitest du mit Spracherkennung? Noch nicht, wär aber mal nicht ganz praktisch^^
18. Juli 201312 j Hallo habe das Thema "nur" überflogen, aber wenn du mit ".docx" Dokumenten arbeitest hilft dir folgendes vielleicht weiter: Download Open XML SDK 2.0 for Microsoft Office from Official Microsoft Download Center Gruß Hans-Jörg
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.