Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056

Экспорт из DataGridView в MS Excel 2003

10.04.2013, 23:06. Показов 4227. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вечер добрый. В общем нужно экспортировать таблицу DataGridView в MS Excel 2003. На форуме нашел всего одну тему посвященную соохранению в эксель, вот она Экспорт данных в Excel из DataGridView , судя по описанию она мне подходит, но не получается. Написано, что нужно подключить ссылку на Microsoft.Office.Interop.Excel. У меня studio 2010, ничего похожего не нашел. Прошу помочь с подключением этого кода или если у кого есть готовый рабочий код поделитесь пожалуйста

Добавлено через 2 минуты
кстатит, вот тот код, выкладывал DM_AND
Ссылку на Microsoft.Office.Interop.Excel
Кликните здесь для просмотра всего текста
VB.NET
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
    Private Sub Button2_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click
 
 
        Dim xlApp As Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim xlWorkSheet As Excel.Worksheet
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim i As Integer
        Dim j As Integer
 
        xlApp = New Excel.ApplicationClass
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets("sheet1")
 
        For i = 0 To DataGridView1.RowCount - 2
            For j = 0 To DataGridView1.ColumnCount - 1
                xlWorkSheet.Cells(i + 1, j + 1) = _
                    DataGridView1(j, i).Value.ToString()
            Next
        Next
 
        xlWorkSheet.SaveAs("C:\DM.xls")
        xlWorkBook.Close()
        xlApp.Quit()
 
        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)
 
        MsgBox("Ваш файл сохранен в C:\DM.xls")
    End Sub
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2013, 23:06
Ответы с готовыми решениями:

Экспорт DataGridView в Excel с сохранением формата ячеек DataGridView
Доброго времени. Ситуевина такая: При экспорте dgv в эксель, эксель сам расставляет форматы ячеек как ему понравится, в связи с чем...

экспорт данных из Excel в active direcory (wund server 2003)
написал скрипт, который импортирует данные из AD в EXCEL. Каким скриптом, или как мне сделать так, что бы его можно было выгрузить обратно?...

Экспорт данных из MS SQL Server 2005 в MS Excel 2003-2007
Здравствуйте! У меня такой вопрос. Можно ли средствами T-SQL экспортировать данные в файл MS Excel 2003-2007. Полная версия...

32
55 / 55 / 5
Регистрация: 17.09.2012
Сообщений: 128
11.04.2013, 09:10
Microsoft Visual Basic 2010 -> Проект -> Добавить ссылку...
В открывшемся окне на вкладке COM найти Microsoft Exel 15.0 Object Library. Выделяем, жмём ОК.

В коде формы, в самом верху добавляем строку:

VB.NET
1
Imports Microsoft.Office.Interop
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.04.2013, 17:44  [ТС]
Цитата Сообщение от madgun Посмотреть сообщение
Microsoft Visual Basic 2010 -> Проект -> Добавить ссылку...
В открывшемся окне на вкладке COM найти Microsoft Exel 15.0 Object Library. Выделяем, жмём ОК.
У меня только 12.0 и 5.0
Выбирил оба варианта, все равно ругается. Imports Microsoft.Office.Interop - писал
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.04.2013, 17:45  [ТС]
вот скрин что есть у меня
Миниатюры
Экспорт из DataGridView в MS Excel 2003  
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.04.2013, 17:48  [ТС]
Вот на что ругается, подчеркивает синтаксис
Миниатюры
Экспорт из DataGridView в MS Excel 2003  
0
55 / 55 / 5
Регистрация: 17.09.2012
Сообщений: 128
11.04.2013, 21:25
попробуйте заменить
VB.NET
1
xlApp = New Excel.ApplicationClass
на
VB.NET
1
xlApp = New Excel.Application
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.04.2013, 21:28  [ТС]
осталась проблема с
VB.NET
1
2
3
releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)
подчеркивает ошибкой по прежнему
0
55 / 55 / 5
Регистрация: 17.09.2012
Сообщений: 128
11.04.2013, 21:43
мне кажется, что эти строчки можно удалить ^^
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.04.2013, 22:06  [ТС]
Эти три строчки удалил, вроде все нормально стала - не подчеркивает код как ошибки. Но когда начинаю отладку вылетает ошибка. На скрине.

А готового рабочего кода ни у кого нет случайно?
Миниатюры
Экспорт из DataGridView в MS Excel 2003  
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.04.2013, 22:08  [ТС]
видимо те три строчки не просто так были
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
11.04.2013, 22:37
добавьте вот эту процедуру к себе
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub ReleaseObject(ByVal obj As Object)
        'процедура выгрузки объектов из памяти
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
            MessageBox.Show("Exception occured while releasing object " + ex.ToString())
        Finally
            GC.Collect()
        End Try
    End Sub
End Class
P.S. Мой совет по работе с Excel:

1) создайте двумерный массив
2) занесите в него циклом все значения данных из DataGridView
3) одной строчкой выгрузите весь двумерный массив на лист Excel
VB.NET
1
xlSht.Range("A1").Resize(UBound(myArr, 1), UBound(myArr, 2)).Value2 = myArr
1
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
11.04.2013, 23:21  [ТС]
помогите, пожалуйста, правильно объединить ваш код с моим? Не могу понять где конкретно нужно применить вашу процедуру в первом коде
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
17.04.2013, 18:32  [ТС]
нашел вот такой код, он рабочий, выводит в формат .xls но при открытии все время ставит вопрос о совместимости формата файла с форматом эксель. В итоге после нажати "Да" файл открывается, но не красивое окно совмещения формата каждый раз н очень нравится. Хотелось бы красиво открывать файл

Кликните здесь для просмотра всего текста
VB.NET
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Public Class Form1
    Private Declare Function ShellEx Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hWnd As Integer, ByVal lpOperation As String, _
        ByVal lpFile As String, ByVal lpParameters As String, _
        ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer
 
    Private Sub exportExcel(ByVal grdView As DataGridView, ByVal fileName As String, _
        ByVal fileExtension As String, ByVal filePath As String)
 
        ' Choose the path, name, and extension for the Excel file
        Dim myFile As String = filePath & "\" & fileName & fileExtension
 
        ' Open the file and write the headers
        Dim fs As New IO.StreamWriter(myFile, False)
        fs.WriteLine("<?xml version=""1.0""?>")
        fs.WriteLine("<?mso-application progid=""Excel.Sheet""?>")
        fs.WriteLine("<ss:Workbook xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"">")
 
        ' Create the styles for the worksheet
        fs.WriteLine("  <ss:Styles>")
        ' Style for the column headers
        fs.WriteLine("    <ss:Style ss:ID=""1"">")
        fs.WriteLine("      <ss:Font ss:Bold=""1""/>")
        fs.WriteLine("      <ss:Alignment ss:Horizontal=""Center"" ss:Vertical=""Center"" " & _
            "ss:WrapText=""1""/>")
        fs.WriteLine("      <ss:Interior ss:Color=""#C0C0C0"" ss:Pattern=""Solid""/>")
        fs.WriteLine("    </ss:Style>")
        ' Style for the column information
        fs.WriteLine("    <ss:Style ss:ID=""2"">")
        fs.WriteLine("      <ss:Alignment ss:Vertical=""Center"" ss:WrapText=""1""/>")
        fs.WriteLine("    </ss:Style>")
        fs.WriteLine("  </ss:Styles>")
 
        ' Write the worksheet contents
        fs.WriteLine("<ss:Worksheet ss:Name=""Sheet1"">")
        fs.WriteLine("  <ss:Table>")
        For i As Integer = 0 To grdView.Columns.Count - 1
            fs.WriteLine(String.Format("    <ss:Column ss:Width=""{0}""/>", _
            grdView.Columns.Item(i).Width))
        Next
        fs.WriteLine("    <ss:Row>")
        For i As Integer = 0 To grdView.Columns.Count - 1
            fs.WriteLine(String.Format("      <ss:Cell ss:StyleID=""1"">" & _
                "<ss:Data ss:Type=""String"">{0}</ss:Data></ss:Cell>", _
                grdView.Columns.Item(i).HeaderText))
        Next
        fs.WriteLine("    </ss:Row>")
 
        ' Check for an empty row at the end due to Adding allowed on the DataGridView
        Dim subtractBy As Integer, cellText As String
        If grdView.AllowUserToAddRows = True Then subtractBy = 2 Else subtractBy = 1
        ' Write contents for each cell
        For i As Integer = 0 To grdView.RowCount - subtractBy
            fs.WriteLine(String.Format("    <ss:Row ss:Height=""{0}"">", _
                grdView.Rows(i).Height))
            For intCol As Integer = 0 To grdView.Columns.Count - 1
                cellText = grdView.Item(intCol, i).Value
                ' Check for null cell and change it to empty to avoid error
                If cellText = vbNullString Then cellText = ""
                fs.WriteLine(String.Format("      <ss:Cell ss:StyleID=""2"">" & _
                    "<ss:Data ss:Type=""String"">{0}</ss:Data></ss:Cell>", _
                    cellText.ToString))
            Next
            fs.WriteLine("    </ss:Row>")
        Next
 
        ' Close up the document
        fs.WriteLine("  </ss:Table>")
        fs.WriteLine("</ss:Worksheet>")
        fs.WriteLine("</ss:Workbook>")
        fs.Close()
 
        ' Open the file in Microsoft Excel
        ' 10 = SW_SHOWDEFAULT
        ShellEx(Me.Handle, "Open", myFile, "", "", 10)
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
        ' Create a couple of rows
        Dim row1() As String = New String() {"Joe", "Benjamin", vbNullString, "23"}
        Dim row2() As String = New String() {"Michael", "", "Brown", "32"}
        Dim row3() As String = New String() {"Phil", "Todd", "Lee", "42"}
 
        ' Add the rows to the DataGridView
        DataGridView1.Rows.Add(row1)
        DataGridView1.Rows.Add(row2)
        DataGridView1.Rows.Add(row3)
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
        ' Call the export sub
        exportExcel(DataGridView1, "exportedData", ".xls", _
            My.Computer.FileSystem.SpecialDirectories.Desktop)
    End Sub
End Class
0
Заблокирован
17.04.2013, 20:03
Цитата Сообщение от emenem97 Посмотреть сообщение
fs.WriteLine(" <ss:Style ss:ID=""2"">") fs.WriteLine(" <ss:Alignment ss:Vertical=""Center"" ss:WrapText=""1""/>") fs.WriteLine(" </ss:Style>") fs.WriteLine(" </ss:Styles>")
А не хрен ему так данные передавать!
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
17.04.2013, 23:43
Цитата Сообщение от emenem97 Посмотреть сообщение
помогите, пожалуйста, правильно объединить ваш код с моим? Не могу понять где конкретно нужно применить вашу процедуру в первом коде
Просто добавьте "мою" процедуру ReleaseObject к себе в код ниже вашей
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
20.04.2013, 11:26  [ТС]
Цитата Сообщение от Pavel55 Посмотреть сообщение
Просто добавьте "мою" процедуру ReleaseObject к себе в код ниже вашей
добавил. Ошибка все там же в одном месте, где и была. Посморите пожалуйста проект, во вложении
Миниатюры
Экспорт из DataGridView в MS Excel 2003  
Вложения
Тип файла: rar WindowsApplication1.rar (70.2 Кб, 17 просмотров)
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
20.04.2013, 12:01
1) У вас какой Excel стоит русский или английский? замените вашу строку

xlWorkSheet = xlWorkBook.Sheets("Sheet1")

на вот эту

VB.NET
1
xlWorkSheet = xlWorkBook.Worksheets(1) 'или xlWorkBook.Worksheets("Лист1") - но Worksheets(1) будет универсальнее
2) у вас какой Excel установлен 2003 или 2007/10/13 ?
Если 2007 и выше, то расширение файла лучше указать не *.xls, а *.xlsx

xlWorkSheet.SaveAs("C:\DM.xlsx")
1
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
20.04.2013, 18:09  [ТС]
Цитата Сообщение от Pavel55 Посмотреть сообщение
2) у вас какой Excel установлен 2003 или 2007/10/13 ?
нужно в 2003 формат выгружать. Поменял строку, как указали выше. В общем сейчас получается так:
1) Пустой DataGrid выгружает в xls, но при открытии рыгуется на формат (но открывает все равно его)
2) Пустой DataGrid если выгружать в xlsx, то выгружает и не ругается при открытии
3) Если заполню хоть одну ячейку в DataGrid, то не выгружает ни в xls ни в xlsx, ошибка в режиме отладки ниже
Миниатюры
Экспорт из DataGridView в MS Excel 2003  
0
 Аватар для Серж_87
1303 / 509 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
20.04.2013, 21:24  [ТС]
Была моя ошибка, сейчас проверил - выгружает в эксель 2007 правильно, работает хорошо. А вот тот факт, что указываю расширение xls или xlsx значения не имеет. все равно в 2007 выгружает, просто ругается при открытии, даже если xls указать формат. Может быть кто знает или есть готовый код по выгрузке именно в xls формат? 2007-й не подходит...
0
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
20.04.2013, 21:40
1) чтобы сохранять в формате Excel 2003 нужно обязательно указывать аргумент FileFormat у метода SaveAs, т.к. у вас стоит версия выше, а вы этого не делаете и формат файла записывается на диск *.xlsx, а вы при имени файла указываете *.xls (старый формат), поэтому Excel и ругается при его открытии - мол файл имеет новый формат, а расширение старое.

пишите так

xlWorkSheet.SaveAs("D:\DM.xls", FileFormat:=56)

2) я запустил проект, заполнил 2 строки и 3 столбца в DataGrid и всё прекрасно сохранилось. Не знаю, почему у вас не работает. Вот мой кусок кода
VB.NET
1
2
3
4
5
6
7
8
9
10
11
xlApp = New Excel.Application
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets(1)
 
        For i = 0 To DataGridView1.RowCount - 2
            For j = 0 To DataGridView1.ColumnCount - 1
                xlWorkSheet.Cells(i + 1, j + 1) = DataGridView1(j, i).Value.ToString()
            Next
        Next
 
        xlWorkSheet.SaveAs("D:\DM.xls", FileFormat:=56) 'укажите свой путь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2013, 21:40
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru