Vb net сохранить файл excel

11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

1

22.11.2011, 14:56. Показов 52941. Ответов 24


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

Доброго времени суток.
Приведите, если не сложно, пару примеров работы с excel. Создание, открытие книги/страницы, сохрание в информации в определенную ячейку, сохранение документа.



0



1 / 1 / 0

Регистрация: 19.09.2011

Сообщений: 51

22.11.2011, 15:03

2

Excle? Excele? Не знакомый софт. Или вы про MS Office | Excel?



0



11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

22.11.2011, 15:06

 [ТС]

3

excel, офис, конечно, *.xls



0



Памирыч

Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

22.11.2011, 15:24

4

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Exc As Object
        Exc = CreateObject("Excel.Application")
        Exc.Workbooks.Open("C:1.xls").Activate()
        Exc.Cells(1, 1) = "ПРИВЕТ!"
        Exc.Rows(7).Insert(Shift:=-4121)
        Exc.ActiveWorkbook.Save()
        Exc.ActiveWorkbook.Close()
        Exc.Quit()
        Exc = Nothing
    End Sub
End Class



7



11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

22.11.2011, 15:35

 [ТС]

5

Памирыч, а лист книги эксель где указывать?



0



Юпатов Дмитрий

1706 / 1194 / 227

Регистрация: 23.12.2010

Сообщений: 1,526

22.11.2011, 15:39

6

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

1)Добавляем в референцы ссылку на Microsoft Excel 11 object library

далее:

VB.NET
1
2
3
4
Dim _excel as new microsoft.office.interop.excel.application
Dim _workbook as microsoft.office.interop.excel.workbook
_excel.visible=true'отображаем пустой эксель на экране
_workbook=excel.worcbooks.add()'cjplftv новую книгу на основе шаблона по-умолчанию. Если нужен конкретный шаблон, то в скобках указать полный путь к файлу, который будет шаблоном

итог: имеешь экземпляр экселя в переменной _excel и экземпляр книги _workbook. Делай с ними что хошь.
Активация нужного листа в книге:

VB.NET
1
_workbook.sheets(2).activate

активирует лист за номером 2 в книге.
Все остальное — см члены переменных _excel и _workbook. Плюс пользуйся макрорекордером, встроенным в эксель. Там синтаксис на 90% совпадет, ну разве что по мелочам поменяешь.

Еще: в самом начале мы добавили ссылку на библу экселя. Это называется «раннее связывание».
Можно было не добавлять. Тогда это позднее связывание. Тогда ситуация такая:

VB.NET
1
2
Dim _excel as object
Dim _workbook as object

если эксель запущен, можно подхватить активный экземпляр

VB.NET
1
_excel = getobject("Excel.Application")

или, если фрагмент выше в итоге останется nothing, можно создать новый

VB.NET
1
_excel = createobject("Excel.Application")

далее так же как и по первому примеру. Только нужно хорошо знать объектную модель экселя: члены не будут видны при написании кода.
Примерно так. За 100% корректность синтаксиса не ручаюсь — писал на коленке, но работаю с вордом и экселем часто, так что сильно не наопечатывался.



4



am-wrag

11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

24.11.2011, 14:48

 [ТС]

7

Цитата
Сообщение от Юпатов Дмитрий
Посмотреть сообщение

1)Добавляем в референцы ссылку на Microsoft Excel 11 object library

Обьясни как.
Я так понял это через

VB.NET
1
Import ...

А здесь что именно писать?

Добавлено через 6 минут
Нашол где чо, только у меня Microsoft Excel 14 object library или здесь без разницы, прсото версия поновей?

Добавлено через 6 минут
От себя дабавлю что пример Памирыч не применим для стартового изучения, поскольку без импорта библиотеки не выскакивают подсказки с вариантами, а без этого лично мне очень тяжео разобраться.



0



Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

24.11.2011, 14:58

8

Цитата
Сообщение от am-wrag
Посмотреть сообщение

не применим для стартового изучения

Согласен, но я отказался от библ, уж больно их не охота таскать за прогой.
Насчет стартового изучения — полностью за.



0



am-wrag

11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

24.11.2011, 17:27

 [ТС]

9

Обьясните плиз чем отличаются обьекты

VB.NET
1
2
Dim книга As Workbook, book As _Workbook
Dim лст As Worksheet, lst As _Worksheet

Допустим просто Worksheet совершенно не подходит для работы, у него совершенно отсутвуют параметры в отличие от такогоже но с _



0



1706 / 1194 / 227

Регистрация: 23.12.2010

Сообщений: 1,526

24.11.2011, 17:52

10

Цитата
Сообщение от am-wrag
Посмотреть сообщение

меня Microsoft Excel 14 object library

это у тебя просо офис поновее. Кажется 2010.

Цитата
Сообщение от Памирыч
Посмотреть сообщение

Согласен, но я отказался от библ, уж больно их не охота таскать за прогой

В данном случае и не надо таскать библу экселя с собой. Для этого в референцах параметр «копировать локально» ставим в false и все, библа не будет добавляться в пакет установки. А работать даже перетащенная, она без установленного экселя все равно не будет. Так что на конечной машине наличие экселя — обязательно.

Цитата
Сообщение от Памирыч
Посмотреть сообщение

Насчет стартового изучения — полностью за

Конечно, но можно пойти на хитрость:
1) в начале проектирования добавляем библу, пишем код, тестим.
2) На финише типы переменных, завязанные на эту библу, меняем на object, в референцах удаляем ссылку на библу.
Вуаля! Получаем в итоге позднее связывание с удобствами проектирования раннего.



2



am-wrag

11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

28.11.2011, 16:27

 [ТС]

11

Почемуто после каждого сохраниения в процессах остается событие EXCEL.EXE, которое продолжает множится при последующих сохранениях.
В коде имеется

VB.NET
1
xls.ActiveWorkbook.Close() :  xls.Quit()



1



Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

28.11.2011, 16:48

12

am-wrag, после закрытия программы процессы продолжают висеть?



0



Юпатов Дмитрий

1706 / 1194 / 227

Регистрация: 23.12.2010

Сообщений: 1,526

28.11.2011, 16:57

13

попробуй сделать после всего

VB.NET
1
xls.Dispose

потому как хоть ты эксель и закрыл, но переменная осталась.
Ручаться не стану, но вполне может помочь.
Однако это не очень красиво, т.к. снова использовать объект xls ты сможешь только после рестарта программы (уничтожаем саму переменную, а не значение)



1



11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

28.11.2011, 17:44

 [ТС]

14

Цитата
Сообщение от Памирыч
Посмотреть сообщение

am-wrag, после закрытия программы процессы продолжают висеть?

Когда прога закрывается процессы пропадают. Заметил тут ещё такую чтуку: сохранять позволяет в эксель токлько первый раз, затем процесс сохранения не пашет…



1



Памирыч

Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

28.11.2011, 17:59

15

Работа такого кода представлена на скрине, в ходе работы программы не было ни одной ошибки:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Class Form1
    Dim appExcel As Object
    Dim I As Integer = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        appExcel = CreateObject("Excel.Application")
        appExcel.Workbooks.Open("C:1.xls")
        appExcel.Visible = False
        With appExcel.ActiveSheet
            .Range("C" & I + 1).Value = "QWERTY" & I
        End With
        appExcel.Workbooks(1).Close(True)
        appExcel.Quit()
        I += 1
    End Sub
End Class

Миниатюры

Работа с excel: Открытие, чтение, запись, сохранение книги
 



5



am-wrag

11 / 11 / 2

Регистрация: 17.02.2011

Сообщений: 145

29.11.2011, 12:47

 [ТС]

16

Вот мои проекты, вроде отличий минимум… Код загрузки информации в лист бокс работает прекрасно(если не брать в расчет лишних процессoв). Код сохранения не сохраняет, ума не приложу почему…
Части кода отвечающие за передачу информации о контролах работают абсолютно верно, неодноркатно проверял. Проблема именно в процессе сохранения данных в эксель.

Код сохранения

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub SaveOpt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveOpt.Click
        SaveF.Filter = "Excele 2003 файл настроек (*.xls)|*.xls"
        SaveF.FileName = "Opt_XAR" : SaveF.ShowDialog()
        xls = New Microsoft.Office.Interop.Excel.Application
        Try
            книга = xls.Workbooks.Open(SaveF.FileName) : книга.Activate() : b = 0
        Catch
            книга = xls.Workbooks.Add : книга.Activate() : b = 1
        End Try
        лст = книга.Sheets(1) : c = 1
        For n = 0 To main.TabControl1.TabPages.Count - 1
            For i = c To c - 1 + main.TabControl1.TabPages(n).Controls.Count / 2
                лст.Cells(i, 1) = main.TabControl1.TabPages(n).Controls("LB" & i).Text
                лст.Cells(i, 2) = main.TabControl1.TabPages(n).Controls("TB" & i).Text
            Next
            If n = 0 Then c += 20 Else c += 30
        Next
        лст.Cells(1, 4) = main.Find_name.Text
        If b = 0 Then xls.ActiveWorkbook.Save() Else xls.ActiveWorkbook.SaveAs(SaveF.FileName)
        книга.Close(True) : xls.Quit()
    End Sub

