Чтение данных Excel в C#

Чтобы прочитать данные Excel, вы можете открыть приложение Excel и использовать его в качестве сервера для управления книгами Excel.

Сначала откройте диалоговое окно «Добавить ссылки». На вкладке COM выберите «Библиотека объектов Microsoft Excel 14.0» (или любую другую версию, которую вы установили в своей системе).

Добавьте следующий с помощью оператора, чтобы упростить работу с пространством имен Excel. Часть Excel = означает, что вы можете использовать Excel как псевдоним для пространства имен.

using Excel = Microsoft.Office.Interop.Excel;

В этом примере используется следующий код, чтобы открыть книгу и прочитать данные из нее.

// Чтение из книги Excel.
private void btnRead_Click(object sender, EventArgs e)
{
    // Получить объект приложения Excel.
    Excel.Application excel_app = new Excel.ApplicationClass();

    // Сделать Excel видимым (необязательно).
    excel_app.Visible = true;

    // Откройте рабочую книгу только для чтения.
    Excel.Workbook workbook = excel_app.Workbooks.Open(
        txtFile.Text,
        Type.Missing, true, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing);

    // Получить первый рабочий лист.
    Excel.Worksheet sheet = (Excel.Worksheet)workbook.Sheets[1];

    // Получить заголовки и значения.
    SetTitleAndListValues(sheet, 1, 1, lblTitle1, lstItems1);
    SetTitleAndListValues(sheet, 1, 2, lblTitle2, lstItems2);

    // Закройте книгу без сохранения изменений.
    workbook.Close(false, Type.Missing, Type.Missing);

    // Закройте сервер Excel.
    excel_app.Quit();
}

Сначала код создает объект Excel.Application для управления Excel. Это делает этот объект видимым, чтобы вы могли наблюдать за его работой. Часто вы не хотите, чтобы сервер был видимым.

Далее код открывает рабочую книгу. Большинство параметров метода Open являются необязательными (например, пароли), поэтому они передают значения Type.Missing. В этом примере рабочая книга доступна только для чтения (это единственный параметр true), потому что ее не нужно записывать в книгу.

В коде используется первый рабочий лист книги. Обратите внимание, что индексы в Excel имеют тенденцию начинаться с 1 не 0.

В коде используется первый рабочий лист книги. Обратите внимание, что индексы в Excel имеют тенденцию начинаться с 1 не 0.

...

// Установите метку заголовка и значения в ListBox.
// Получить заголовок из ячейки (строка, col). Получить значения из
// cell (row + 1, col) в конец столбца.
private void SetTitleAndListValues(Excel.Worksheet sheet, 
    int row, int col, Label lbl, ListBox lst)
{
    Excel.Range range;

    // Установите заголовок.
    range = (Excel.Range)sheet.Cells[row, col];
    lbl.Text = (string)range.Value2;
    lbl.ForeColor = System.Drawing.ColorTranslator.FromOle(
        (int)(double)range.Font.Color);
    lbl.BackColor = System.Drawing.ColorTranslator.FromOle(
        (int)(double)range.Interior.Color);

    // Получаем значения.
    // Найти последнюю ячейку в столбце.
    range = (Excel.Range)sheet.Columns[col, Type.Missing];
    Excel.Range last_cell =
        range.get_End(Excel.XlDirection.xlDown);

    // Получить диапазон, содержащий значения.
    Excel.Range first_cell =
        (Excel.Range)sheet.Cells[row + 1, col];
    Excel.Range value_range =
        (Excel.Range)sheet.get_Range(first_cell, last_cell);

    // Получаем значения.
    object[,] range_values = (object[,])value_range.Value2;

    // Преобразуем это в одномерный массив.
    // Обратите внимание, что массив Range имеет нижние границы 1.
    int num_items = range_values.GetUpperBound(0);
    string[] values1 = new string[num_items];
    for (int i = 0; i < num_items; i++)
    {
        values1[i] = (string)range_values[i + 1, 1];
    }

    // Отображение значений в ListBox.
    lst.DataSource = values1;
}

Метод SetTitleAndListValues довольно специфичен для этого примера. Он получает заголовок из ячейки и получает значения из ячеек ниже этого.

Сначала код получает Range, представляющий ячейку заголовка. Он использует свойство Range объекта Value2 для получения текста заголовка. Он преобразует значения Range объектов Font.Color и Interior.Color в объекты .NET Color и использует их для цвет заголовка Ярлык.

Далее код получает значения под заголовком. Сначала он получает Range, представляющий весь столбец. Затем он использует метод range объекта get_End для получения диапазона, представляющего последнюю использованную ячейку столбца. Затем код создает другой Range, представляющий первую ячейку, содержащую значения, и использует две ячейки для получения еще одного нового Range, представляющего все ячейки значений. (Это проще, если вы знаете, где ячейки впереди времени, поэтому вам не нужно путаться, пытаясь найти последнюю ячейку.)

Далее код получает значения под заголовком. Сначала он получает Range, представляющий весь столбец. Затем он использует метод range объекта get_End для получения диапазона, представляющего последнюю использованную ячейку столбца. Затем код создает другой Range, представляющий первую ячейку, содержащую значения, и использует две ячейки для получения еще одного нового Range, представляющего все ячейки значений. (Это проще, если вы знаете, где ячейки впереди времени, поэтому вам не нужно путаться, пытаясь найти последнюю ячейку.)

...

Чтобы упростить использование значений, код копирует значения в 1-мерный массив C#. Он устанавливает свойство DataSource элемента управления ListBox в новый массив, и элемент управления автоматически отображает значения.

Источник: http://csharphelper.com/blog/2014/11/read-data-from-an-excel-workbook-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector