{"id":55000270,"date":"2021-06-01T00:00:00","date_gmt":"2021-11-10T09:12:37","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=270"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"EDMDaten_in_CSV_exportieren","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/EDMDaten_in_CSV_exportieren\/","title":{"rendered":"EDM-Daten in CSV exportieren"},"content":{"rendered":"<p><b>Im Artikel &#8220;CSV-Datei in Klassen importieren&#8221; haben wir bereits gezeigt, wie Sie die Daten aus CSV-Dateien in .NET-Anwendungen importieren und diese auf die enthaltenen Klassen aufteilen k&ouml;nnen. Dazu haben wir das NuGet-Paket CsvHelper verwendet. Im vorliegenden Artikel schauen wir uns den umgekehrten Weg an: Wie k&ouml;nnen wir die Daten aus den Objekten eines Entity Data Models in eine CSV-Datei exportieren Dazu setzen wir direkt an der Beispieldatenbank f&uuml;r den oben genannten Artikel an und speichern die darauf importierten Daten direkt wieder in eine neue CSV-Datei.<\/b><\/p>\n<h2>CsvHelper hinzuf&uuml;gen<\/h2>\n<p>Das erw&auml;hnte NuGet-Paket <b>CsvHelper <\/b>f&uuml;gen wir &uuml;ber den Nuget-Paket-Manager hinzu, den Sie &uuml;ber den Men&uuml;eintrag <b>Projekt|NuGet-Pakete verwalten&#8230; <\/b>&ouml;ffnen. Hier wechseln Sie zum Bereich <b>Durchsuchen <\/b>und geben <b>csvhelper <\/b>in das Suchfeld ein. Es erscheint der Eintrag <b>CsvHelper<\/b>, den wir ausw&auml;hlen und mit einem Klick auf die Schaltfl&auml;che <b>Installieren <\/b>zum Projekt hinzuf&uuml;gen.<\/p>\n<h2>Beispielanwendung<\/h2>\n<p>Die Benutzeroberfl&auml;che der Beispielanwendung bauen wir auf dem Beispiel aus dem oben genannten Artikel auf. Dort finden wir bereits Steuerelemente, mit denen Sie eine CSV-Datei zum Importieren ihrer Inhalte ausw&auml;hlen k&ouml;nnen. Die Inhalte werden dann in einem <b>DataGrid<\/b>-Steuerelement angezeigt. Hier f&uuml;gen wir einen weiteren Bereich an, der die Auswahl eines Dateinamens zum Speichern der Inhalte des <b>DataGrid<\/b>-Elements in einer weiteren CSV-Datei erlaubt. Dieses sieht wie in Bild 1 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_270_001.png\" alt=\"Entwurf des Hauptfensters der Anwendung\" width=\"700\" height=\"403,9426\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Entwurf des Hauptfensters der Anwendung<\/span><\/b><\/p>\n<p>Hier ist der XAML-Code der hier enthaltenen Steuerelemente. Wir verwenden das DataGrid <b>dgrKunden<\/b>, um die zu exportierenden Daten zu ermitteln. Das <b>TextBox<\/b>-Steuerelement <b>txtExportfile <\/b>nimmt den Pfad der zu erstellenden Datei auf.<\/p>\n<p>Diesen ermittelt der Benutzer durch einen Klick auf die Schaltfl&auml;che <b>btnChooseSaveFile<\/b>. Und der eigentliche Export (die erste Version, es folgen weitere), erfolgt &uuml;ber die Schaltfl&auml;che <b>btnExport11<\/b>:<\/p>\n<pre>     ...\r\n     &lt;Label Grid.Row=\"1\"&gt;Eingelesene Eintr&auml;ge:&lt;\/Label&gt;\r\n     &lt;DataGrid x:Name=\"dgrKunden\" Grid.Row=\"2\"&gt;&lt;\/DataGrid&gt;\r\n     &lt;GroupBox Header=\"Beispiele Artikel ''EDM-Daten in CSV exportieren''\" FontWeight=\"Bold\" Grid.Row=\"3\"&gt;\r\n         &lt;ContentControl FontWeight=\"Normal\" HorizontalAlignment=\"Stretch\"&gt;\r\n             &lt;StackPanel Orientation=\"Vertical\" HorizontalAlignment=\"Stretch\"&gt;\r\n                 &lt;Grid&gt;\r\n                     &lt;Grid.ColumnDefinitions&gt;\r\n                         &lt;ColumnDefinition Width=\"Auto\"&gt;&lt;\/ColumnDefinition&gt;\r\n                         &lt;ColumnDefinition Width=\"*\"&gt;&lt;\/ColumnDefinition&gt;\r\n                         &lt;ColumnDefinition Width=\"Auto\"&gt;&lt;\/ColumnDefinition&gt;\r\n                     &lt;\/Grid.ColumnDefinitions&gt;\r\n                     &lt;Label Grid.Column=\"0\"&gt;Datei:&lt;\/Label&gt;\r\n                     &lt;TextBox x:Name=\"txtExportfile\" Grid.Column=\"1\"&gt;&lt;\/TextBox&gt;\r\n                     &lt;Button x:Name=\"btnChooseSaveFile\" Grid.Column=\"2\"                         Click=\"btnChooseSaveFile_Click\" HorizontalAlignment=\"Right\"&gt;Datei ausw&auml;hlen&lt;\/Button&gt;\r\n                 &lt;\/Grid&gt;\r\n                 &lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n                     &lt;Button x:Name=\"btnExport11\" Click=\"btnExport11_Click\"&gt;1:1 exportieren&lt;\/Button&gt;\r\n                 &lt;\/StackPanel&gt;\r\n             &lt;\/StackPanel&gt;\r\n         &lt;\/ContentControl&gt;\r\n     &lt;\/GroupBox&gt;\r\n&lt;\/Grid&gt;<\/pre>\n<h2>Datei zum Speichern festlegen<\/h2>\n<p>Die Schaltfl&auml;che <b>btnChooseSaveFile <\/b>l&ouml;st die folgende Methode aus. Diese erfordert das Vorhanden des folgenden Namespaces:<\/p>\n<pre>Imports Microsoft.Win32<\/pre>\n<p>Die Methode ermittelt das Startverzeichnis, das gleich beim &Ouml;ffnen des Dialogs angezeigt werden soll, aus dem Verzeichnis aus dem Textfeld <b>txtImportfile<\/b>. Ist dieses leer oder enth&auml;lt es keine vorhandene Datei, wird stattdessen das Verzeichnis der <b>.exe<\/b>-Datei dieser Anwendung genutzt.<\/p>\n<p>Danach stellt die Methode die Dateiendung auf <b>.csv <\/b>ein und &ouml;ffnet den <b>Speichern unter<\/b>-Dialog. Enth&auml;lt dieser beim Schlie&szlig;en eine Zieldatei, wird diese samt Pfad in das Textfeld <b>txtExportFile <\/b>geschrieben:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnChooseSaveFile_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>objSaveFileDialog<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> SaveFileDialog\r\n     <span style=\"color:blue;\">If <\/span>File.Exists(txtImportfile.Text)<span style=\"color:blue;\"> Then<\/span>\r\n         objSaveFileDialog.InitialDirectory = Path.GetDirectoryName(txtImportfile.Text)\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         objSaveFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     objSaveFileDialog.DefaultExt = \".csv\"\r\n     <span style=\"color:blue;\">If <\/span>(objSaveFileDialog.ShowDialog = <span style=\"color:blue;\">True<\/span>)<span style=\"color:blue;\"> Then<\/span>\r\n         txtExportfile.Text = objSaveFileDialog.FileName\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Einfacher Export in eine CSV-Datei<\/h2>\n<p>Wir gehen an dieser Stelle davon aus, dass das <b>DataGrid<\/b>-Steuerelement wie in Bild 2 einige Datens&auml;tze enth&auml;lt. In der durch die Schaltfl&auml;che <b>btnExport11 <\/b>aufgerufenen Methode &uuml;berpr&uuml;fen wir diese Voraussetzung. Falls Datens&auml;tze enthalten sind, liest sie diese in die <b>List(Of Kunde)<\/b>-Variable <b>objKunden <\/b>ein. Dann erstellt die Prozedur ein neues Objekt des Typs <b>StreamWriter <\/b>und &uuml;bergibt den Namen der zu erzeugenden Datei als Parameter des Konstruktors.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_270_002.png\" alt=\"Zu exportierende Daten im DataGrid-Steuerelement\" width=\"700\" height=\"394,5293\" \/><\/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\/55000270\/\">\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\/55000270?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\/55000270\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"58f932c395\"\/>\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>Im Artikel &#8220;CSV-Datei in Klassen importieren&#8221; haben wir bereits gezeigt, wie Sie die Daten aus CSV-Dateien in .NET-Anwendungen importieren und diese auf die enthaltenen Klassen aufteilen k&ouml;nnen. Dazu haben wir das NuGet-Paket CsvHelper verwendet. Im vorliegenden Artikel schauen wir uns den umgekehrten Weg an: Wie k&ouml;nnen wir die Daten aus den Objekten eines Entity Data Models in eine CSV-Datei exportieren Dazu setzen wir direkt an der Beispieldatenbank f&uuml;r den oben genannten Artikel an und speichern die darauf importierten Daten direkt wieder in eine neue CSV-Datei.<\/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":[662021,66032021,44000012,44000023],"tags":[],"yst_prominent_words":[],"class_list":["post-55000270","post","type-post","status-publish","format-standard","hentry","category-662021","category-66032021","category-Interaktiv","category-PowerApps"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000270","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=55000270"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000270\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000270"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}