Код загрузки

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
 Private Sub OpnOpt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpnOpt.Click
        table = Nothing
        table = New Data.DataTable
        table.Columns.Add("1") : table.Columns.Add("2")
        OpnF.Filter = "Файл настроек (*.xls)|*.xls"
        OpnF.FileName = "Opt_XAR"
        OpnF.ShowDialog()
        Try
            xls = New Microsoft.Office.Interop.Excel.Application
            книга = xls.Workbooks.Open(OpnF.FileName)
            лст = книга.Sheets(1)
            InX.Items.Clear() 
            For i = 1 To лст.UsedRange.Rows.Count
                InX.Items.Add(лст.Cells(i, 1).value2)
                If лст.Cells(i, 2).value2 Is Nothing Then
                Else
                    table.Rows.Add()
                    table.Rows.Item(c).Item(0) = лст.Cells(i, 1).value2
                    table.Rows.Item(c).Item(1) = лст.Cells(i, 2).value2                    
                End If
            Next
            книга.Close(True) : xls.Quit() : ind = 1            
        Catch
            ind = 0
        End Try
    End Sub

Добавлено через 1 час 48 минут
Забыл про обьявления

VB.NET
1
2
3
4
5
6
7
8
9
Imports System.Data
Imports System.IO
Imports Microsoft.Office.Interop.Excel
Public ind, x As Integer
    Dim xls As Application
    Dim книга As Workbook
    Dim лст As _Worksheet, c, b As Integer 
    Dim rng As Range
    Public table As Data.DataTable



1



ctac1412

18 / 18 / 2

Регистрация: 12.02.2013

Сообщений: 387

12.04.2016, 12:44

17

Памирыч, Добрый день! Очень мало инфы по exel для неопытных пользователей в интернете. Если не затрудник, не могли бы взглянуть на проблему?
с тем как записать и вывести значение + закрывание процесса я разобрался…. Но теперь не могу сдеать основное действие.
Нужно найти первую ячейку в столбике B2 по формату( любой цвет который введем, допустим черный)Найти- разукрасить в красный и выдать нам сообщение, причем ячеек может быть не 1 , что мы и спрашиваем в inputbox. В vba у меня получилось, а сюда перенести не могу….. Ошибка выскакивает на _Excel.xlFormulas, xlPart, xlByColumns..в общем уточняющих… Как верно нужно объявлять? Он пишет что они не относятся к _Excel

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        Dim _Excel As New Application 'Приложение Excel
        Dim Книга As Workbook = _Excel.Workbooks.Open("C:UsersStanislavDesktoptest.xlsx", [ReadOnly]:=False) 'Открываем книгу
        Dim Лист As Worksheet = CType(Книга.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet) 'Первый лист книги
        Try
            _Excel.Range("B1").Select()
        With _Excel.Application.FindFormat.Font
            .Name = "Calibri"
            .FontStyle = "обычный"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
 
            .Color = -1003520
            .TintAndShade = 0
        End With
        _Excel.Cells.Find(What:="", After:=_Excel.ActiveCell, LookIn:=_Excel.xlFormulas, LookAt:=
        _Excel.xlPart, SearchOrder:=_Excel.xlByColumns, SearchDirection:=_Excel.xlNext, MatchCase:=
        False, SearchFormat:=True).Activate()
        _Excel.ActiveCell.Value = "Привет"

Добавлено через 37 минут
Памирыч, нашел рабочий пример на англиццком, если поможете подогнать под мою задачу, было бы отлично…. как задать формат поиска, а не row искать.

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
Imports Excel = Microsoft.Office.Interop.Excel
 
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim xlApp As New Excel.Application
        Dim xlWb As Excel.Workbook
        Dim xlsheet As Excel.Worksheet
        Dim lRow As Long = 0
 
        With xlApp
            .Visible = True
 
            '~~> Open workbook
            xlWb = .Workbooks.Open("c:Sample.xlsx")
 
            '~~> Set it to the relevant sheet
            xlsheet = xlWb.Sheets("Sheet1")
 
            With xlsheet
                '~~> Check if there is any data in the sheet
                If xlApp.WorksheetFunction.CountA(.Cells) <> 0 Then
                    lRow = .Cells.Find(What:="*", _
                                  After:=.Range("A1"), _
                                  LookAt:=Excel.XlLookAt.xlPart, _
                                  LookIn:=Excel.XlFindLookIn.xlFormulas, _
                                  SearchOrder:=Excel.XlSearchOrder.xlByRows, _
                                  SearchDirection:=Excel.XlSearchDirection.xlPrevious, _
                                  MatchCase:=False).Row
                Else
                    lRow = 1
                End If
            End With
 
            MessageBox.Show("The last row in Sheet1 which has data is " & lRow)
 
            '~~> Close workbook and quit Excel
            xlWb.Close(False)
            xlApp.Quit()
 
            '~~> Clean Up
            releaseObject(xlsheet)
            releaseObject(xlWb)
            releaseObject(xlApp)
 
        End With
    End Sub
 
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub
End Class

Автор http://www.siddharthrout.com/2… rettyPhoto



1



Почетный модератор

21371 / 9105 / 1082

Регистрация: 11.04.2010

Сообщений: 11,014

12.04.2016, 13:02

18

ctac1412, Я не знаток Экселя, увы. Будет лучше, если Вы будете обращаться не к конкретным пользователям, а ко всем; не нужно указывать ники. И лучше создавать свои темы.



1



Sallivan_Bidl

0 / 0 / 0

Регистрация: 12.07.2015

Сообщений: 2

24.08.2016, 19:45

19

Этот кусок кода реально помог почистить паразитные процессы Excel, остающиеся в системе.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
'~~> Clean Up
            releaseObject(xlsheet)
            releaseObject(xlWb)
            releaseObject(xlApp)
 
        End With
    End Sub
 
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub

Только вот этого кода почему-то было недостаточно.

VB.NET
1
2
xlApp.Quit()
xlApp=Nothing

ctac1412, Спасибо!



0



174 / 64 / 13

Регистрация: 22.12.2015

Сообщений: 2,648

06.12.2016, 11:09

20

Цитата
Сообщение от Памирыч
Посмотреть сообщение

Exc.Rows(7).Insert(Shift:=-4121)

а это для чего?



0



Previously , I was trying to export gridview value into excel. but with the code given below i am able to export data into excel. but still not able to Save Automatically that excel file into a fixed folder suppose in C:/ drive. The code which i have written to export into excel is given below.

Private Sub ButtonExport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)   Handles ButtonExport.Click
Dim rowsTotal, colsTotal As Short
Dim I, j, iC As Short
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
Dim xlApp As New Excel.Application
Try
    Dim excelBook As Excel.Workbook = xlApp.Workbooks.Add
    Dim excelWorksheet As Excel.Worksheet = CType(excelBook.Worksheets(1), Excel.Worksheet)
    xlApp.Visible = True
    rowsTotal = DataGridView1.RowCount - 1
    colsTotal = DataGridView1.Columns.Count - 1
    With excelWorksheet
        .Cells.Select()
        .Cells.Delete()
        For iC = 0 To colsTotal
            .Cells(1, iC + 1).Value = DataGridView1.Columns(iC).HeaderText
        Next
        For I = 0 To rowsTotal - 1
            For j = 0 To colsTotal
                .Cells(I + 2, j + 1).value = DataGrid1.Rows(I).Cells(j).Value
            Next j
        Next I
        .Rows("1:1").Font.FontStyle = "Bold"
        .Rows("1:1").Font.Size = 10
        .Cells.Columns.AutoFit()
        .Cells.Select()
        .Cells.EntireColumn.AutoFit()
        .Cells(1, 1).Select()
    End With
Catch ex As Exception
    MsgBox("Export Excel Error " & ex.Message)
Finally
    'RELEASE ALLOACTED RESOURCES
    System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
    xlApp = Nothing
End Try
End Sub

can anybody over here please help me out from this problem that how to save that excel file automatically in VB.NET??

asked May 14, 2013 at 6:19

SoumitaP's user avatar

4

The SaveAs method is defined for Excel.Workbook

At the end of your Try, just before the Catch, write :

excelBook.SaveAs(<some path here>, etc...)

Refers to here for more informations.

And to exit properly Excel, write in your Finally block at the start :

xlApp.Workbooks.Close()
xlApp.Quit()

answered May 14, 2013 at 6:40

Adrien Lacroix's user avatar

Adrien LacroixAdrien Lacroix

3,4721 gold badge19 silver badges23 bronze badges

16

i just used :

    Dim oexcel As Object
    Dim obook As Object
    Dim owrite As New Microsoft.Office.Interop.Excel.Worksheet

    < your code > 

   owrite.SaveAs("c:" & foldername)

answered May 7, 2014 at 15:25

user3612833's user avatar

This is an older question but maybe this’ll help someone still.
I recently needed to read, parse and write xlsx files. I used the OpenXML SDK with C# for this purpose. MSDN provides some good tutorials on how to do this.
If anyone has questions I can provide my code.
Just one last note…when I «published» the app an installation of the SDK on the client’s computer seemed to be required.

answered Jan 9, 2017 at 7:51

marcus's user avatar

marcusmarcus

1381 gold badge1 silver badge8 bronze badges

  • Download source code — 450.5 KB

Senthil_S__Software_Eng_/image2.jpg

Introduction

Exporting data to Excel of Microsoft Office is currently needed. But many of them used very complicated coding for simple export either from Datagrid or DataTable. I used simple Dataset to export the data.

Background

Introducing the way of sending data from datagrid or by Datatable. I used Dataset which is easy to use. But for code optimization, dataset is not advisable compared to Reader and DataTable.

Using the Code

Currently, available code for exporting the data to Excel are given which is so complete and not straight forward because they used the Datagrid and DataTable which are given below:

From DataTable to Excel sheet:

Dim dt1 As New DataTable
Dim I1, J1 As Integer
For I1 = 0 To dsmas1.Tables(0).Columns.Count - 1
      dt1.Columns.Add(dsmas1.Tables(0).Columns(I1).ColumnName)
 Next
 For I1 = 0 To dsmas1.Tables(0).Rows.Count - 1
      Dim DR As DataRow = Nothing
      DR = dt1.NewRow
      For J1 = 0 To dsmas1.Tables(0).Columns.Count - 1
          DR.Item(J1) = dsmas1.Tables(0).Rows(I1).ItemArray(J1)
      Next
      dt1.Rows.Add(DR)
 Next
 rel_ds.Tables.Add(dt1)
 Dim dt As New DataTable
 Dim I, J As Integer
 For I = 0 To dschd1.Tables(0).Columns.Count - 1
      dt.Columns.Add(dschd1.Tables(0).Columns(I).ColumnName)
 Next
 For I = 0 To dschd1.Tables(0).Rows.Count - 1
      Dim DR As DataRow = Nothing
      DR = dt.NewRow
      For J = 0 To dschd1.Tables(0).Columns.Count - 1
          DR.Item(J) = dschd1.Tables(0).Rows(I).ItemArray(J)
      Next
      dt.Rows.Add(DR)
 Next
  rel_ds.Tables.Add(dt)

For DataGrid to Excel sheet:

If ((DataGridView1.Columns.Count = 0) Or (DataGridView1.Rows.Count = 0)) Then
    Exit Sub
End If


Dim dset As New DataSet

dset.Tables.Add()

For i As Integer = 0 To DataGridView1.ColumnCount - 1
    dset.Tables(0).Columns.Add(DataGridView1.Columns(i).HeaderText)
Next

Dim dr1 As DataRow
For i As Integer = 0 To DataGridView1.RowCount - 1
    dr1 = dset.Tables(0).NewRow
    For j As Integer = 0 To DataGridView1.Columns.Count - 1
        dr1(j) = DataGridView1.Rows(i).Cells(j).Value
    Next
    dset.Tables(0).Rows.Add(dr1)
Next

Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet

wBook = excel.Workbooks.Add()
wSheet = wBook.ActiveSheet()

Dim dt As System.Data.DataTable = dset.Tables(0)
Dim dc As System.Data.DataColumn
Dim dr As System.Data.DataRow
Dim colIndex As Integer = 0
Dim rowIndex As Integer = 0

For Each dc In dt.Columns
    colIndex = colIndex + 1
    excel.Cells(1, colIndex) = dc.ColumnName
Next

For Each dr In dt.Rows
    rowIndex = rowIndex + 1
    colIndex = 0
    For Each dc In dt.Columns
        colIndex = colIndex + 1
        excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)

    Next
Next

wSheet.Columns.AutoFit()
Dim strFileName As String = "D:ss.xls"
Dim blnFileOpen As Boolean = False
Try
    Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
    fileTemp.Close()
Catch ex As Exception
    blnFileOpen = False
End Try

If System.IO.File.Exists(strFileName) Then
    System.IO.File.Delete(strFileName)
End If

wBook.SaveAs(strFileName)
excel.Workbooks.Open(strFileName)
excel.Visible = True

But I used only Dataset to Excel sheet.

In code, I used a user defined function called «Load_Excel_Details()» in which I used an old technique like create Object for Excel, add the Book for a sheet and sheet for the data.

i.e,.

  • Excel <— System.Runtime.InteropServices.Marshal.ReleaseComObject(Excel)
    • Book <—— Excel Workbooks.Add()
      • Sheet <—— Excel SheetsInNewWorkbook = 1
        • Data <—— Excel cells(1, i).value

which is used in the code like given below:

 With Excel
       .SheetsInNewWorkbook = 1
       .Workbooks.Add()
       .Worksheets(1).Select()

      Dim i As Integer = 1
      For col = 0 To ComDset.Tables(0).Columns.Count - 1
           .cells(1, i).value = ComDset.Tables(0).Columns(col).ColumnName
           .cells(1, i).EntireRow.Font.Bold = True
           i += 1
      Next

            i = 2

       Dim k As Integer = 1
       For col = 0 To ComDset.Tables(0).Columns.Count - 1
          i = 2
          For row = 0 To ComDset.Tables(0).Rows.Count - 1
              .Cells(i, k).Value = ComDset.Tables(0).Rows(row).ItemArray(col)
               i += 1
          Next
               k += 1
       Next
          filename = "c:File_Exported.xls"
         .ActiveCell.Worksheet.SaveAs(filename)
 End With

Points of Interest

I used simple For loops…. and insert the values by Rows, Columns and Cells formats.

History

I proposed this after I used it in my company project which was appreciate by the customers.

Hello,
This is Senthil.S. I am a Software Engineer at TCS. I am Currently Standing on .Net and Flex Platform.

  • Download source code — 450.5 KB

Senthil_S__Software_Eng_/image2.jpg

Introduction

Exporting data to Excel of Microsoft Office is currently needed. But many of them used very complicated coding for simple export either from Datagrid or DataTable. I used simple Dataset to export the data.

Background

Introducing the way of sending data from datagrid or by Datatable. I used Dataset which is easy to use. But for code optimization, dataset is not advisable compared to Reader and DataTable.

Using the Code

Currently, available code for exporting the data to Excel are given which is so complete and not straight forward because they used the Datagrid and DataTable which are given below:

From DataTable to Excel sheet:

Dim dt1 As New DataTable
Dim I1, J1 As Integer
For I1 = 0 To dsmas1.Tables(0).Columns.Count - 1
      dt1.Columns.Add(dsmas1.Tables(0).Columns(I1).ColumnName)
 Next
 For I1 = 0 To dsmas1.Tables(0).Rows.Count - 1
      Dim DR As DataRow = Nothing
      DR = dt1.NewRow
      For J1 = 0 To dsmas1.Tables(0).Columns.Count - 1
          DR.Item(J1) = dsmas1.Tables(0).Rows(I1).ItemArray(J1)
      Next
      dt1.Rows.Add(DR)
 Next
 rel_ds.Tables.Add(dt1)
 Dim dt As New DataTable
 Dim I, J As Integer
 For I = 0 To dschd1.Tables(0).Columns.Count - 1
      dt.Columns.Add(dschd1.Tables(0).Columns(I).ColumnName)
 Next
 For I = 0 To dschd1.Tables(0).Rows.Count - 1
      Dim DR As DataRow = Nothing
      DR = dt.NewRow
      For J = 0 To dschd1.Tables(0).Columns.Count - 1
          DR.Item(J) = dschd1.Tables(0).Rows(I).ItemArray(J)
      Next
      dt.Rows.Add(DR)
 Next
  rel_ds.Tables.Add(dt)

For DataGrid to Excel sheet:

If ((DataGridView1.Columns.Count = 0) Or (DataGridView1.Rows.Count = 0)) Then
    Exit Sub
End If


Dim dset As New DataSet

dset.Tables.Add()

For i As Integer = 0 To DataGridView1.ColumnCount - 1
    dset.Tables(0).Columns.Add(DataGridView1.Columns(i).HeaderText)
Next

Dim dr1 As DataRow
For i As Integer = 0 To DataGridView1.RowCount - 1
    dr1 = dset.Tables(0).NewRow
    For j As Integer = 0 To DataGridView1.Columns.Count - 1
        dr1(j) = DataGridView1.Rows(i).Cells(j).Value
    Next
    dset.Tables(0).Rows.Add(dr1)
Next

Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet

wBook = excel.Workbooks.Add()
wSheet = wBook.ActiveSheet()

Dim dt As System.Data.DataTable = dset.Tables(0)
Dim dc As System.Data.DataColumn
Dim dr As System.Data.DataRow
Dim colIndex As Integer = 0
Dim rowIndex As Integer = 0

For Each dc In dt.Columns
    colIndex = colIndex + 1
    excel.Cells(1, colIndex) = dc.ColumnName
Next

For Each dr In dt.Rows
    rowIndex = rowIndex + 1
    colIndex = 0
    For Each dc In dt.Columns
        colIndex = colIndex + 1
        excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)

    Next
Next

wSheet.Columns.AutoFit()
Dim strFileName As String = "D:ss.xls"
Dim blnFileOpen As Boolean = False
Try
    Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
    fileTemp.Close()
Catch ex As Exception
    blnFileOpen = False
End Try

If System.IO.File.Exists(strFileName) Then
    System.IO.File.Delete(strFileName)
End If

wBook.SaveAs(strFileName)
excel.Workbooks.Open(strFileName)
excel.Visible = True

But I used only Dataset to Excel sheet.

In code, I used a user defined function called «Load_Excel_Details()» in which I used an old technique like create Object for Excel, add the Book for a sheet and sheet for the data.

i.e,.

  • Excel <— System.Runtime.InteropServices.Marshal.ReleaseComObject(Excel)
    • Book <—— Excel Workbooks.Add()
      • Sheet <—— Excel SheetsInNewWorkbook = 1
        • Data <—— Excel cells(1, i).value

which is used in the code like given below:

 With Excel
       .SheetsInNewWorkbook = 1
       .Workbooks.Add()
       .Worksheets(1).Select()

      Dim i As Integer = 1
      For col = 0 To ComDset.Tables(0).Columns.Count - 1
           .cells(1, i).value = ComDset.Tables(0).Columns(col).ColumnName
           .cells(1, i).EntireRow.Font.Bold = True
           i += 1
      Next

            i = 2

       Dim k As Integer = 1
       For col = 0 To ComDset.Tables(0).Columns.Count - 1
          i = 2
          For row = 0 To ComDset.Tables(0).Rows.Count - 1
              .Cells(i, k).Value = ComDset.Tables(0).Rows(row).ItemArray(col)
               i += 1
          Next
               k += 1
       Next
          filename = "c:File_Exported.xls"
         .ActiveCell.Worksheet.SaveAs(filename)
 End With

Points of Interest

I used simple For loops…. and insert the values by Rows, Columns and Cells formats.

History

I proposed this after I used it in my company project which was appreciate by the customers.

Hello,
This is Senthil.S. I am a Software Engineer at TCS. I am Currently Standing on .Net and Flex Platform.

  • Remove From My Forums
  • Question

  • how can i save data from textboxes to excel file .. and the data from columns of datagridview to excel file …

    thanks in advance

Answers

  • Hello,

    There are several methods to read/write to Excel via Excel automation to OleDb. The following link is for an example using OleDb done in VS2010. Please note that normally when updating data we would have a primary key to reference in an SQL where clause
    which most cases we don’t have in a worksheet as with the sample project so keep that in mind.

    http://kevininstructor.home.comcast.net/~kevininstructor/DotNet/WithDataAdapter_1.zip

    The following link shows many common operations including writing to Excel via Office automation. There is a great deal more code as I make sure all memory is properly released where many Excel code examples fail to do this.

    http://code.msdn.microsoft.com/Basics-of-using-Excel-4453945d


    KSG

    • Marked as answer by

      Monday, December 17, 2012 6:04 AM

Понравилась статья? Поделить с друзьями:
  • Vba enter в ячейке excel
  • Vba editor for excel
  • Vba dim excel описание
  • Vba deleting rows in excel
  • Vba delete table excel