Показать данные из Excel в Datagrid

#c# #excel #wpf #datatable #datagrid

Вопрос:

Я новичок в C #, и у меня следующая проблема. В настоящее время я пишу программу для преобразования различных форматов (.xlsx, .xml, .resx). На первом шаге я хотел бы, чтобы открытый файл отображался в виде таблицы данных. Я думаю, что все должно быть правильно, но я не могу продвинуться дальше. Кто-нибудь может мне помочь, пожалуйста? Я все еще в отчаянии … Вот код:

Главная

 public void MnuOpenClick(object sender, RoutedEventArgs e)  {  //Open Filedialog  OpenFileDialog openfile = new()  {  //with Filter  DefaultExt = "*.xlsx",  Filter = "Excel-Worksheets (*.xlsx)|*.xlsx|Ressource-Files (*.resx)|*.resx|Catalog-Files (*.xml)|*.xml",  };   bool? browsefile = openfile.ShowDialog();   if (browsefile == true)  {  //Path to Textbox and search for file-ending  txtFilePath.Text = openfile.FileName;  string fileName = openfile.FileName;  FileInfo fileInfo = new(fileName);  string extn = fileInfo.Extension;   //Jumps to different classes  switch (extn)  {  case ".xlsx":  XlsxReaderAndConverter xlsxReaderAndConverter = new XlsxReaderAndConverter(fileName);  xlsxReaderAndConverter.ReadExcel(fileName);  break;  case ".resx":  ReadResx(openfile.FileName);  break;  case ".xml":  ReadXML();  break;  }  }  }  

Класс

 class XlsxReaderAndConverter : MainWindow {  //public DataGrid dtGrid { get; set; }  //public ComboBox cmbColumn { get; set; }  public string FileName { get; set; }   public XlsxReaderAndConverter(string fileName)  {  this.FileName = fileName;  }   public void ReadExcel(string fileName)  {  //Open and create .xlsx-file  Microsoft.Office.Interop.Excel.Application excelApp = new();  //Dynamic File Using Uploader....  Microsoft.Office.Interop.Excel.Workbook excelBook = excelApp.Workbooks.Open(fileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true, 1, 0);  Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets.get_Item(1); ;  Microsoft.Office.Interop.Excel.Range excelRange = excelSheet.UsedRange;   string strCellData = "";  double douCellData;  int rowCnt = 0;  int colCnt = 0;   DataTable dt = new DataTable();  for (colCnt = 1; colCnt lt;= excelRange.Columns.Count; colCnt  )  {  string strColumn = "";  strColumn = (string)(excelRange.Cells[1, colCnt] as Microsoft.Office.Interop.Excel.Range).Value2;  _ = dt.Columns.Add(strColumn, typeof(string));  cmbColumn.Items.Add(colCnt);  }   for (rowCnt = 2; rowCnt lt;= excelRange.Rows.Count; rowCnt  )  {  string strData = "";  for (colCnt = 1; colCnt lt;= excelRange.Columns.Count; colCnt  )  {  try  {  strCellData = (string)(excelRange.Cells[rowCnt, colCnt] as Microsoft.Office.Interop.Excel.Range).Value2;  strData  = strCellData   "|";  }  catch (Exception)  {  douCellData = (excelRange.Cells[rowCnt, colCnt] as Microsoft.Office.Interop.Excel.Range).Value2;  strData  = douCellData.ToString()   "|";  }  }  strData = strData.Remove(strData.Length - 1, 1);  _ = dt.Rows.Add(strData.Split('|'));  }   dtGrid.ItemsSource = dt.DefaultView;   excelBook.Close(true, null, null);  excelApp.Quit();   }  

Комментарии:

1. С какой проблемой вы столкнулись?

2. Код даже не запускается. Visual Studio хочет запустить предыдущую рабочую сборку. И когда он все еще работал в пятницу (я не знаю, почему он вообще не работает сегодня), путь к файлу отображался в текстовом поле, но таблица данных была пуста.

3. VS хочет (предупреждает вас) запустить предыдущую рабочую сборку, когда фактическая сборка привела к ошибкам. Проверьте (окно»Список ошибок») и исправьте эти ошибки.

4. Спасибо, но в «Списке ошибок»нет отображаемых ошибок

5. Проверьте также окно «Вывод». VS может пропустить ошибки в выводе компилятора. Если это так, выйдите из VS, удалите папку .vs (скрытую) в корневом каталоге решения, снова откройте решение в VS и перестройте его. В любом случае вам нужно найти способ сообщить нам точную ошибку, чтобы получить помощь.