|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - C# Экспорт DataGridView в Excel |
|
|
.NET - C# Экспорт DataGridView в Excel
|
|
Ветеран Сообщения: 5624 |
Это не вопрос, а скорее в помощь программистам. Прилагаю код функции, осуществляющей выгрузку DataGridView в Excel. Код предельно прост, можно из него сделать мааааленькую dll-ку и пользоваться в проектах.
public void ExportToExcel(DataGridView grid)
{
ApplicationClass Excel = new ApplicationClass();
XlReferenceStyle RefStyle = Excel.ReferenceStyle;
Excel.Visible = true;
Workbook wb = null;
String TemplatePath = System.Windows.Forms.Application.StartupPath + @"\Экспорт данных.xlt";
try
{
wb = Excel.Workbooks.Add(TemplatePath); // !!!
}
catch (System.Exception ex)
{
throw new Exception("Не удалось загрузить шаблон для экспорта " + TemplatePath + "\n" + ex.Message);
}
Worksheet ws = wb.Worksheets.get_Item(1) as Worksheet;
for (int j = 0; j < grid.Columns.Count; ++j)
{
(ws.Cells[1, j + 1] as Range).Value2 = grid.Columns[j].HeaderText;
for (int i = 0; i < grid.Rows.Count; ++i)
{
object Val = grid.Rows[i].Cells[j].Value;
if (Val != null)
(ws.Cells[i + 2, j + 1] as Range).Value2 = Val.ToString();
}
}
ws.Columns.EntireColumn.AutoFit();
Excel.ReferenceStyle = RefStyle;
ReleaseExcel(Excel as Object);
}
private void ReleaseExcel(object excel)
{
// Уничтожение объекта Excel.
Marshal.ReleaseComObject(excel);
// Вызываем сборщик мусора для немедленной очистки памяти
GC.GetTotalMemory(true);
}
using Microsoft.Office.Interop; using Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; Далее просто вызываем функцию ExportToExcel(dataGridView1);. Вроде бы просто ![]() Для большей надежности выгрузки можно вначале функции написать Excel.Visible = false; а в конце выгрузки Excel.Visible = true; Таким образом, сначала в фоновом режиме заполнятся данные, а уж потом отобразится окно Excel. |
|
|
------- Отправлено: 06:05, 30-09-2011 |
|
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Недавно как раз делал экспорт в excel, но воспользовался другим методом:
Получилось все вроде бы хорошо Экспортирует! |
|
------- Отправлено: 07:37, 30-09-2011 | #2 |
|
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Тоже неплохо
Разница в том, что твой код формирует файл в фоновом режиме и через ole провайдера. Мой код сначала активирует окно Excel и в визуальном режиме отображает заполнение. Это имеет свои недостатки - нежелательно прокручивать листы во время работы, иначе будет исключение доступа. А в целом можно использовать оба способа, кому как удобно. В моем случае можно избавиться от вечных приколов Excel, когда строку типа 01.06 он выводит в виде 1 июн - надо в шаблоне выставить тип нужного столбца в текстовый. |
|
------- Отправлено: 07:43, 30-09-2011 | #3 |
|
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Цитата Delirium:
Таких полей у меня не было, поэтому не столкнулся с этим и не знал... |
|
|
------- Отправлено: 08:20, 30-09-2011 | #4 |
|
Новый участник Сообщения: 1
|
Профиль | Сайт | Отправить PM | Цитировать check the following link that explain how to export datagridview to excel - c# full source code
http://vb.net-informations.com/excel...w_to_excel.htm lee. |
|
|
Отправлено: 21:22, 16-04-2012 | #5 |
|
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Gever_Lances@fb, и что? Приведенный тобой код немногим отличается от нашего. Или просто до копилки?
|
|
------- Отправлено: 00:59, 17-04-2012 | #6 |
|
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Спасибо автору!!!
|
|
Отправлено: 17:42, 09-06-2012 | #7 |
|
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Спасибо автору лишь хочу добавить где можно скачать dll Microsoft.Office.Interop
Office XP Office 2003 Office 2007 Office 2010 |
|
Отправлено: 16:00, 04-12-2012 | #8 |
|
Новый участник Сообщения: 1
|
Профиль | Сайт | Отправить PM | Цитировать А у меня Visual Studio 2010 ругается на ApplicationClass, что делать? Кучу сайтов перерыла,ответа не нашла(
|
|
Отправлено: 20:51, 15-05-2015 | #9 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| VBA - Помогите написать макрос в Excel, экспорт данных из Excel в Word. | E.v.g | Программирование и базы данных | 7 | 03-05-2018 22:18 | |
| .NET - Обновление текущей строки DataGridView | Delirium | Программирование и базы данных | 0 | 28-03-2011 04:55 | |
| .NET - DataGridView с Checkbox | LilLoco | Программирование и базы данных | 6 | 15-10-2010 01:21 | |
| .NET - DataGridView и C# | Efsey | Программирование и базы данных | 3 | 22-09-2010 07:21 | |
| VBA - DataGridView | MuCTEP | Программирование и базы данных | 9 | 23-07-2008 13:52 | |
|