如何使用visual studio从datagridview将新工作表保存到现有工作簿中

时间:2017-03-26 06:17:52

标签: excel vb.net datagridview

我将我的数据从visual studio数据网格视图导出到excel中,我想知道如何将新工作表添加/保存到现有的excel文件中。

1 个答案:

答案 0 :(得分:0)

如果使用OleDb,则使用SQL创建工作表

Public Module Demo
    Public Sub DemoOleDbCreateXls_WithHeaders()
        Using cn As New OleDb.OleDbConnection With {.ConnectionString = "Your connection string"}
            Using cmd As New OleDb.OleDbCommand With {.Connection = cn}
                cmd.CommandText = "CREATE TABLE Members(FirstName CHAR(255),LastName CHAR(255),JoinedYear INT)"
                cn.Open()
                cmd.ExecuteNonQuery()
                cmd.CommandText = "INSERT INTO Members (FirstName,LastName,JoinedYear) VALUES ('Kevin','Gallagher',2013)"
                cmd.ExecuteNonQuery()

                cmd.CommandText = "CREATE TABLE Officiers(FirstName CHAR(255),LastName CHAR(255),Rank CHAR(255))"
                cmd.ExecuteNonQuery()

                cmd.CommandText = "INSERT INTO Officiers (FirstName,LastName,Rank) VALUES ('Joan','Gallagher','AAA')"
                cmd.ExecuteNonQuery()

                cmd.CommandText = "CREATE TABLE Test1(Description CHAR(255),Amount Double)"
                cmd.ExecuteNonQuery()

                cmd.CommandText = "INSERT INTO Test1 (Description,Amount) VALUES ('Dues',12.99)"
                cmd.ExecuteNonQuery()
            End Using
        End Using
    End Sub
End Module

使用Excel自动化

Option Strict On
Option Infer Off

Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices

Module Demo
    Public Sub CreateSheetIfNeeded(ByVal FileName As String, ByVal SheetName As String)
        If IO.File.Exists(FileName) Then

            Dim Proceed As Boolean = False

            Dim xlApp As Excel.Application = Nothing
            Dim xlWorkBooks As Excel.Workbooks = Nothing
            Dim xlWorkBook As Excel.Workbook = Nothing
            Dim xlWorkSheet As Excel.Worksheet = Nothing
            Dim xlWorkSheets As Excel.Sheets = Nothing


            xlApp = New Excel.Application
            xlApp.DisplayAlerts = False
            xlWorkBooks = xlApp.Workbooks
            xlWorkBook = xlWorkBooks.Open(FileName)

            xlApp.Visible = False
            xlWorkSheets = xlWorkBook.Sheets

            '
            ' For/Next finds our sheet
            '
            For x As Integer = 1 To xlWorkSheets.Count
                xlWorkSheet = CType(xlWorkSheets(x), Excel.Worksheet)

                If xlWorkSheet.Name = SheetName Then
                    Proceed = True
                    Exit For
                End If

                Marshal.FinalReleaseComObject(xlWorkSheet)
                xlWorkSheet = Nothing

            Next
            Dim workSheet As Excel.Worksheet = Nothing
            Dim xlNewSheet As Excel.Worksheet = Nothing

            If Proceed Then
                ' do work, sheet exists
            Else
                workSheet = CType(xlWorkSheets(1), Excel.Worksheet)
                xlNewSheet = DirectCast(xlWorkSheets.Add(workSheet), Excel.Worksheet)
                xlNewSheet.Name = SheetName

            End If

            xlWorkBook.SaveAs(FileName)
            xlWorkBook.Close()
            xlApp.UserControl = True
            xlApp.Quit()

            ReleaseExcelObject(xlNewSheet)
            ReleaseExcelObject(workSheet)
            ReleaseExcelObject(xlWorkSheets)
            ReleaseExcelObject(xlWorkSheet)
            ReleaseExcelObject(xlWorkBook)
            ReleaseExcelObject(xlWorkBooks)
            ReleaseExcelObject(xlApp)
        Else
            ' file does not exists
        End If
    End Sub
    Private Sub ReleaseExcelObject(ByVal excelObject As Object)
        Try
            If excelObject IsNot Nothing Then
                Marshal.ReleaseComObject(excelObject)
                excelObject = Nothing
            End If
        Catch ex As Exception
            excelObject = Nothing
        End Try
    End Sub

End Module