{"id":55000346,"date":"2023-02-01T00:00:00","date_gmt":"2023-03-02T20:58:36","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=346"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Uebersetzen_mit_Word_und_DeepL","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Uebersetzen_mit_Word_und_DeepL\/","title":{"rendered":"&Uuml;bersetzen mit Word und DeepL"},"content":{"rendered":"<p><b>Nachdem wir schon gezeigt haben, wie Du Texte in einer Excel-Tabelle &uuml;bersetzen kannst, schauen wir uns nun an, wir die die DeepL-Techniken f&uuml;r die Gegen&uuml;berstellung der englischen und der deutschen Version eines Textes nutzen k&ouml;nnen. Dazu wollen wir bei einem Text beginnen, der sich in einem Word-Dokument befindet und diesen in ein neues Dokument &uuml;bertragen, wo wir die einzelnen Abs&auml;tze des Textes in jeweils eine Zelle in der linken Spalte einer Word-Tabelle einf&uuml;gen. Nachdem wir den Text so auf die Zellen einer Tabelle aufgeteilt haben, wollen wir in der rechten Spalte per Aufruf der DeepL-REST-API die &Uuml;bersetzung in der gew&uuml;nschten Sprache unterbringen. Das Ergebnis: Die &Uuml;bersetzung eines Textes, wobei jeweils ein Absatz in der einen Sprache dem gleichen Absatz in der anderen Sprache gegen&uuml;bergestellt wird.<\/b><\/p>\n<p>Den VBA-Code, mit dem wir die gew&uuml;nschten Aufgaben erledigen, f&uuml;gen wir zun&auml;chst in das Klassenmodul  <b>ThisDocument <\/b>des aktuellen Dokuments ein. Hier wollen wir einen Dateiauswahldialog unterbringen, mit dem der Benutzer die Quelldatei f&uuml;r den Ausgangstext selektieren kann.<\/p>\n<p>Diese enth&auml;lt einfache Abs&auml;tze mit Texten wie beispielsweise wie in Bild 1. Anschlie&szlig;end soll die Prozedur die Inhalte dieses Dokuments einlesen und in eine neue Tabelle im aktuellen Dokument schreiben &#8211; und zwar auf die linke Seite. Eine zweite Prozedur soll alle in der linken Spalte der Tabelle enthaltenen Texte einlesen und mit einem Aufruf der REST-API von DeepL den Text in der gew&uuml;nschten Sprache ermitteln. Die &Uuml;bersetzung des aktuellen Absatzes soll dann in die zweite Spalte der Tabelle neben dem Originaltext eingef&uuml;gt werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_346_002.png\" alt=\"Beispiel f&uuml;r ein Ausgangsdokument\" width=\"549,6265\" height=\"435,2329\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Beispiel f&uuml;r ein Ausgangsdokument<\/span><\/b><\/p>\n<h2>Hauptprozedur zur Steuerung des Ablaufs<\/h2>\n<p>Die Hauptprozedur, die wir einfach aufrufen und welche die &uuml;brigen Funktionen und Prozeduren startet, hei&szlig;t <b>Uebersetzen<\/b>. Sie ruft als Erstes die Funktion <b>DateiAuswaehlen <\/b>auf, welche den Dateiauswahldialog &ouml;ffnet und mit dem der Benutzer die Word-Datei ausw&auml;hlt, aus welcher der zu &uuml;bersetzende Text eingelesen werden soll (mehr dazu im Anschluss).<\/p>\n<p>Der Pfad zu dieser Datei wird in der Variablen <b>strPfad <\/b>gespeichert. Die Prozedur <b>Uebersetzen<\/b> pr&uuml;ft anschlie&szlig;end, ob <b>strPfad <\/b>nicht die L&auml;nge <b>0 <\/b>hat, was darauf hindeutet, dass der Benutzer gar keine Datei ausgew&auml;hlt hat &#8211; in diesem Fall wird die Prozedur mit einer Meldung abgebrochen.<\/p>\n<p>Im <b>Else<\/b>-Teil der Bedingung, die nur angesteuert wird, wenn <b>strPfad <\/b>nicht leer ist, pr&uuml;fen wir auch noch, ob <b>strPfad <\/b>auf eine g&uuml;ltige Datei verweist:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>Uebersetzen()\r\n     <span style=\"color:blue;\">Dim <\/span>strPfad<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objTable<span style=\"color:blue;\"> As <\/span>Table\r\n     strPfad = DateiAuswaehlen\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strPfad) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Keine Datei ausgew&auml;hlt.\"\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Dir(strPfad)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Kein g&uuml;ltiger Dateipfad.\"\r\n             <span style=\"color:blue;\">Exit Sub<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span><\/pre>\n<p>Ist eine g&uuml;ltige Datei in <b>strPfad <\/b>angegeben, rufen wir die Funktion <b>TextAusDokumentInTabelle <\/b>auf und &uuml;bergeben dieser den Pfad zum Dokument mit dem zu &uuml;bersetzenden Text. Diese Funktion soll die Tabelle erstellen und mit den Abs&auml;tzen aus dem Word-Dokument mit dem Originaltext f&uuml;llen und einen Verweis auf diese Tabelle als Parameter zur&uuml;ckgeben:<\/p>\n<pre>     <span style=\"color:blue;\">Set<\/span> objTable = TextAusDokumentInTabelle(strPfad)<\/pre>\n<p>Ist <b>objTable <\/b>danach nicht leer, rufen wir schlie&szlig;lich noch die Prozedur <b>UebersetzungDurchfuehren <\/b>auf und &uuml;bergeben dieser den Verweis auf die Tabelle, in deren linker Spalte bereits die zu &uuml;bersetzenden Texte warten:<\/p>\n<pre>     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> objTable Is Nothing<span style=\"color:blue;\"> Then<\/span>\r\n         UebersetzungDurchfuehren objTable\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Auswahl der Datei mit dem Originaltext<\/h2>\n<p>Die Funktion <b>DateiAuswaehlen <\/b>aus Listing 1 soll einen Dateiauswahldialog anzeigen und den Pfad zu der ausgew&auml;hlten Datei als Ergebnis zur&uuml;ckliefern.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiAuswaehlen()<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objFileDialog<span style=\"color:blue;\"> As <\/span>FileDialog\r\n     <span style=\"color:blue;\">Dim <\/span>objFilter<span style=\"color:blue;\"> As <\/span>FileDialogFilter\r\n     <span style=\"color:blue;\">Set<\/span> objFileDialog = Application.FileDialog(msoFileDialogFilePicker)\r\n     <span style=\"color:blue;\">With<\/span> objFileDialog\r\n         .InitialFileName = ThisDocument.Path & \"\\\"\r\n         .Filters.Clear\r\n         .Filters.Add \"Word-Dokument\", \"*.docx\"\r\n         <span style=\"color:blue;\">If <\/span>.Show = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n             DateiAuswaehlen = .SelectedItems(1)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     End <span style=\"color:blue;\">With<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Funktion DateiAuswaehlen &ouml;ffnet einen Dateiauswahldialog.<\/span><\/b><\/p>\n<p>Die Funktion erstellt ein <b>FileDialog<\/b>-Objekt des Typs <b>msoFileDialogFilePicker<\/b>. Es legt das Verzeichnis der aktuellen Word-Datei als initial anzuzeigendes Verzeichnis fest und leert dann die gegebenenfalls vorhandenen Filter, um einen neuen Filter mit der Dateiendung <b>.docx <\/b>und der Bezeichnung <b>Word-Dokument <\/b>hinzuzuf&uuml;gen. Dann ruft sie die <b>Show<\/b>-Methode auf, um den Dateidialog anzuzeigen (siehe Bild 2). Liefert diese Methode den Wert <b>True<\/b>, hat der Benutzer den Dialog bereits wieder geschlossen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_01\/pic_346_001.png\" alt=\"Dokument mit dem Originaltext ausw&auml;hlen\" width=\"624,6265\" height=\"301,889\"\/><\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000346\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000346?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000346\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"b3cc5bc9f1\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem wir schon gezeigt haben, wie Du Texte in einer Excel-Tabelle &uuml;bersetzen kannst, schauen wir uns nun an, wir die die DeepL-Techniken f&uuml;r die Gegen&uuml;berstellung der englischen und der deutschen Version eines Textes nutzen k&ouml;nnen. Dazu wollen wir bei einem Text beginnen, der sich in einem Word-Dokument befindet und diesen in ein neues Dokument &uuml;bertragen, wo wir die einzelnen Abs&auml;tze des Textes in jeweils eine Zelle in der linken Spalte einer Word-Tabelle einf&uuml;gen. Nachdem wir den Text so auf die Zellen einer Tabelle aufgeteilt haben, wollen wir in der rechten Spalte per Aufruf der DeepL-REST-API die &Uuml;bersetzung in der gew&uuml;nschten Sprache unterbringen. Das Ergebnis: Die &Uuml;bersetzung eines Textes, wobei jeweils ein Absatz in der einen Sprache dem gleichen Absatz in der anderen Sprache gegen&uuml;bergestellt wird.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012023,662023,44000028],"tags":[],"yst_prominent_words":[],"class_list":["post-55000346","post","type-post","status-publish","format-standard","hentry","category-66012023","category-662023","category-Word_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000346"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000346\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000346"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}