Подтвердить что ты не робот

Как экспортировать данные в файл Excel

У меня есть файл Excel с данными в нем. Я хочу написать некоторые конкретные строки в другой файл Excel, который я создал кодом. Кстати, у меня есть индексы этих строк в списке. Как я могу это сделать?

4b9b3361

Ответ 1

MS предоставляет OpenXML SDK V 2.5 - см. https://msdn.microsoft.com/en-us/library/bb448854(v=office.15).aspx

Это может читать + писать файлы MS Office (включая Excel)...

Другой вариант см. http://www.codeproject.com/KB/office/OpenXML.aspx

ЕСЛИ вам нужно больше как рендеринг, формулы и т.д., тогда есть разные коммерческие библиотеки, такие как Aspose и Flexcel...

Ответ 2

 private void button1_Click(object sender, EventArgs e)
    {
        Excel.Application xlApp ;
        Excel.Workbook xlWorkBook ;
        Excel.Worksheet xlWorkSheet ;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Add(misValue);

        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";

        xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);

        MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
    }

    private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }

Приведенный выше код взят прямо с csharp.net, пожалуйста, посмотрите на сайте.

Ответ 3

Я также боролся с аналогичной проблемой, связанной с экспортом данных в электронную таблицу Excel с использованием С#. Я пробовал много разных методов работы с внешними DLL, и мне не повезло.

Для функциональности экспорта вам не нужно использовать что-либо, имеющее дело с внешними DLL. Вместо этого просто сохраните заголовок и тип содержимого ответа.

Вот статья, которая мне показалась довольно полезной. В статье рассказывается, как экспортировать данные в электронные таблицы Excel с использованием ASP.NET.

http://www.icodefor.net/2016/07/export-data-to-excel-sheet-in-asp-dot-net-c-sharp.html

Ответ 4

Я использовал взаимодействие, чтобы открыть Excel и изменить ширину столбцов, как только данные были сделаны. Если вы используете взаимодействие, чтобы плюнуть данные в новую книгу Excel (если это то, что вы хотите), это будет очень медленно. Вместо этого я сгенерировал CSV, а затем открыл CSV в Excel. У этого есть свои проблемы, но я нашел это самый быстрый метод.

Сначала конвертируйте CSV:

        // Convert array data into CSV format.
        // Modified from http://csharphelper.com/blog/2018/04/write-a-csv-file-from-an-array-in-c/.
        private string GetCSV(List<string> Headers, List<List<double>> Data)
        {
            // Get the bounds.
            var rows = Data[0].Count;
            var cols = Data.Count;
            var row = 0;


            // Convert the array into a CSV string.
            StringBuilder sb = new StringBuilder();

            // Add the first field in this row.
            sb.Append(Headers[0]);

            // Add the other fields in this row separated by commas.
            for (int col = 1; col < cols; col++)
                sb.Append("," + Headers[col]);

            // Move to the next line.
            sb.AppendLine();

            for (row = 0; row < rows; row++)
            {
                // Add the first field in this row.
                sb.Append(Data[0][row]);

                // Add the other fields in this row separated by commas.
                for (int col = 1; col < cols; col++)
                    sb.Append("," + Data[col][row]);

                // Move to the next line.
                sb.AppendLine();
            }

            // Return the CSV format string.
            return sb.ToString();
        }

Затем экспортируйте его в Excel!

    public void ExportToExcel()
    {

        // Initialize app and pop Excel on the screen.
        var excelApp = new Excel.Application
        {
            Visible = true
        };

        // I use unix time to give the files a unique name that almost somewhat useful.
        DateTime dateTime = DateTime.UtcNow;
        long unixTime = ((DateTimeOffset)dateTime).ToUnixTimeSeconds();
        var path = @"C:\Users\my\path\here + unixTime + ".csv";

        var csv = GetCSV();
        File.WriteAllText(path, csv);
        // Create a new workbook and get its active sheet.
        excelApp.Workbooks.Open(path);

        var workSheet = (Excel.Worksheet)excelApp.ActiveSheet;

        // iterrate through each value and throw it in the chart
        for (var column = 0; column < Data.Count; column++)
        {
            ((Excel.Range)workSheet.Columns[column + 1]).AutoFit();
        }

        currentSheet = workSheet;

    }

Тебе тоже придется установить кое-что...

  1. Щелкните правой кнопкой мыши решение в обозревателе решений и выберите "Управление пакетами NuGet". Добавьте Microsoft.Office.Interop.Excel.
  2. На самом деле, это может сработать, если вы создали проект так, как этого хочет Interop. Если это все еще не работает, я должен был создать новый проект в другой категории. В разделе "Создать"> "Проект" выберите Visual С#> "Рабочий стол Windows"> "Консольное приложение". В противном случае инструменты взаимодействия не будут работать.

В случае, если я что-то забыл, вот мои заявления об использовании:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;