Laden...

[selbst gelöst] Excel Dokument "laden" und String in bool konvertieren

Erstellt von Kurdirektor vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.826 Views
K
Kurdirektor Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren
[selbst gelöst] Excel Dokument "laden" und String in bool konvertieren

Hallo zusammen,

ich bin aus der Sicht vieler hier sicher Anfänger und hoffe, dass darauf Rücksicht genommen wird falls einige Dinge für Experten zu einfach sein sollten 😃

Ich habe eine sehr einfaches Programm geschrieben um ein bestehendes Exel Dokument zu beschrieben. Jetzt würde ich aber gerne eine Art "Lade" Funktion einbauen bei der man die Möglichkeit hat sich die Felder, die beschrieben werden können, auszulesen.

Ist das Feld im Dokument beschrieben soll dafür die dementsprechende Checkbox aktiviert werden.

Ich wollte es erst so lösen:


 if (excelWorkSheet.Cells[187, 2] = "X"))
            {
              checkBox40.Checked = true ;
            }

Habe aber vergessen, dass es ein String ist den ich Abfrage und nicht in Bool konvertiert werden kann ohne code. Ich habe schon einige google Ergebnisse probiert aber bin noch zu keinem Ergebnis gekommen.

Gibt es eventuell eine Möglichkeit den aktuellen Zustand der Checkboxen abzuspeichern und wiederherzustellen? Das wäre dann ja eine einfachere alternative als viel code zu schreiben um die Felder abzurufen.

*** EDIT ***

ich habe folgendes zum Testen versucht, ob mir dann die Checkbox aktiviert wird:


if (excelWorkSheet.Cells[212, 12] == null)
            {
                checkBox64.Checked = true;
            }

Es wird kein Fehler ausgegeben aber auch nicht das gewünschte Ergebnis

H
523 Beiträge seit 2008
vor 5 Jahren

Ich versteh' die Frage nicht ganz, sehe aber einen Fehler in der ersten If-Abfrage:

if (excelWorkSheet.Cells[187, 2] = "X"))
{
     checkBox40.Checked = true ;
}

Das muss

if (excelWorkSheet.Cells[187, 2] == "X"))
{
     checkBox40.Checked = true ;
}

heißen (besser noch die Methode Equals verwenden).

Edit hat hier Lektüre dazu gefunden, die Du Dir anschauen kannst.

K
Kurdirektor Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

Das muss

if (excelWorkSheet.Cells[187, 2] == "X"))  
{  
     checkBox40.Checked = true ;  
}  

heißen (besser noch die Methode Equals verwenden).

Hi,

Danke für deine Antwort!
Mein Fehler, ich habe es hier gerade selber geschrieben und anstatt == nur = geschrieben.

Ich habe mir die Informationen auf der Seite mal angeschaut aber finde für mein Problem nicht die richtige Lösung. Vielleicht kann ich es auch einfach noch nicht so umsetzen.

Wenn ich folgendes Versuche:


private void button2_Click(object sender, EventArgs e)
        {
            // Deklarationen           
            string path = @"E:\300Series.xls";
            Microsoft.Office.Interop.Excel.Application excelAplication = null;
            Microsoft.Office.Interop.Excel.Workbook excelWorkBook = null;
            Microsoft.Office.Interop.Excel.Worksheet excelWorkSheet = null;

            // Öffnen der Mappe
            excelAplication = new Microsoft.Office.Interop.Excel.Application();
            System.Threading.Thread.Sleep(200);
            excelWorkBook = excelAplication.Workbooks.Open(path);
            excelWorkSheet =  (Microsoft.Office.Interop.Excel.Worksheet)excelWorkBook.Worksheets.get_Item(1);

            //Zuweisungen

            if (excelWorkSheet.Cells[212, 12] = "X")
            {
                checkBox64.Checked = true; 
            }
            
            //Ende Zuweisungen

            //Schliessen der Mappe mit Abfrage ob überschrieben werden soll
            excelWorkBook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
            excelWorkBook.Close();
            excelAplication.Quit();

            Marshal.FinalReleaseComObject(excelWorkSheet);
            Marshal.FinalReleaseComObject(excelWorkBook);
            Marshal.FinalReleaseComObject(excelAplication);
            excelAplication = null;
            excelWorkSheet = null;
        }

Dann kommt natürlich der Fehler: > Fehlermeldung:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: "Der string-Typ kann nicht implizit in bool konvertiert werden."

Kann ich nicht eine string deklarieren und dann sagen dass, falls mein string "X" beinhaltet, die Checkbox aktiviert werden soll?.


 string myexcelstring = (excelWorkSheet.Cells[212, 12]);
            if (myexcelstring.Contains("X") == true)
            {
                checkBox64.Checked = true;
            }

Das gibt aber dann diese aus:> Fehlermeldung:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: "Der System.__ComObject-Typ kann nicht implizit in string konvertiert werden."

Ich muss mich entschuldigen falls ich nicht alle Links mit "Basisinformationen" über das Porgrammieren lesen kann. Meine Familie und mein Job nehmen sehr viel Zeit in Anspruch aber wenn mir jemand Lösungsansätze zeigen kann, anstatt auf weitere Seiten zu verlinken, wäre ich sehr dankbar. Ich lerne schnell und kann den Code dann auch ohne das Hintergrundwissen interpretieren 😃. Vielen Dank im Voraus.

16.806 Beiträge seit 2008
vor 5 Jahren

Joa, aber Du solltest wissen, dass Du nicht der einzige mit Familie und Job bist; sondern wir hier alle auch Familie, Freunde und Job haben und hier Leuten in unserer Freizeit helfen.
Daher nicht böse nehmen, dass wir Dir nicht Deine Lösung programmieren werden 😉

Ansonsten sehe ich das wie hypersurf dass Deine Fragestellung nicht wirklich klar ist...

K
Kurdirektor Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

Ok, dann versuche ich mal die Frage, in Bezug auf meine andere Lösung, umzuformulieren!

Kann man, von einer Form, den aktuellen Status der Checkboxen abspeichern und wieder abrufen?

Meine eigentliche Frage war:
Wie kann ich es per C# umsetzen eine String Abfrage aus einem Excel Dokument in eine simple bool Rückgabe zu konvertieren?

K
Kurdirektor Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

*** gelöst ***

Umständlich per "optionaler" Lösung


 //Speichern und schliessen
                    
                excelWorkBook.SaveAs(path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal);
                excelWorkBook.Close();
            System.IO.File.WriteAllText(@"E:\Series240.txt", this.checkBox40.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series241.txt", this.checkBox41.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series242.txt", this.checkBox42.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series243.txt", this.checkBox43.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series244.txt", this.checkBox44.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series245.txt", this.checkBox45.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series246.txt", this.checkBox46.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series247.txt", this.checkBox47.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series248.txt", this.checkBox48.Checked.ToString());
            System.IO.File.WriteAllText(@"E:\Series249.txt", this.checkBox49.Checked.ToString());
            excelAplication.Quit();

                Marshal.FinalReleaseComObject(excelWorkSheet);
                Marshal.FinalReleaseComObject(excelWorkBook);
                Marshal.FinalReleaseComObject(excelAplication);
                excelAplication = null;
                excelWorkSheet = null;
             }

        

        private void Series2_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            
            string value = System.IO.File.ReadAllText(@"E:\Series240.txt");
            this.checkBox40.Checked = bool.Parse(value);
            string value2 = System.IO.File.ReadAllText(@"E:\Series241.txt");
            this.checkBox41.Checked = bool.Parse(value2);
            string value3 = System.IO.File.ReadAllText(@"E:\Series242.txt");
            this.checkBox42.Checked = bool.Parse(value3);
            string value4 = System.IO.File.ReadAllText(@"E:\Series243.txt");
            this.checkBox43.Checked = bool.Parse(value4);
            string value5 = System.IO.File.ReadAllText(@"E:\Series244.txt");
            this.checkBox44.Checked = bool.Parse(value5);
            string value6 = System.IO.File.ReadAllText(@"E:\Series245.txt");
            this.checkBox45.Checked = bool.Parse(value6);
            string value7 = System.IO.File.ReadAllText(@"E:\Series246.txt");
            this.checkBox46.Checked = bool.Parse(value7);
            string value8 = System.IO.File.ReadAllText(@"E:\Series247.txt");
            this.checkBox47.Checked = bool.Parse(value8);
            string value9 = System.IO.File.ReadAllText(@"E:\Series248.txt");
            this.checkBox48.Checked = bool.Parse(value9);
            string value1 = System.IO.File.ReadAllText(@"E:\Series249.txt");
            this.checkBox49.Checked = bool.Parse(value1);

        }

Jeden Status abspeichern und wieder abrufen