Как извлечь данные и вывести их в другую книгу на языке C#?
Я работаю над приложением Windows Form без опыта работы с C#, но хочу учиться. Я хочу прочитать файл xlsx, извлечь данные и записать/вывести выбранные данные в другую электронную таблицу.
Как вы можете видеть из моего кода, я вручную пишу в электронную таблицу, что является противоположностью тому, что я пытаюсь достичь.
Я проверил некоторые форумы и некоторые рекомендуют Spire, но я не могу найти ссылку, чтобы добавить его в свой проект. Я также обнаружил, что oledb-отличный вариант, но я не уверен, как написать его без длинного списка ошибок.
Я использую Visual Studio Community edition v 16.5.4
Любое предложение приветствуется.
Что я уже пробовал:
System.Threading.Thread.Sleep(5000); OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); System.Threading.Thread.Sleep(10000); //read excel file { //Create COM Objects. Create a COM object for everything that is referenced Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Users\benjamin.johnson\Documents\CACE_Issues_List_2019-53.xlsx"); Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; Excel.Range xlRange = xlWorksheet.UsedRange; int rowCount = xlRange.Rows.Count; int colCount = xlRange.Columns.Count; //iterate over the rows and columns and print to the console as it appears in the file for (int i = 1; i <= rowCount; i++) { for (int j = 1; j <= colCount; j++) { //new line if (j == 1) Console.Write("\r\n"); //write the value to the console if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null) Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t"); } } //cleanup GC.Collect(); GC.WaitForPendingFinalizers(); //release com objects to fully kill excel process from running in the background Marshal.ReleaseComObject(xlRange); Marshal.ReleaseComObject(xlWorksheet); //close and release xlWorkbook.Close(); Marshal.ReleaseComObject(xlWorkbook); //quit and release xlApp.Quit(); Marshal.ReleaseComObject(xlApp); } //write to excel file { Excel.Application excelApp = new Excel.Application(); if (excelApp != null) { //Excel.Application excelApp = new Excel.Application(); Excel.Workbook excelWorkbook = excelApp.Workbooks.Add(); Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets.Add(); excelApp.Visible = true; excelWorksheet.Cells[1, 1] = "Opt/Req"; excelWorksheet.Cells[1, 2] = "Type"; excelWorksheet.Cells[1, 3] = "Accepted Date"; excelWorksheet.Cells[1, 4] = "Bug#"; excelWorksheet.Cells[1, 5] = "Title"; excelWorksheet.Cells[1, 6] = "Subsystem"; excelWorksheet.Cells[1, 7] = "Design"; excelWorksheet.Cells[1, 8] = "Segment"; excelWorksheet.Cells[1, 9] = "Release"; excelApp.Columns.AutoFit(); excelWorksheet.Name = "Issues"; if (File.Exists("TestIssueTracker2020.xlsx")) { File.Delete("TestIssueTracker2020.xlsx"); } excelApp.ActiveWorkbook.SaveAs("TestIssueTracker2020", Excel.XlFileFormat.xlWorkbookNormal); excelWorkbook.Close(); excelApp.Quit(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelWorksheet); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelWorkbook); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excelApp); GC.Collect(); GC.WaitForPendingFinalizers(); MessageBox.Show("Excel file created, you can find the file on your Documents folder"); }
Richard MacCutchan
Вы используете взаимодействие.Пространство имен Excel, которое является правильным способом сделать это. OleDB позволяет получить доступ к файлам Excel, как если бы они были базами данных, но не лучше, чем то, что у вас уже есть.
Benjaminj007
Спасибо за помощь, Ричард.