#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 и перестройте его. В любом случае вам нужно найти способ сообщить нам точную ошибку, чтобы получить помощь.