vb.net DataGrid 导出到 excel

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18607134/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 14:55:23  来源:igfitidea点击:

DataGrid export to excel

vb.netdatagrid.net-1.1

提问by R.S

I have a DataGrid controlthat fills with a data set.

我有一个DataGrid controldata set填充的。

I don't show all fields of data set in DataGrid control.

我没有在 DataGrid 控件中显示数据集的所有字段。

I want to create an excel filefrom my DataGrid.

我想excel file从我的DataGrid.

How to get solution?

如何获得解决方案?

(windows form , vb net 1.1)

(窗体, vb net 1.1)

回答by Sathish

Try this Link

试试这个 链接

OR

或者

Try This

尝试这个

Imports Excel = Microsoft.Office.Interop.Excel

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(System.Reflection.Missing.Value)
wSheet = wBook.Sheets("sheet1")

  With wBook
.Sheets("Sheet1").Select()
.Sheets(1).Name = "NameYourSheet"
End With


For i = 0 To DataGrid1.RowCount - 1
For j = 0 To DataGrid1.ColumnCount - 1
wSheet.Cells(i + 1, j + 1).value = DataGrid1.Rows(i).Cells(j).Value.tosring
Next j
Next i

wSheet.Columns.AutoFit()

回答by Sasidharan

Private Sub btnExportToExcel_Click(sender As Object, e As EventArgs) Handles btnExportToExcel.Click

        Dim xlApp As Excel.Application = New Excel.Application

        xlApp.SheetsInNewWorkbook = 1

        Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Add
        Dim xlWorkSheet As Excel.Worksheet = xlWorkBook.Worksheets.Item(1)

        xlWorkSheet.Name = "Example_Export"

        For nRow = 0 To dgvDataToExport.Rows.Count - 1

            For nCol = 0 To dgvDataToExport.Columns.Count - 1
                xlWorkSheet.Cells(nRow + 1, nCol + 1) = dgvDataToExport.Rows(nRow).Cells(nCol).Value
            Next nCol

        Next nRow

        xlApp.DisplayAlerts = False

        xlWorkBook.SaveAs("C:\Example.xlsx", Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, Type.Missing, Type.Missing, _
                           Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges)

        xlWorkBook.Close()
        xlApp.Quit()

    End Sub

回答by eladolo

Try with this one:

试试这个:

Sub create_excel(sender As Object, e As EventArgs)
    Dim strFileName As string 
    Dim tw As New StringWriter() 
    Dim hw As New HtmlTextWriter(tw)    

    strFileName = "some_excel_from_datagrid.xls"
    Response.ContentType = "application/vnd.msexcel"
    Response.AddHeader("Content-Disposition", "attachment; filename=" & strFileName)
    Response.Charset = "UTF-8"
    Response.ContentEncoding = Encoding.Default

    DataGridID.RenderControl(hw)

    Response.Write(tw.ToString())
    Response.End() 
End Sub

回答by user3135909

Try

尝试

        If Not dgv.RowCount = 0 Then
            Dim folderBrowser As New FolderBrowserDialog
            folderBrowser.Description = "Select location to save the report"
            Dim filepath1 As String = ""
            If (folderBrowser.ShowDialog() = DialogResult.OK) Then
                filepath1 = folderBrowser.SelectedPath
            Else
                Exit Sub
            End If

            Dim xlApp As Microsoft.Office.Interop.Excel.Application
            Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
            Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
            Try

                Dim misValue As Object = System.Reflection.Missing.Value
                Dim i As Integer
                Dim j As Integer
                xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass
                xlWorkBook = xlApp.Workbooks.Add(misValue)
                xlWorkSheet = xlWorkBook.Sheets("sheet1")
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                Dim titleStyle As Excel.Style = xlWorkSheet.Application.ActiveWorkbook.Styles.Add("NewStyle1")
                titleStyle.Font.Bold = True
                titleStyle.Font.Size = "18"
                titleStyle.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)

                xlWorkSheet.Cells(2, 2) = "Employee Payment Report"
                xlWorkSheet.Cells(2, 4) = DateAndTime.Now.ToString("dd/MM/yyyy")
                xlWorkSheet.Cells(2, 2).Style = "NewStyle1"
                xlWorkSheet.Cells(2, 4).Style = "NewStyle1"
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

                '======================================================================================================
                Dim headerStyle As Excel.Style = xlWorkSheet.Application.ActiveWorkbook.Styles.Add("NewStyle")
                headerStyle.Font.Bold = True
                headerStyle.Font.Size = "12"
                headerStyle.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Brown)

                For k = 1 To dgv.Columns.Count
                    xlWorkSheet.Cells(4, k) = dgv.Columns(k - 1).HeaderText
                    xlWorkSheet.Cells(4, k).Style = "NewStyle"

                Next
                '=======================================================================================================
                Dim str As String = ""
                Dim l As Integer = 1
                j = 6
                Dim amt As Double = 0.0
                For i = 0 To dgv.RowCount - 1
                    amt = amt + dgv.Rows(i).Cells(4).Value
                    For m = 0 To dgv.ColumnCount - 1
                        xlWorkSheet.Cells(j, l) = dgv(m, i).Value.ToString()
                        str = dgv(m, i).Value.ToString()
                        l = l + 1
                    Next
                    j = j + 1
                    l = 1
                Next
                '======================================================================================================
                Dim lastStyle As Excel.Style = xlWorkSheet.Application.ActiveWorkbook.Styles.Add("NewStyle2")
                lastStyle.Font.Bold = True
                lastStyle.Font.Size = "12"
                lastStyle.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Blue)
                Dim c As Integer = dgv.ColumnCount
                xlWorkSheet.Cells(j + 2, c - 1) = "Total Amount"
                xlWorkSheet.Cells(j + 2, c) = amt.ToString
                xlWorkSheet.Cells(j + 2, c - 1).Style = "NewStyle2"
                xlWorkSheet.Cells(j + 2, c).Style = "NewStyle2"
                '=======================================================================================================
                xlWorkSheet.SaveAs(filepath1 + "\EmployeePaymentReport.xlsx")
                xlWorkBook.Close()
                xlApp.Quit()

                cls.releaseObject(xlApp)
                cls.releaseObject(xlWorkBook)
                cls.releaseObject(xlWorkSheet)

                MsgBox("You can find the file at " + filepath1 + "\EmployeePaymentReport.xlsx")
            Catch ex As Exception
                MsgBox(ex.Message)
                For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
                    If Process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE") Then
                        Process.Kill()
                    End If
                Next
            End Try
        Else
            Exit Sub
        End If
    Catch ex As Exception

    End Try
End Sub

回答by Nejc Galof

Maybe in this princip work.

也许在这个princip工作中。

  String path = @"D:\users\....";
    //your path


String connStr = "Provider=//your provider;Data Source=" + path + ";Extended Properties=Excel 12.0;";

            //The connection to that file

            OleDbConnection conn = new OleDbConnection(connStr);

            //The query

            string strSQL = "SELECT * FROM [?]";

            //The command 

            OleDbCommand cmd = new OleDbCommand(/*The query*/strSQL, /*The connection*/conn);

            DataTable dT = new DataTable();

            conn.Open();

            try

            {

                OleDbDataReader dR = cmd.ExecuteReader();

                dT.Load(dR);

                bS.DataSource = dT;

                dGV.DataSource = bS;

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            finally

            {

                conn.Close();

            }