Laden...

Im Excel nach Variablen suchen und den dazugehörenden Wert in eine .txt Datei schreiben

Erstellt von phil1987 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.366 Views
P
phil1987 Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren
Im Excel nach Variablen suchen und den dazugehörenden Wert in eine .txt Datei schreiben

Hallo Liebe Kollegen,

Ich bin hier neu bzw. neu in c#. Wegen meiner Arbeit bin ich gezwungen mein Projekt in c# zu programmieren. Ich bin leider ein wenig überfordert. Ich hoffe ihr könnt mir ein wenig helfen.

Nun zu meinem Problem. Ich habe 2 Dateien. Eine Notepad Datei und eine Excel Datei. Die Notepad Datei habe ich erfolgreich ins c# eingelesen. Nun möchte ich auch mein Excel Sheet einlesen und Werte vom Excel ins Notepad überschreiben/replacen.

Ich bekomme von einem Program eine Output Datei (Notepad - Datei)
Die Formatierung lautet wie folgt: [Einheit Optional] Variable = Wert -> siehe:

[mm]p0=45
[mm]param1=36.42199010819
[mm]param2=56
param9=56
[degrees]p3=453
[degrees]p4=134
[mm]p5=56
p6=1
p7=1

Dann habe ich noch mein** Excel Sheet:**

p3	p2	p9	param9	param2	param1	p9	p23	param1	p3
32	2	23	55	1		4,333333333	-6,666666667	-17,66666667	-14,95753715
2	3	78	103,6666667	141,6666667	179,6666667	217,6666667	255,6666667	293,6666667	331,6666667
-28	4	133	152,3333333	282,3333333		431	518	605	678,2908705
-58	5	188	201	423	179,6666667	644,3333333	780,3333333	916,3333333	1024,915074
-88	6	243	249,6666667	563,6666667		857,6666667	1042,666667	1227,666667	1371,539278
-118	7	298	298,3333333	704,3333333	179,6666667	1071	1305	1539	1718,163482

In der erste Zeile stehen immer die Variablen darunter dann die dazugehörenden Werte.

Nun möchte ich mittels C# die einzelnen Variablen Namen im Excel durchgehen und schauen ob diese in der Notepad Datei vorhanden sind. Wenn diese Variable in beiden Dateien vorhanden sind möchte ich den Wert vom Excel übernehmen und sie in Notepad Datei überschreiben. Und das möchte ich für alle Variabllen und Werte mittel Schleife machen.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {

            string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Z003DUKJ\Desktop\notepad.txt");
            int stop = 1;



        }
    }
}
2.078 Beiträge seit 2012
vor 5 Jahren

Bei Excel wird's schwierig, besonders wenn Du noch Anfänger bist.
Ich kann dir keine vollständige Anleitung bieten, aber einige Stichpunkte, nach denen Du suchen kannst. Wenn Du damit dann nicht weiter kommst, kannst Du ja wieder fragen.

Bezüglich der TXT:

Ich würde eine Klasse schreiben, die eine Zeile darstellen kann und die drei Inhalte Name, Wert und Einheit beinhaltet. Wenn Du die TXT-Datei dann einliest, kannst Du mit einfachen String-Operationen (z.B. Split) jede Zeile parsen und ein Objekt dazu erzeugen. Für komplexere Dinge könnte sich auch der Blick in Richtung Regex lohnen, allerdings ist der Einstieg schwer.

Bezüglich Excel:

Wenn es CSV ist (Excel kann CSV), dann such eine CSV-Library raus, davon gibt's genug. Das ist bedeutend einfacher, als direkt mit Excel zu hantieren. Viele können dir das auch direkt in Objekte Parsen und als Liste ausgeben.

Ist es kein CSV, kannst Du alternativ mit ODBC eine Datenbank-"Verbindung" mit einer Excel-Datei herstellen und dann mittels SQL suchen. Das könnte der einfachste Weg sein, allerdings hab ich gehört, dass ODBC gerne etwas hackelig sein soll, eigene Erfahrungen habe ich keine.

Wenn es OpenXml ist, dann gibt's auch Frameworks, die das können. Das offizielle Framework für OpenXml würde ich nicht anfassen, das ist ein Krampf. Stattdessen empfehle ich dir das Framework ClosedXml. Die Dokumentation könnte besser sein, aber der Aufbau und die Benennung ist so gut gewählt, dass das meiste super intuitiv und selbsterklärend von der Hand geht.
So oder so weiß ich aber nicht, ob diese Frameworks eine vollständige Suche unterstützen, im Zweifel musst Du also jede Zelle einzeln durch gehen und prüfen.

P
phil1987 Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren

@Palladin007 ich glaube ich werde es nicht kapieren...

Ich als Techniker habe schon Lösungen im Kopf kann es aber nicht auf c# übertragen...

Bezüglich .txt ich glaube diese Vorgehensweise ist für mich zu kompliziert. Ich würde lieber in der jeweiligen Zeile nach Strings suchen und dann den Wert nach dem = Zeichen mit dem Excel Wert ersetzen/überschreiben. Des weiteren weiß ich ....Was ist "CSV"? Bzw. welche Referenzen muss ich für das Excel laden? Ka ich weiss nicht wie das lösen kann...

Jedenfalls Danke für deine Antwort.

286 Beiträge seit 2011
vor 5 Jahren

Benutze EPPlus, damit kannst du Excel-Dateien Problemlos öffnen und die einzelnen Tabellen/Zellen problemlos durchlaufen und bearbeiten/durchsuchen/sonstwas.

Beste Grüße
emuuu

P.S.

Bezüglich .txt ich glaube diese Vorgehensweise ist für mich zu kompliziert


foreach(var line in File.ReadAllLines(stringToFile))
{
var parts = line.Split('\t');
}

Wenn du eine Excel-Tabelle in eine txt-Datei (oder csv, im Prinzip egal) packst kannst du die so auslesen. (\t steht hier für die Escape-Sequenz des Tab, da Excel die standardmäßig so ins Clipboard packt)
line repräsentiert dabei jede Zeile der Tabelle und parts ist ein string-Array wobei [0] die erste Spalte ist und [n] die letzte. Also nicht besonders kompliziert.

2+2=5( (für extrem große Werte von 2)