Экспорт данных из таблицы DataGridView в MS Excel

23 Янв
2012

Всем доброго времени суток!
Хотел бы поделиться своим практическим примером экспортирования данных из таблицы DataGridView в Microsoft Excel.
Потратив около пары часов на поиск нормального примера, такового не обнаружил… Немного поэкспериментировав с имеющимся кодом, получил нужный результат!
Итак, для использования Excel приложения необходимо подключить соответствующие references, а именно:
  1. «Microsoft Office 11.0 Object Library» расположенного во вкладке COM компонентов
  2. «Microsoft.Office.Interop.Excel» расположенного во вкладке .Net компонентов

Далее прописываем
using Microsoft.Office.Interop.Excel;

Теперь нам доступен класс для запуска Excel из нашей программы. Создадим объект класса:
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();

Создаем рабочую книгу:
ExcelApp.Application.Workbooks.Add(Type.Missing);

Нам доступно редактирование некоторых параметров, в качестве примера изменим ширину столбцов:
ExcelApp.Columns.ColumnWidth = 15;

Задать значение ячейки можно так:
ExcelApp.Cells[1, 1 ]= "№п/п";

Для переноса данных применил такой цикл (dgvHadTovar — это имя моего компонента DataGridView):
for (int i = 0; i < dgvHadTovar.ColumnCount; i++)
{
for (int j = 0; j < dgvHadTovar.RowCount; j++)
{
ExcelApp.Cells[j + 2, i + 1 ] = (dgvHadTovar[i,j].Value).ToString();
}
}

j + 2, потому что первая строка отведена для подписей столбцов!
И для отображения полученного результата, необходимо показать документ:
ExcelApp.Visible = true;


В итоге получилась такая функция:

private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
ExcelApp.Application.Workbooks.Add(Type.Missing);
ExcelApp.Columns.ColumnWidth = 15;

ExcelApp.Cells[1, 1 ]= "№п/п";
ExcelApp.Cells[1, 2 ]= "Число";
ExcelApp.Cells[1, 3 ]= "Название";
ExcelApp.Cells[1, 4 ]= "Количество";
ExcelApp.Cells[1, 5 ]= "Цена ОПТ";
ExcelApp.Cells[1, 6 ]= "Цена Розница";
ExcelApp.Cells[1, 7] = "Сумма";

for (int i = 0; i < dgvHadTovar.ColumnCount; i++)
{
for (int j = 0; j < dgvHadTovar.RowCount; j++)
{
ExcelApp.Cells[j + 2, i + 1 ] = (dgvHadTovar[i,j].Value).ToString();
}
}
ExcelApp.Visible = true;
}
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх