Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
3 / 3 / 2
Регистрация: 31.10.2017
Сообщений: 35

Экспорт DataGridView в Excel с сохранением формата ячеек DataGridView

09.02.2018, 13:44. Показов 8566. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени.

Ситуевина такая:
При экспорте dgv в эксель, эксель сам расставляет форматы ячеек как ему понравится, в связи с чем вместо чисел получается мега странная фигня(либо сам убирает нули вначале\в конце либо переводит в супер формат плана 13123+17Е).

DGV подключено к sql server, на сервере все хранится в nvchar(255)

код експорта в эксель:
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
private void ToExcel(DataGridView dGV, string filename)
        {
            string stOutput = "";
            string stHeaders = "";
            for (int j = 0; j < dGV.Columns.Count; j++)
                stHeaders = stHeaders.ToString() + Convert.ToString(dGV.Columns[j].HeaderText) + "\t";
            stOutput += stHeaders + "\r\n";
 
            for (int i = 0; i < dGV.RowCount - 1; i++)
            {
                string stline = "";
                for (int j = 0; j < dGV.Rows[i].Cells.Count; j++)
                    stline = stline.ToString() + Convert.ToString(dGV.Rows[i].Cells[j].Value) + "\t";
                stOutput += stline + "\r\n";
            }
 
            Encoding utf16 = Encoding.GetEncoding(1251);
            byte[] output = utf16.GetBytes(stOutput);
            FileStream fs = new FileStream(filename, FileMode.Create);
            BinaryWriter bw = new BinaryWriter(fs);
            bw.Write(output, 0, output.Length);
            bw.Flush();
            bw.Close();
            fs.Close();
 
private void SaveToExcel_Click(object sender, EventArgs e)
        {
 
 
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Excel Document (*.xls)|*.xls";
            sfd.FileName = string.Format("{0}.xls", dateTimePicker1.Text);
 
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                ToExcel(dataGridView1, sfd.FileName);
            }
Подскажите, как экспортировать с фиксированным форматом?
Или может не фиксированный формат это называется..не знаю
Нужно что бы экспортировало так, как есть в dgv.

Добавлено через 2 часа 47 минут
Дошло глянуть блокнотом, целы ли цифры в изначальном своем, так сказать..и да, все целы и отображаются правильно.
Видимо проблемы в экселе((

Простите грешного за корявый топик((

Добавлено через 32 минуты
А хотя, наверно, все же сюда вопрос)))

При попытки открытия excel выдает *формат файла 1.xls не соответствует разрешению. Возможно файл поврежден или небезопасен*.

Подсказывайте пожалста, куда и что делаю не так(
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2018, 13:44
Ответы с готовыми решениями:

Копирование листа excel с сохранением формата ячеек
Добрый день! Копирую лист с одного excel файла в другой вот таким способом: vTemp=wSheet1.OlePropertyGet(&quot;Range&quot;,...

Поиск ячеек заданного формата в DataGridView
В колонке DataGridViev содержаться данные двух форматов даты/времени: например 13.06.2015 и 13.06.2015.1:00:00 Мне необходимо в цикле ...

Импорт в datagridview из Excel c сохранением форматирования
Нужна помощь. Нужно загрузить содержимое файла Excel с сохранением форматирования (цвет ячейки, выравнивание текста,шрифт) в...

5
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.02.2018, 17:58
ZanydaZanydnaya, ты экспортируешь в обычный текстовый формат с разделителем по табуляции, но сохраняешь с расширением xls. Отсюда и сообщение, что файл повреждён.
1
3 / 3 / 2
Регистрация: 31.10.2017
Сообщений: 35
09.02.2018, 21:28  [ТС]
ViterAlex,
А подскажите, как сделать правильно
этот способ, из двух виденных мной, оказался самым быстрым для выгрузки 60к+ строк из базы

При подобном(ниже) способе все действо задумывается на час - полтора:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
            Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
            app.Visible = true;
            {
                worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.ActiveSheet;
                worksheet.Name = "Exported";
                               for (int i = 0; i < accountsDataGridView.Rows.Count - 1; i++)
                {
                    for (int j = 0; j < accountsDataGridView.Columns.Count; j++)
                    {
                        if (accountsDataGridView.Rows[i].Cells[j].Value != null) // <---
                        {
                            worksheet.Cells[i + 2, j + 1] = accountsDataGridView.Rows[i].Cells[j].Value.ToString();
                        }
                    }
                }
            }
1
3 / 3 / 2
Регистрация: 31.10.2017
Сообщений: 35
20.02.2018, 10:33  [ТС]
К сожалению, так и не смог решить проблему((
может кто подскажет? 8(
1
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
20.02.2018, 11:27
Лучший ответ Сообщение было отмечено ZanydaZanydnaya как решение

Решение

попробуй через буфер обмена:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void СopyAlltoClipboard()
    {
        dataGridView1.SelectAll();
        DataObject dataObj = dataGridView1.GetClipboardContent();
        if (dataObj != null)
            Clipboard.SetDataObject(dataObj);
    }
    private void button3_Click_1(object sender, EventArgs e)
    {
        СopyAlltoClipboard();
        Microsoft.Office.Interop.Excel.Application xlexcel;
        Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
        Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;
        xlexcel = new Excel.Application();
        xlexcel.Visible = true;
        xlWorkBook = xlexcel.Workbooks.Add(misValue);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.ActiveSheet;
        Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1];
        CR.Select();
        xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);          
    }
2
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
20.02.2018, 11:46
Лучший ответ Сообщение было отмечено ZanydaZanydnaya как решение

Решение

вот тут есть пример выгрузки данных из DGV в Excel

Вывод данных из TextBox в Excel
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2018, 11:46
Помогаю со студенческими работами здесь

Экспорт в DataGridView в Excel
как экспортировать таблицу datagridview в Excell на С#

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

Экспорт DataGridView в Excel
Помогите пожалуйста! Почти все таблица состоит из вторичных ключей. Я сделал так, чтобы вместо этих ключей отображались соответствующие...

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru