Datagridview to excel - 垂直

时间:2017-05-29 08:50:26

标签: excel vb.net datagridview

我需要以下导出方面的帮助。我有以下表格1;

Public Class Form1
Dim table As New DataTable("table")
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim dgvTextColumn As New DataGridViewTextBoxColumn
    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    DataGridView1.RowTemplate.Height = 120
    DataGridView1.AllowUserToAddRows = True
    table.Columns.Add("Forename", Type.GetType("System.String"))
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    table.Rows.Add(TextBox1.Text)
    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    DataGridView1.RowTemplate.Height = 120
    DataGridView1.AllowUserToAddRows = False
    DataGridView1.DataSource = table
    Me.Hide()
    Form2.Show()
End Sub

在textbox1中输入forename后,用户将选择将加载form2的button3。在form2中,我有以下代码;

Public Class Form2
Dim table As New DataTable("table")
Dim ds As DataSet = Nothing
Dim dt As DataTable = Nothing

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ds = New DataSet()
    dt = New DataTable()

    ds.Tables.Add(dt)

    Dim my_DataView As DataView = ds.Tables(0).DefaultView
    Me.Datagridview1.DataSource = my_DataView
    Dim dgvTextColumn As New DataGridViewTextBoxColumn
    Datagridview1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    Datagridview1.RowTemplate.Height = 120
    Datagridview1.AllowUserToAddRows = True
    table.Columns.Add("Forename", Type.GetType("System.String"))
End Sub

Public Function FlipDataSet(my_DataSet As DataSet) As DataSet
    Dim ds As New DataSet()

    For Each dt As DataTable In my_DataSet.Tables
        Dim table As New DataTable()

        For i As Integer = 0 To dt.Rows.Count
            table.Columns.Add(Convert.ToString(i))
        Next
        Dim r As DataRow
        For k As Integer = 0 To dt.Columns.Count - 1
            r = table.NewRow()
            r(0) = dt.Columns(k).ToString()
            For j As Integer = 1 To dt.Rows.Count
                r(j) = dt.Rows(j - 1)(k)
            Next
            table.Rows.Add(r)
        Next

        ds.Tables.Add(table)
    Next

    Return ds
End Function

Private Sub butNormal_Click(sender As Object, e As EventArgs) Handles ButNormal.Click
    Dim datagridview1 As DataView = ds.Tables(0).DefaultView
    Me.Datagridview1.DataSource = datagridview1

    Butflip.Enabled = True
    ButNormal.Enabled = False
End Sub

Private Sub butFlip_Click(sender As Object, e As EventArgs) Handles Butflip.Click
    Dim new_ds As DataSet = FlipDataSet(ds)
    ' Flip the DataSet
    Dim my_DataView As DataView = new_ds.Tables(0).DefaultView
    Me.Datagridview1.DataSource = my_DataView

    Butflip.Enabled = False
    ButNormal.Enabled = True
End Sub

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    Dim new_ds As DataSet = FlipDataSet(ds)
    ' Flip the DataSet
    Dim my_DataView As DataView = new_ds.Tables(0).DefaultView
    Me.Datagridview1.DataSource = my_DataView

    Butflip.Enabled = False
    ButNormal.Enabled = True

    Butflip.Enabled = False
    ButNormal.Enabled = True
    Datagridview1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    Datagridview1.RowTemplate.Height = 120
    Datagridview1.AllowUserToAddRows = False
    Datagridview1.DataSource = table

    table.Rows.Add(Form1.TextBox1.Text)

    'Save to excel with headers
    Dim ExcelApp As Object, ExcelBook As Object
    Dim ExcelSheet As Object
    Dim j As Integer
    Dim Proceed As Boolean = False




    'create object of exce
    ExcelApp = CreateObject("Excel.Application")
    ExcelBook = ExcelApp.WorkBooks.Add
    ExcelSheet = ExcelBook.WorkSheets(1)

    With ExcelSheet
        For Each column As DataGridViewColumn In Datagridview1.Columns
            .cells(1, column.Index + 1) = column.HeaderText
        Next
        For i = 1 To Me.Datagridview1.RowCount
            .cells(i + 1, 1) = Me.Datagridview1.Rows(i - 1).Cells("Forename").Value
            For j = 1 To Datagridview1.Columns.Count - 1
                .cells(i + 1, j + 1) = Datagridview1.Rows(i - 1).Cells(j).Value
            Next
            Dim formatRange As Excel.Range
            formatRange = ExcelSheet.Range("a1")
            formatRange.EntireRow.Font.Bold = True
            formatRange = ExcelSheet.Range("A1", "V1")
            formatRange.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightBlue)
            formatRange.BorderAround(Excel.XlLineStyle.xlContinuous)
            formatRange = ExcelSheet.Range("a1", "V1")
            formatRange.EntireRow.BorderAround()
        Next
    End With

    ExcelApp.Visible = True
    '
    ExcelSheet = Nothing
    ExcelBook = Nothing
    ExcelApp = Nothing

    Application.Exit()
    End
End Sub

当点击button1时,它会导出datagridview中的数据以及标题“Forename”和插入到form1.textbox1.text underneith中的数据,但它应该更改为vertical。这没有发生,我不知道我哪里出错。

有什么建议吗?

0 个答案:

没有答案