使用vb.net将数据从mysql导出到ms excel

使用vb.net将数据从mysql导出到ms excel,vb.net,Vb.net,我正在使用vb.net将数据从mysql导出到ms excel。我可以导出数据,但这里的问题是数据似乎是多余的。下面是我的代码: Dim unit(8) As String unit(0) = "RHQ" unit(1) = "RPSB" unit(2) = "ADN" unit(3) = "ADS" unit(4) = "BCPO" unit(5) = "DIPPO" unit(6) = "SDN" unit(7) = "

我正在使用vb.net将数据从mysql导出到ms excel。我可以导出数据,但这里的问题是数据似乎是多余的。下面是我的代码:

    Dim unit(8) As String
    unit(0) = "RHQ"
    unit(1) = "RPSB"
    unit(2) = "ADN"
    unit(3) = "ADS"
    unit(4) = "BCPO"
    unit(5) = "DIPPO"
    unit(6) = "SDN"
    unit(7) = "SDS"

    Dim dataSet As New DataSet
    Dim datatableMain As New System.Data.DataTable()
    Dim dataAdapter As OdbcDataAdapter

    Dim dc As System.Data.DataColumn
    Dim dr As System.Data.DataRow
    Dim colIndex As Integer = 0
    Dim rowIndex As Integer = 0

    'create objects to interface to Excel
    Dim xls As New Excel.Application
    Dim book As Excel.Workbook
    Dim sheet As Excel.Worksheet

    'Export the listview to an Excel spreadsheet
    SaveFileDialog1.Title = "Save Excel File"
    SaveFileDialog1.Filter = "Excel files (*.xls)|*.xls|Excel Files (*.xlsx)|*.xslx"
    SaveFileDialog1.ShowDialog()
    'exit if no file selected
    If SaveFileDialog1.FileName = "" Then
        Exit Sub
    End If

    'create a workbook and get reference to first worksheet
    xls.Workbooks.Add()
    book = xls.ActiveWorkbook
    sheet = book.ActiveSheet

    For Each element As String In unit

        If element <> "" Then
            colIndex = 0
            'Get Number of Applicant
            connect_db()
            cmd = New OdbcCommand
            cmd.Connection = con
            cmd.CommandText = "SELECT COUNT(*) FROM personnel WHERE p_unit='" & element & "' AND p_rank='" & account_type & "'"
            rs = cmd.ExecuteReader()
            rs.Read()
            applicant = rs(0).ToString()
            con.Close()
            MessageBox.Show(element)
            'Generate Qouta
            Dim rnk As String = ""
            connect_db()
            cmd = New OdbcCommand
            cmd.Connection = con
            If account_type = "PO1" Then
                rnk = "PO1-PO2"
            ElseIf account_type = "PO2" Then
                rnk = "PO2-PO3"
            ElseIf account_type = "PO3" Then
                rnk = "PO3-SPO1"
            ElseIf account_type = "SPO1" Then
                rnk = "SPO1-SPO2"
            ElseIf account_type = "SPO2" Then
                rnk = "SPO2-SPO3"
            ElseIf account_type = "SPO3" Then
                rnk = "SPO3-SPO4"
            End If
            cmd.CommandText = "SELECT p_qouta, p_promotable, p_rank, rec_date FROM promotion_qouta WHERE p_rank = '" & rnk & "' AND rec_date = '" & reckon_date & "'"
            rs = cmd.ExecuteReader()
            rs.Read()
            quota = rs(0).ToString()
            promotable = rs(1).ToString()
            dist = Val(applicant) * Val(quota)
            dist = Val(dist) / Val(promotable)
            dist = Math.Round(Val(dist))
            con.Close()

            'Fill data
            connect_db()
            cmd.Dispose()
            cmd = New OdbcCommand
            cmd.Connection = con
            cmd.CommandText = "SELECT rec_no, badge_no, p_rank, f_name, m_name, l_name, qualifier, point, p_unit FROM personnel WHERE rec_date = '" & reckon_date & "' AND p_rank = '" & account_type & "' AND p_unit='" & element & "' ORDER BY point DESC LIMIT 0," & dist & ""
            dataAdapter = New OdbcDataAdapter
            dataAdapter.SelectCommand = cmd

            'Fill data to datatable

            dataAdapter.Fill(datatableMain)
            con.Close()

            'step through rows and columns and copy data to worksheet
            'Export the Columns to excel file

            rowIndex = rowIndex + 2
            sheet.Cells(rowIndex, 1) = element
            sheet.Range("A" & rowIndex).Font.Bold = True
            sheet.Range("A" & rowIndex).VerticalAlignment = ContentAlignment.TopCenter
            sheet.Range("A" & rowIndex).Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow)
            sheet.Range(sheet.Cells(rowIndex, 1), sheet.Cells(rowIndex, 9)).Merge()
            rowIndex = rowIndex + 1


            For Each dc In datatableMain.Columns
                colIndex = colIndex + 1
                sheet.Cells(rowIndex, colIndex) = dc.ColumnName
            Next

            'Export the rows to excel file
            For Each dr In datatableMain.Rows
                rowIndex = rowIndex + 1
                colIndex = 0
                For Each dc In datatableMain.Columns
                    colIndex = colIndex + 1
                    sheet.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
                Next

            Next

        End If
    Next
    'save the workbook and clean up
    book.SaveAs(SaveFileDialog1.FileName)
    xls.Workbooks.Close()
    xls.Quit()
    releaseObject(sheet)
    releaseObject(book)
    releaseObject(xls)

    MessageBox.Show("Export Successful!", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information)
