Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 4

Экспорт DataGridView в Excel

20.06.2017, 22:22. Показов 7793. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста!
Почти все таблица состоит из вторичных ключей. Я сделал так, чтобы вместо этих ключей отображались соответствующие данные. НО вот в чем проблема. Когда экспортирую таблицу в Excel, то отображаются ключи, а не данные.
Не знаю что делать =(
Миниатюры
Экспорт DataGridView в Excel   Экспорт DataGridView в Excel  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2017, 22:22
Ответы с готовыми решениями:

DataGridView: экспорт в Excel
При копировании (ctrl+с ctrl+v) данных из DataGridView и вставке их в эксель вместо русских букв получаются козябры. В чем может быть дело?

Экспорт DataGridView в Excel
Добрый день, импортирую данные из Excel в datagrid вот таким кодом: private void load_Click(object sender, EventArgs e) { ...

Экспорт dataGridView в MS Excel
Всем привет. Есть задача написать экспорт из DataGridView в файл excel. Как понимаю для этого нужно подключить...

11
0 / 0 / 3
Регистрация: 20.06.2017
Сообщений: 7
20.06.2017, 22:32
А каким способом делаете экспорт, если не секрет?
0
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 4
20.06.2017, 22:53  [ТС]
Самый обычный экспорт тупо всей таблицы. Я не умею иначе

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
36
37
38
39
40
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
            Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
            Object misValue = System.Reflection.Missing.Value;
 
            int i;
            int j;
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets[1];
            for (i = 0; i <= договорDataGridView.RowCount - 2; i++)
            {
                for (j = 0; j <= договорDataGridView.ColumnCount - 1; j++)
                {
                    xlWorkSheet.Cells[i + 1, j + 1] = договорDataGridView[j, i].Value.ToString();
                }
            }
            try
            {
                xlWorkSheet.SaveAs(@"C:\Users\\Desktop\Договор.xlsx");
            }
 
            catch
            {
                MessageBox.Show("Экспорт невозможен, закройте файл", "Error");
                return;
 
            }
 
 
            xlWorkBook.Close();
            xlApp.Quit();
            ReleaseObject(xlApp);
            ReleaseObject(xlWorkBook);
            ReleaseObject(xlWorkSheet);
 
            MessageBox.Show("Файл сохранен на рабочий стол");
        }
 
 
        }
