В этой статье хочу показать на простом примере, как с помощью языка 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);Читайте также:
 
	 
	 
	 
	 
	
 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
	