Dim单元(8)作为字符串
单位(0)=“RHQ”
单位(1)=“RPSB”
单元(2)=“ADN”
单位(3)=“广告”
单位(4)=“BCPO”
单位(5)=“DIPPO”
单位(6)=“SDN”
单位(7)=“SDS”
将数据集设置为新数据集
Dim datatableMain作为新的System.Data.DataTable()
作为OdbcDataAdapter的Dim数据适配器
Dim dc作为System.Data.DataColumn
Dim dr As System.Data.DataRow
Dim colIndex为整数=0
Dim rowIndex为整数=0
'创建与Excel接口的对象
Dim xls作为新的Excel.Application
将书本设置为Excel.工作簿
将工作表设置为Excel。工作表
'将listview导出到Excel电子表格
SaveFileDialog1.Title=“保存Excel文件”
SaveFileDialog1.Filter=“Excel文件(*.xls)|*.xls | Excel文件(*.xlsx)|*.xslx”
SaveFileDialog1.ShowDialog()
'如果未选择任何文件,则退出
如果SaveFileDialog1.FileName=“”,则
出口接头
如果结束
'创建工作簿并获取对第一个工作表的引用
xls.Workbooks.Add()
book=xls.active工作簿
sheet=book.ActiveSheet
将每个元素作为单位中的字符串
如果元素“”那么
colIndex=0
'获取申请者的编号
connect_db()
cmd=新的odbc命令
cmd.Connection=con
cmd.CommandText=“从人员中选择计数(*),其中p_单位=”&元素-“,p_等级=”&科目类型-“”
rs=cmd.ExecuteReader()
雷德先生()
申请人=rs(0).ToString()
con.Close()
MessageBox.Show(元素)
“生成Qouta
Dim rnk As String=“”
connect_db()
cmd=新的odbc命令
cmd.Connection=con
如果账户类型为“PO1”,则
rnk=“PO1-PO2”
如果账户类型为“PO2”,则
rnk=“PO2-PO3”
如果账户类型为“PO3”,则
rnk=“PO3-SPO1”
ElseIf account_type=“SPO1”则
rnk=“SPO1-SPO2”
ElseIf account_type=“SPO2”则
rnk=“SPO2-SPO3”
ElseIf account_type=“SPO3”则
rnk=“SPO3-SPO4”
如果结束
cmd.CommandText=“选择p_-qouta、p_-promotable、p_-rank、来自提升的rec_-date,其中p_-rank='”&rnk&“、rec_-date='”&COUNG_-date&'”
rs=cmd.ExecuteReader()
雷德先生()
配额=rs(0).ToString()
promotable=rs(1).ToString()
地区=Val(申请人)*Val(配额)
dist=Val(dist)/Val(promotable)
距离=数学圆(Val(距离))
con.Close()
“填充数据
connect_db()
cmd.Dispose()
cmd=新的odbc命令
cmd.Connection=con
cmd.CommandText=“从记录日期='”&计算日期和p等级='”&帐户类型和-“'和p单位='”&元素和-“'按点顺序描述限制0'”和距离-”的人员中选择记录编号、徽章编号、p等级、f名称、m名称、l名称、限定符、点、p单位
dataAdapter=新的OdbcDataAdapter
dataAdapter.SelectCommand=cmd
'将数据填充到数据表
dataAdapter.Fill(datatableMain)
con.Close()
'逐行和列并将数据复制到工作表
'将列导出到excel文件
行索引=行索引+2
表格单元格(行索引,1)=元素
sheet.Range(“A”&rowIndex).Font.Bold=True
sheet.Range(“A”和rowIndex).VerticalAlignment=ContentAlignment.TopCenter
sheet.Range(“A”&rowIndex).Interior.Color=System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow)
sheet.Range(sheet.Cells(行索引,1),sheet.Cells(行索引,9)).Merge()
行索引=行索引+1
对于datatableMain.Columns中的每个dc
colIndex=colIndex+1
表.单元格(行索引,共索引)=dc.ColumnName
下一个
'将行导出到excel文件
对于datatableMain.Rows中的每个dr
行索引=行索引+1
colIndex=0
对于datatableMain.Columns中的每个dc
colIndex=colIndex+1
表单元格(行索引+1,共索引)=dr(dc.ColumnName)
下一个
下一个
如果结束
下一个
'保存工作簿并进行清理
book.SaveAs(SaveFileDialog1.FileName)
xls.Workbooks.Close()
xls.Quit()
释放对象(图纸)
发布对象(书)
释放对象(xls)
显示(“导出成功!”,“导出”,MessageBoxButtons.OK,MessageBoxIcon.Information)
这是输出:

也许你应该重新考虑你的循环嵌套:你得到的正是你编程的东西

for each table
   write the header 
   write datas
next table
如果我正确理解了你的问题,你应该写以下内容:

Write the header
for each table
    write datas
next table