Benjaminj007 Ответов: 1

Как извлечь данные и вывести их в другую книгу на языке 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

Спасибо за помощь, Ричард.

1 Ответов

Рейтинг:
1

Maciej Los

Я бы посоветовал использовать EPPlus, потому что там очень много документации: Начало Работы · JanKallman/EPPlus Wiki · GitHub[^]. Не забудьте сначала установить пакет NuGet: Галерея NuGet | EPPlus 5.1.2[^].

Для Шпиля.XLS, вы должны установить этот пакет NuGet: Галерея NuGet | Шпиль.Формате xls 10.4.9[^]


Richard Deeming

Шпиль-это коммерческая составляющая, и продавцы находятся в списке непослушных Шона.

EPPlus был недавно обновлен, так что он больше не является бесплатным для коммерческого использования. Если вы не благотворительный фонд или используете его только для некоммерческого хобби-проекта, вам придется либо платить, либо придерживаться v4.

Benjaminj007

Спасибо за вклад, Ричард, очень ценю.