Как создать файл Excel, используя запрос к базе данных в VB.Net? - PullRequest
5 голосов
/ 28 марта 2011

Я хотел бы создать файл Excel, используя запрос к базе данных в VB.Net.Как мне это сделать?

Если быть более точным: я хотел бы «привязать» запрос (так же, как привязать запрос к GridView) к файлу Excel так, чтобы строки в таблице занимали соответствующие ячейки в новом файле Excel,и сохраните файл на моем компьютере.А затем отправьте этот файл кому-нибудь по почте.

Хотя я могу справиться с почтовой частью, это создание такого файла, с которым мне нужна помощь.Кто-нибудь знает, как добиться того, чего я хочу достичь?

PS: мне нужно сделать это в VB.Net, и я использую SQL Server 2008.

Ответы [ 3 ]

6 голосов
/ 28 марта 2011

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

Импортирует Microsoft.Office.Interop

Далее добавьте функцию для создания таблицы данных

Public Function CreateTable() As DataTable
    Dim cn As New SqlConnection(My.Settings.con)
    Dim cmd As New SqlCommand
    Using da As New SqlDataAdapter()
        Dim dt As New DataTable()
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "[dbo].[MyStoredProcedure]"
        cmd.CommandTimeout = 0
        cn.Open()
        cmd.Connection = cn
        da.SelectCommand = cmd
        da.Fill(dt)
        cn.Close()
        Return dt
    End Using
End Function

Далее код, чтобы взять этот DataTable и выгрузить его в Excel.

Public Shared Sub PopulateSheet(ByVal dt As DataTable, ByVal File As String)
            Dim oXL As Excel.Application = CType(CreateObject("Excel.Application"), Excel.Application)
        Dim oWB As Excel.Workbook
        Dim oSheet As Excel.Worksheet
        Dim oRng As Excel.Range
        oXL.Visible = True

        oWB = oXL.Workbooks.Add
        oSheet = CType(oWB.ActiveSheet, Excel.Worksheet)

        Dim dc As DataColumn
        Dim dr As DataRow
        Dim colIndex As Integer = 0
        Dim rowIndex As Integer = 0
        For Each dc In dt.Columns
            colIndex = colIndex + 1
            oXL.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
                oXL.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
            Next
        Next

        oSheet.Cells.Select()
        oSheet.Columns.AutoFit()
        oSheet.Rows.AutoFit()

        oXL.Visible = True
        oXL.UserControl = True

        oWB.SaveAs(File)
        oRng = Nothing
        oXL.Quit()

        ExcelCleanUp(oXL, oWB, oSheet)
    End Sub

Теперь вы можете вызвать его с помощью кнопки или любого другого события, которое вы выберете с помощью этого

    Dim dt As New DataTable
    Try
        dt = CreateTable()
        PopulateSheet(dt, "c:\test\ExcelFile.xlsx")
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        dt.Dispose()
    End Try

Теперь это действительно просто, но с небольшой работой вы можете выполнить форматирование ячеек, настройку страницы и почти все, что можно сделать в Excel с помощью меню / опций.

Мы также должны закончить это, добавив код для очистки.

Private Shared Sub ExcelCleanUp( _
    ByVal oXL As Excel.Application, _
    ByVal oWB As Excel.Workbook, _
    ByVal oSheet As Excel.Worksheet)

    GC.Collect()
    GC.WaitForPendingFinalizers()

    Marshal.FinalReleaseComObject(oXL)
    Marshal.FinalReleaseComObject(oSheet)
    Marshal.FinalReleaseComObject(oWB)

    oSheet = Nothing
    oWB = Nothing
    oXL = Nothing

End Sub
0 голосов
/ 28 марта 2011

Вы можете найти отличные статьи об этом на CodeProject:

Компонент экспорта в Excel с использованием XSL : В этой статье вы можете найти компонент для экспорта данных в Excel без использования любого офисного компонента.

Экспорт в Excel с использованием VB.Net : в этом документе автор использует автоматизацию Excel для выполнения этой работы.

0 голосов
/ 28 марта 2011

Вы можете автоматизировать Excel в VB.Net и поместить эти значения в электронную таблицу с помощью кода:

...