Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/315: Рейтинг темы: голосов - 315, средняя оценка - 4.85
4 / 4 / 1
Регистрация: 14.01.2010
Сообщений: 17
1

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

16.09.2010, 11:31. Показов 63092. Ответов 70
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Экспорт данных в Excel из DataGridView. Как это делается помогите пожалуйста? Из БД Экспорт получается но я хотел после компиляции из DataGridView экспортировать.
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2010, 11:31
Ответы с готовыми решениями:

Экспорт данных из datagridview в Excel
Всем привет! Может кто-нибудь подсказать как сделать "Экспорт данных их datagridview в Exel", то...

Экспорт данных из Excel-я в DataGridView
Здравствуйте друзья Как реализовать экспорт данных из экзеля в datagridview.

Экспорт данных из dataGridView в Excel?
Я вывожу запросом данные из базы в dataGridView (на русунке ) хочу вывести эти данные в Excel как...

Экспорт данных в Excel из DataGridView
Всем привет! Думаю тема многим знакома потому, что почти каждый третий работающий в С#...

70
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
11.11.2016, 10:50 21
Author24 — интернет-сервис помощи студентам
Wanzan, Вместо
C#
1
2
3
4
5
6
7
Excel2.Application exApp_New1 = new Excel2.Application();
        Excel2.Workbook wb_New1 = null;
        Excel2.Worksheet ws_New1 = null;
        private void button5_Click(object sender, EventArgs e)
        {
            wb_New1 = exApp_New1.Workbooks.Add(System.Reflection.Missing.Value); 
...
Попробуй

C#
1
2
3
4
5
Excel2.Workbook wb_New1 = null;
        Excel2.Worksheet ws_New1 = null;
        private void button5_Click(object sender, EventArgs e)
        {
            Excel2.Application wb_New1 = exApp_New1.Workbooks.Add(System.Reflection.Missing.Value);...
Добавлено через 2 минуты
Смысл такой, что если тебе какая-либо переменная нужна в нескольких методах, то есть смысл ее занести в поле.
Но если твоя переменная, например, wb_New1 живет только внутри метода, то лучше ее создавать внутри метода, то есть делать локальной
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
11.11.2016, 11:28 22
Serg34, Поясните пожалуйста.
C#
1
2
3
4
5
        Excel2.Workbook wb_New1 = null;  // Создаем книгу wb_New1?
        Excel2.Worksheet ws_New1 = null;  // Создаем лист ws_New1?
        private void button5_Click(object sender, EventArgs e)
        {
            Excel2.Application wb_New1 = exApp_New1.Workbooks.Add(System.Reflection.Missing.Value); // И тут опять создаем книгу wb_New1?
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
11.11.2016, 11:32 23
Тьфу ты, забыл строчки удалить
Вот так:

C#
1
2
3
4
        private void button5_Click(object sender, EventArgs e)
        {
            Excel2.Application wb_New1 = exApp_New1.Workbooks.Add(System.Reflection.Missing.Value); // И тут опять создаем книгу wb_New1?
Excel2.Worksheet ws_New1 = null;  // Создаем лист ws_New1?
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
11.11.2016, 11:45 24
Serg34, а exApp_New1 получается создать надо в теле класса?
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
11.11.2016, 12:07 25
Wanzan, Я не знаю. В Вашем коде сильно не разбирался (там 200+ строчек с магическими названиями типа exApp_New1). Но алгоритм простой: если ты используешь что-то единожды, то зачем тело класса захламлять?
Ты к переменной exApp_New1 в скольких методах обращаешься?

Добавлено через 15 минут
Wanzan, Кстати, что касается EXCEL. Если у тебя будет поле в теле класса exApp_New1, которое инициализируется только один раз, то в случае закрытия EXCELя пользователем твое поле станет null и при следующем обращении к ней будет ошибка.
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
17.11.2016, 05:39 26
Serg34,
Спасибо за предыдущие ответы, помогло!
есть еще вопрос, как сохранит книгу excel без замены одноименных файлов?
что то вроде такого:
workbook.xlsx
workbook1.xlsx
workbook2.xlsx и т.д.
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
17.11.2016, 09:37 27
Wanzan, Вот код из старого проекта:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
        /// Creates a new unique name based on another name
        /// </summary>
        public static string CreateNewName(List<string> list, string baseName)
        {
            if (list == null) throw new ArgumentNullException(nameof(list));
            if (baseName == null) throw new ArgumentNullException(nameof(baseName));
 
            int count = 1;
 
            while (list.FirstOrDefault(i => i == $"{baseName}{count}") != null)
            { count++; }
 
            return baseName + count;
        }
Применение
C#
1
2
3
4
5
6
var path = "C:";
var di = new System.IO.DirectoryInfo(path);
var files = di.GetFiles("*.xlsx");
var fileNames = new List<string>(files.Select(f => f.Name));
 
var newname = CreateNewName(fileNames, "Test");
Доработайте под себя
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
17.11.2016, 11:59 28
Serg34, а что это nameof ?
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.11.2016, 06:49 29
Wanzan, это имя переменной. Удобно при отладке - получаете сообщение с названием "кривой" переменной. Плюс еще в том, что если будете переименовывать переменную (ctrl+r,ctrl+r), то и в nameof(list) ее название тоже поменяется.
Но это, видимо, нужно если Вашими библиотеками пользуются другие программисты. Если пишете для себя не думаю, что этому нужно придавать большое значение - передать в метод list == null это надо постараться.
Я же просто правилам Microsoft угождал (в Visual Studio анализ->настройка анализа-> все правила Microsoft).
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
18.11.2016, 07:09 30
Serg34,
и еще подчеркивает красным строку
C#
1
while (list.FirstOrDefault(i => i == $"{baseName}{count}") != null)
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.11.2016, 07:13 31
нужно подключить linq
C#
1
using System.Linq;
Но можно и проще сделать:
C#
1
while (list.Contains($"{baseName}{count}"))
Так даже читабельнее
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
18.11.2016, 07:24 32
Огромное спасибо за помощь!
в общем я сделал вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public static string newName(List<string> list, string baseName)
        {
            if (list == null) throw new ArgumentNullException(nameof(list));
            if (baseName == null) throw new ArgumentNullException(nameof(baseName));
 
            int count = 1;
            while (list.Contains($"{baseName}{count}"))
            {
                count++;
            }
 
            return baseName + count;
        }
но ничего не вышло. это тоже выполнил: в Visual Studio анализ->настройка анализа-> все правила Microsoft
пока решил оставить это до лучших времен пока у меня нет полного понимания, не стоит лепить код из кусков не понимая принципа еще раз благодарю за помощь!
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.11.2016, 07:26 33
Цитата Сообщение от Wanzan Посмотреть сообщение
но ничего не вышло.
Как понять ничего не вышло? ошибка какая?
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
18.11.2016, 07:28 34
так же подсвечивает строку красным: while (list.Contains($"{baseName}{count}"))
это тоже есть
C#
1
using System.Linq;
и nameof не существует в текущем контексте.
хотя настроил анализ.
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.11.2016, 07:47 35
Видимо еще каких библиотек не хватает
Если у Вас Visual Studio 2015 Community, то там очень просто это решается:
наводите курсор на проблему и у Вас лампочка с предложенными решениями появляется (или ctrl+ю)
Экспорт данных в Excel из DataGridView

Насчет анализа:
анализ производится не на ошибки компилятора, анализ показывает качественные ошибки (неправильное название переменной, неправильное использование объектов IDisposable и т.д.) Если только начинаете программировать - то да, пока рано об этом.
Но никакой связи с тем, что у Вас nameof не существует в текущем контексте и анализом нет.
Есть ошибки, которые не дадут даже запустить программу, а есть предупреждения, подсказывающие о возможных проблемах
Экспорт данных в Excel из DataGridView
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
18.11.2016, 08:12 36
у меня Visual Studio 2013. в ней заглушку можно поставит
может что другое найду
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.11.2016, 08:18 37
Так поставь Visual Studio 2015 бесплатную версию.
Не совсем понял про какую заглушку идет речь. У меня все работает. Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = "C:";
            var di = new System.IO.DirectoryInfo(path);
            var files = di.GetFiles("*.xlsx");
            var fileNames = new List<string>(files.Select(f => f.Name));
 
            var newname = CreateNewName(fileNames, "Test");
 
            Console.WriteLine(newname);
        }
 
        public static string CreateNewName(List<string> list, string baseName)
        {
            if (list == null) throw new ArgumentNullException(nameof(list));
            if (baseName == null) throw new ArgumentNullException(nameof(baseName));
 
            int count = 1;
            while (list.Contains($"{baseName}{count}"))
            {
                count++;
            }
 
            return baseName + count;
        }
    }
}
1
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
18.11.2016, 08:35 38
(объясняю на своем языке)если чего то не существует в текущем контексте, то можно на нем сформировать заглушку, чтобы нормально скомпилировать код.

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

со временем доберусь и установлю 2015

еще вот вопрос возник.
как то пытался сделать отчет, пробовал reportviewer тоже пришлось бросить это дело.
в итоге пришел к excel.
а есть ли еще способы сделать отчет? или что то вроде отчетной формы?
0
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
18.11.2016, 08:44 39
Цитата Сообщение от Wanzan Посмотреть сообщение
можно на нем сформировать заглушку
Интересен сам процесс формирования заглушки. Что Вы делаете: удаляете, "//" вначале строки ставите или еще что?

Цитата Сообщение от Wanzan Посмотреть сообщение
есть ли еще способы сделать отчет?
Способов, конечно, много. Все зависит от конкретной задачи. Но у меня не так много опыта в этом, чтобы что-то с чем-то сравнивать.
Цитата Сообщение от Wanzan Посмотреть сообщение
вроде отчетной формы
Если не нужно Excel-файла (или какого другого) то почему бы и нет?
0
2 / 2 / 2
Регистрация: 23.04.2015
Сообщений: 71
18.11.2016, 08:54 40
сам процесс не поясню. просто знаю что так можно сделать.
понял, буду разбираться)))
0
18.11.2016, 08:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2016, 08:54
Помогаю со студенческими работами здесь

Экспорт данных из DataGridView в Excel
Помогите пожалуйста, я экспортировала данные из datagridview в эксель, затем по этим данным в...

Экспорт данных из файла Excel в DataGridView
Нашел код для загрузки данных Excel в таблицу DataGridView: private void...

Datagridview экспорт в Excel и исключение некоторых данных
Привет, вот я так экспортирую из datagridview в Excel private void...

Экспорт DataGridView to Excel
Нашёл на codeproject статью &quot;Exporting a DataGridView to Excel in .NET 2.0 (C# code)&quot;. Там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru