В этой статье хочу показать на простом примере, как с помощью языка c# можно выполнить экспорт данных из DataGridView в Excel файл.
И так для начала создадим Windows Forms приложение на языке csharp, после чего добавим на форму два элемента управления: DataGridView (dgv) и кнопку с надписью: Экспорт в Excel.
Подготовка
И так для начала создадим метод CreateTable.
С помощью данного метода мы создадим таблицу с данными, которые затем, например, в событие Form.Load, загрузим в элемент управления DataGridView.
Нажимаем F5 или Ctrl+F5 и получаем следующий результат.
Экспорт в Excel
Первый этап закончен. Теперь переходим ко второму этапу, который так же начнётся с создания метода. И так, для начала создадим метод ExportToExcel. С помощью него, как думаю не трудно догадаться, мы собственно и будем выполнять экспорт данных в Excel файл.
Для работы с Excel нам понадобиться добавить в проект сборку: Microsoft.Office.Interop.Excel.
Чтобы каждый раз не обращаться к членам и типам данной сборки, используя полные имена, добавим следующую строку:
Если сейчас Вы обратите своё внимание на написанный ранее код, то заметите, что в методе CreateTable имя класса DataTable почему-то стало подчеркнутым или выделенным красным цветом. Это произошло, потому что класс DataTable, присутствует как в пространстве имён Microsoft.Office.Interop.Excel так и в пространстве имён System.Data, в результате чего возник конфликт имён.
Чтобы разрешить возникший конфликт создадим псевдоним для пространства имён System.Data
После чего в исходном коде перед именем класса DataTable укажем имя псевдонима.
Конфликта больше нет и теперь можно работать дальше.
И так, чтобы выполнить экспорт данных в excel файл нам понадобиться для начала создать объект класса Application. Здесь так же возникает конфликт имен, поэтому в данном примере я создам ещё один псевдоним, но Вы можете просто указать полное имя:
Затем внутри метода ExportToExcel создадим новый объект.
Следующая строка используется для отладки, чтобы мы могли отслеживать результаты в ходе выполнения кода.
Затем создадим одну новую рабочую книгу.
Созданная книга по умолчанию содержит три листа, поэтому добавлять их в данном примере не требуется. Поэтому сразу же получаем активный лист.
В первой строке листа мы поместим названия колонок.
Первая цифра это номер строки, вторая ячейки. Вместо цифры Вы можете указывать и буквенное обозначение.
Экспортируем данные из DataGridView в Excel файл.
Сохраняем результат в Excel файл.
В данном примере файл будет создан в папке Debug текущего проекта.
И в конце завершаем работу с Microsoft Excel.
Нам осталось выполнить последний шаг. В событие Button.Click поместим метод ExportToExcel.
На этом экспорт завершен, окончательный результат можно увидеть на картинке ниже.
Полный листинг:
Если Вам нужно вывести данные не из DataGridView, а из DataTable то это, например можно сделать следующим образом:
На этом всё, если есть какие-то вопросы, то оставляйте их в комментариях.
Дополнение:
1. Свойство Visible влияет на быстродействие, поэтому перед выполнением цикла его лучше установить в значение false.
2. Большой объём данных можно быстро экспортировать, например, с помощью следующего способа:
В данном примере xml схема не используется (второй параметр), поэтому возможно появится сообщение: Указанный источник XML не ссылается на схему просто нажимаем кнопку OK.
Читайте также:
И так для начала создадим Windows Forms приложение на языке csharp, после чего добавим на форму два элемента управления: DataGridView (dgv) и кнопку с надписью: Экспорт в Excel.
Подготовка
И так для начала создадим метод CreateTable.
C#:
private DataTable CreateTable()
{
//создаём таблицу
DataTable dt = new DataTable("Friends");
//создаём три колонки
DataColumn colID = new DataColumn("ID", typeof(Int32));
DataColumn colName = new DataColumn("Name", typeof(String));
DataColumn colAge = new DataColumn("Age", typeof(Int32));
//добавляем колонки в таблицу
dt.Columns.Add(colID);
dt.Columns.Add(colName);
dt.Columns.Add(colAge);
DataRow row = null;
//создаём новую строку
row = dt.NewRow();
//заполняем строку значениями
row["ID"] = 1;
row["Name"] = "Vanya";
row["Age"] = 45;
//добавляем строку в таблицу
dt.Rows.Add(row);
//создаём ещё одну запись в таблице
row = dt.NewRow();
row["ID"] = 2;
row["Name"] = "Vasya";
row["Age"] = 35;
dt.Rows.Add(row);
return dt;
}
C#:
private void Form1_Load(object sender, EventArgs e)
{
dgv.DataSource = CreateTable();
}
Экспорт в Excel
Первый этап закончен. Теперь переходим ко второму этапу, который так же начнётся с создания метода. И так, для начала создадим метод ExportToExcel. С помощью него, как думаю не трудно догадаться, мы собственно и будем выполнять экспорт данных в Excel файл.
C#:
private void ExportToExcel()
{
}
Чтобы каждый раз не обращаться к членам и типам данной сборки, используя полные имена, добавим следующую строку:
C#:
using Microsoft.Office.Interop.Excel;
Чтобы разрешить возникший конфликт создадим псевдоним для пространства имён System.Data
C#:
//псевдоним
using SD = System.Data;
После чего в исходном коде перед именем класса DataTable укажем имя псевдонима.
C#:
private SD.DataTable CreateTable()
{
SD.DataTable dt = new SD.DataTable("Friends");
...
}
И так, чтобы выполнить экспорт данных в excel файл нам понадобиться для начала создать объект класса Application. Здесь так же возникает конфликт имен, поэтому в данном примере я создам ещё один псевдоним, но Вы можете просто указать полное имя:
C#:
using Excel = Microsoft.Office.Interop.Excel;
C#:
Excel.Application exApp = new Excel.Application();
C#:
exApp.Visible = true; (данную строку можно не указывать)
Код:
exApp.Workbooks.Add();
Созданная книга по умолчанию содержит три листа, поэтому добавлять их в данном примере не требуется. Поэтому сразу же получаем активный лист.
C#:
Worksheet workSheet = (Worksheet)exApp.ActiveSheet;
C#:
workSheet.Cells[1, 1] = "ID";
workSheet.Cells[1, "B"] = "Name";
workSheet.Cells[1, 3] = "Age";
Первая цифра это номер строки, вторая ячейки. Вместо цифры Вы можете указывать и буквенное обозначение.
Экспортируем данные из DataGridView в Excel файл.
C#:
int rowExcel = 2; //начать со второй строки.
for (int i = 0; i < dgv.Rows.Count; i++)
{
//заполняем строку
workSheet.Cells[rowExcel, "A"] = dgv.Rows[i].Cells["ID"].Value;
workSheet.Cells[rowExcel, "B"] = dgv.Rows[i].Cells["Name"].Value;
workSheet.Cells[rowExcel, "C"] = dgv.Rows[i].Cells["Age"].Value;
++rowExcel;
}
C#:
string pathToXmlFile;
pathToXmlFile = Environment.CurrentDirectory + "\\" + "MyFile.xls";
workSheet.SaveAs(pathToXmlFile);
И в конце завершаем работу с Microsoft Excel.
C#:
exApp.Quit();
C#:
private void button1_Click(object sender, EventArgs e)
{
ExportToExcel();
}
Полный листинг:
C#:
private void ExportToExcel()
{
Excel.Application exApp = new Excel.Application();
exApp.Visible = true;
exApp.Workbooks.Add();
Worksheet workSheet = (Worksheet)exApp.ActiveSheet;
workSheet.Cells[1, 1] = "ID";
workSheet.Cells[1, 2] = "Name";
workSheet.Cells[1, 3] = "Age";
int rowExcel = 2;
for (int i = 0; i < dgv.Rows.Count; i++)
{
workSheet.Cells[rowExcel, "A"] = dgv.Rows[i].Cells["ID"].Value;
workSheet.Cells[rowExcel, "B"] = dgv.Rows[i].Cells["Name"].Value;
workSheet.Cells[rowExcel, "C"] = dgv.Rows[i].Cells["Age"].Value;
++rowExcel;
}
workSheet.SaveAs("MyFile.xls");
exApp.Quit();
}
C#:
//было
workSheet.Cells[rowExcel, "A"] = dgv.Rows[i].Cells["ID"].Value;
//стало
workSheet.Cells[rowExcel, "A"] = dt.Rows[i].Field<int>("ID");
Дополнение:
1. Свойство Visible влияет на быстродействие, поэтому перед выполнением цикла его лучше установить в значение false.
C#:
Excel.Application exApp = new Excel.Application();
exApp.Visible = false;
for()
{
}
exApp.Visible = true;
C#:
//сохраняем данные из таблицы в xml файл
DataTable dt = new DataTable("Cars");
dt.WriteXml(pathToXmlFile);
//экспорт
Excel.Application exApp = new Excel.Application();
Excel.Workbook workbook = exApp.Workbooks.OpenXML(pathToXmlFile, Type.Missing, LoadOption.PreserveChanges);
Читайте также: