WPF und C# mit Excel verbinden

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Runshak.

    WPF und C# mit Excel verbinden

    Hallo,


    ich bin gerade dabei Excel mit C# zu verknüpfen. Leider klappt das nicht so wie gewünscht...

    Da ich in diesem Bereich überhaupt keine Ahnung habe, habe ich mich daran orientiert bzw. das versucht mal nachzubauen.

    Wenn ich das Programm starte tut alles soweit. Aber wenn ich auf den Button klicke, kommt eine Fehlermeldung ("es ist mindestens ein Fehler aufgetreten") Diese Fehlermeldung kommt als Messagebox.
    Visual Studio zeigt erstmal keinen Fehler an.

    Wenn ich dann Haltepunkte setze bekomme ich zumindest mal eine Fehlermeldung angezeigt. Beim Sprung von Zeile 38 auf Zeile 39 (im verlinkten Artikel der Klasse Student) bzw im Code von mir Zeile 36 zu 37

    Die Fehlermeldung wird hier ausgegeben (in der MainWindow.xaml.cs Klasse)

    C#-Quellcode

    1. private void GetStudentData()
    2. {
    3. _objExcelSer = new ExcelDataService();
    4. try
    5. {
    6. dataGridStudent.ItemsSource = _objExcelSer.ReadRecordFromEXCELAsync().Result;
    7. }
    8. catch (Exception ex)
    9. {
    10. MessageBox.Show(ex.Message);
    11. }
    12. }




    Spoiler anzeigen

    C#-Quellcode

    1. ​public class Student
    2. {
    3. public int StudentID { get; set; }
    4. public string Name { get; set; }
    5. public string Email { get; set; }
    6. public string Class { get; set; }
    7. public string Address { get; set; }
    8. }
    9. public class ExcelDataService
    10. {
    11. OleDbConnection Conn;
    12. OleDbCommand Cmd;
    13. public ExcelDataService()
    14. {
    15. string ExcelFilePath = @"D\:Mappe1.xlsx";
    16. string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFilePath + ";Extended Properties=Excel 12.0;Persist Security Info=True";
    17. Conn = new OleDbConnection(excelConnectionString);
    18. }
    19. public async Task<ObservableCollection<Student>> ReadRecordFromEXCELAsync()
    20. {
    21. ObservableCollection<Student> Students = new ObservableCollection<Student>();
    22. await Conn.OpenAsync();
    23. Cmd = new OleDbCommand();
    24. Cmd.Connection = Conn;
    25. Cmd.CommandText = "Select * from [Sheet1$]";
    26. var Reader = await Cmd.ExecuteReaderAsync();
    27. while (Reader.Read())
    28. {
    29. Students.Add(new Student()
    30. {
    31. StudentID = Convert.ToInt32(Reader["StudentID"]),
    32. Name = Reader["Name"].ToString(),
    33. Email = Reader["Email"].ToString(),
    34. Class = Reader["Class"].ToString(),
    35. Address = Reader["Address"].ToString()
    36. });
    37. }
    38. Reader.Close();
    39. Conn.Close();
    40. return Students;
    41. }
    42. public async Task<bool> ManageExcelRecordsAsync(Student stud)
    43. {
    44. bool IsSave = false;
    45. if (stud.StudentID != 0)
    46. {
    47. await Conn.OpenAsync();
    48. Cmd = new OleDbCommand();
    49. Cmd.Connection = Conn;
    50. Cmd.Parameters.AddWithValue("@StudentID", stud.StudentID);
    51. Cmd.Parameters.AddWithValue("@Name", stud.Name);
    52. Cmd.Parameters.AddWithValue("@Email", stud.Email);
    53. Cmd.Parameters.AddWithValue("@Class", stud.Class);
    54. Cmd.Parameters.AddWithValue("@Address", stud.Address);
    55. if (!IsStudentRecordExistAsync(stud).Result)
    56. {
    57. Cmd.CommandText = "Insert into [Sheet1$] values (@StudentID,@Name,@Email,@Class,@Address)";
    58. }
    59. else
    60. {
    61. Cmd.CommandText = "Update [Sheet1$] set StudentID=@StudentID,Name=@Name,Email=@Email,Class=@Class,Address=@Address where StudentID=@StudentID";
    62. }
    63. int result = await Cmd.ExecuteNonQueryAsync();
    64. if (result > 0)
    65. {
    66. IsSave = true;
    67. }
    68. Conn.Close();
    69. }
    70. return IsSave;
    71. }
    72. private async Task<bool> IsStudentRecordExistAsync(Student stud)
    73. {
    74. bool IsRecordExist = false;
    75. Cmd.CommandText = "Select * from [Sheet1$] where StudentId=@StudentID";
    76. var Reader = await Cmd.ExecuteReaderAsync();
    77. if (Reader.HasRows)
    78. {
    79. IsRecordExist = true;
    80. }
    81. Reader.Close();
    82. return IsRecordExist;
    83. }
    84. }



    Beim Auftreten des Fehlers steht bei "await": Erwartete Aufgabe gibt keinen Wert zurück.

    Liegt das jetzt an meinem Pfad oder muss ich in Excel nochwas freigeben? - abgesehen von dem was im Artikel beschrieben wurde

    Oder funktioniert das anders mit dem Office 365?

    Der Treiber wurde auch installiert

    Für jegliche Hilfe bin ich sehr dankbar!
    hab nochmal ein einfacheres Projekt erstellt und nochmal getestet und gegoogelt...

    die Loesung ist, dass man keinen 64bit OLEDB Treiber installiert haben darf...geht anscheinend nur mit 32bit...