Добавлено через 8 минут
vitch1991,
Самый обычный. Иначе не умею(

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
36
37
38
39
40
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
            Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
            Object misValue = System.Reflection.Missing.Value;
 
            int i;
            int j;
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets[1];
            for (i = 0; i <= договорDataGridView.RowCount - 2; i++)
            {
                for (j = 0; j <= договорDataGridView.ColumnCount - 1; j++)
                {
                    xlWorkSheet.Cells[i + 1, j + 1] = договорDataGridView[j, i].Value.ToString();
                }
            }
            try
            {
                xlWorkSheet.SaveAs(@"C:\Users\\Desktop\Договор.xlsx");
            }
 
            catch
            {
                MessageBox.Show("Экспорт невозможен, закройте файл", "Error");
                return;
 
            }
 
 
            xlWorkBook.Close();
            xlApp.Quit();
            ReleaseObject(xlApp);
            ReleaseObject(xlWorkBook);
            ReleaseObject(xlWorkSheet);
 
            MessageBox.Show("Файл сохранен на рабочий стол");
        }
 
 
        }
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
20.06.2017, 23:40
Цитата Сообщение от itgima Посмотреть сообщение
Не знаю что делать =(
Если Вы берете данные непосредственно из DataGridView (что, не очень правильно) то нужно настроить биндинги для столбцов внешних ключей, чтобы в гриде отображались не ключи, а нужные данные из связанной таблицы.
Если же брать данные из DataTable, то ключи можно заменять на данные из связанной таблицы с помощью linq запроса. Примерно так:
C#
1
2
3
4
workSheet.Cells[1, 1] = 
                    _t1.AsEnumerable() 
                    .Where(r => r.Field<int>("Id").ToString() == _t2.Rows[0][1].ToString()) 
                    .FirstOrDefault()[1];
1
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 4
21.06.2017, 12:39  [ТС]
Shogun31337, значит я как-то не так настроил столбцы. У меня-то отображаются нужные данные, вместо ID, но это только "поверхностно". В корне все равно ID и в эксель выводятся тоже ID.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
21.06.2017, 14:14
Цитата Сообщение от itgima Посмотреть сообщение
Shogun31337, значит я как-то не так настроил столбцы. У меня-то отображаются нужные данные, вместо ID, но это только "поверхностно". В корне все равно ID и в эксель выводятся тоже ID.
Я, по правде говоря, не выводил ни разу значения из грида, поэтому мог ошибиться насчет столбцов. Все таки грид нужно использовать только для ввода/вывода значений в DataTable, а при других работах с данными, такими как экспорт в эксель, нужно пользоваться самой DataTable. Если в гриде отображается нормально, пусть так и остается. Переделайте экспорт не из грида, а из таблицы. И используйте тот пример, который я показал. Этот вариант 100% рабочий. Ну, разумеется, его нужно слегка подкорректировать с учетом Ваших значений.

Добавлено через 6 минут
Цитата Сообщение от Shogun31337 Посмотреть сообщение
В корне все равно ID и в эксель выводятся тоже ID.
Не совсем понятно, что такое "корень", но в принципе, как то так и должно быть. У столбцов грида есть свойства ValueMember и DisplayMember. Если привязки сделаны правильно, то в DisplayMember (это то что отображается в столбце) может быть вместо ID какая то текстовая информация из связанной таблицы (например ФИО), но при этом ValueMember содержит как раз ID связанное с этим ФИО. И при выборе значения в таблицу будет внесен именно ИД, а не текст.
1
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
21.06.2017, 14:44
Shogun31337, Скорее всего именно так и происходит )
Если же тогда делать напрямую выгрузку с DataTable - то будет такая же каша. Поэтому перед експортом нужно создавать правильную таблицу, через, например, Linq вместе с джойнами по связанным таблицам. Правда я делал это ой как давно, что уже и не вспомню весь код. А сейчас перешли на DevExpress, а там такой проблемы уже нету, там своя компонента выгрузки )
0
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 4
21.06.2017, 15:31  [ТС]
hoolygan, Shogun31337, может подскажете тогда как мне вывести все эти данные хотя бы в report view ?
чтоб я указывал id в столбце, а мне выводило информацию . Ну в таком же виде, как я сделал в DataGridView.
Или может есть еще проще способ какой-нибудь
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
21.06.2017, 18:24
Цитата Сообщение от itgima Посмотреть сообщение
hoolygan, Shogun31337, может подскажете тогда как мне вывести все эти данные хотя бы в report view ?
чтоб я указывал id в столбце, а мне выводило информацию
itgima, я же Вам показал еще в первом сообщении как заменить ключи на текст!

Добавлено через 3 минуты
hoolygan, я понимаю, что если выводить напрямую, то останутся ключи. Поэтому я и показал как их заменить на произвольный столбец в связанной таблице. Насчет формирования новой таблицы с джойнами, согласен, рабочий вариант, но, на мой взгляд, более объемный по коду, нежели мой.
1
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
21.06.2017, 19:42
Shogun31337, 6 столбиков, на каждый столбик 3 строчки кода в цикле. Думаете более объемный?
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
22.06.2017, 02:04
hoolygan, не охота писать запрос с объединением 7 таблиц ради проверки! Предлагаю сойтись на том, что они примерно равны!
1
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
22.06.2017, 08:56
Shogun31337, согласен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2017, 08:56
Помогаю со студенческими работами здесь

экспорт из datagridview в excel
Здравствуйте!помогите вернуть отредактированный фаил datagridview в excel!Открываю яего таким способом а как его пересохранить? ...

Экспорт DataGridView to Excel
Нашёл на codeproject статью &quot;Exporting a DataGridView to Excel in .NET 2.0 (C# code)&quot;. Там говорится, что для начала нужно создать объект...

Экспорт из dataGridView в Excel
Собственно, вопрос содержится в заголовке. И вроде бы даже нашелся ответ ...

Экспорт из DataGridView в Excel!
Здравствуйте!!! Возникла такая проблема. На Form1 имеется striptmenu, в котором есть функция &quot;Новый&quot;. Появляется новая форма...

Экспорт в Excel из DataGridView
Доброго времени суток, не ругайте за вопрос. в инете тысячи примеров..и вроде как взяла пример от туда. Но выдает ошибку. Вопрос собственно...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru