2013-07-11 74 views
0

我正在研究一个控制台应用程序,它将获取特定文件夹中的所有.sql文件,使用它们查询数据库,然后将每个文件的结果导出到Excel文件。我把所有的东西都放到了数据表中。我要求提供任何建议或指导,让数据表达出众。任何帮助,将不胜感激。谢谢。Visual Basic - 将数据表写入Excel

Imports System.Data.OleDb 

Module SqlExport 

Sub Main() 

    Dim SQLString As String 
    Dim SQLDirectory As New IO.DirectoryInfo("\\Datastore\scripts\SQL") 
    Dim SQLQueries As IO.FileInfo() = SQLDirectory.GetFiles("*.sql") 
    Dim CurrentQuery As IO.FileInfo 

    Dim dt As New DataTable 

    For Each CurrentQuery In SQLQueries 
     SQLString = System.IO.File.ReadAllText(CurrentQuery.FullName) 

     Using connection As New OleDb.OleDbConnection("provider=advantage ole db provider;data source=\\database\dba;advantage server type=ads_remote_server;trimtrailingspaces=true;") 

      Dim command As New OleDbCommand(SQLString, connection) 
      Dim da As New OleDb.OleDbDataAdapter(command) 

      da.Fill(dt) 

     End Using 

    Next 

End Sub 

End Module 
+0

右边的第一个建议链接看起来很完美:http://stackoverflow.com/questions/1746701/export-datatable-to-excel-file –

回答

0

你尝试过什么?

如果您搜索“vb.net export datatable to Excel”,您会遇到像this one这样的链接。如果你尝试这样做并且遇到麻烦,那么你可能会回来一个更具体的问题。

0

在手动方式..

首先,你必须创建XLS文件,并colums头就像在你的数据库中的字段

认为是 “TRANSFER.XLS” ..

Dim sFN = "Transfer.XLS" 
Dim cnXLS As OleDbConnection 
Dim cmdXLS As OleDbCommand 
Dim dr as DataRow 

cnXLS = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;" & _ 
        "data source=" & sFN & ";Extended Properties=Excel 8.0;") 
cnXLS.Open() 

For x as Integer = 0 to dt.Table(0).Rows.Count -1 '---> this is your dt 
    dr = dt.Table(0).Rows(x) 
    cmdXLS = New OleDbCommand("INSERT INTO [Sheet1$] (name, ....) VALUES (dr.item("name", ....)", cnXLS) 
    cmdXLS.ExecuteNonQuery 

Next 
cnXLS.close() 
0

谢谢大家。我结束了使用以下来获得我正在寻找的结果。

Dim da As New OleDb.OleDbDataAdapter(command) 

da.Fill(ds) 

Dim Excel As Object = CreateObject("Excel.Application") 
    With Excel 
     .SheetsInNewWorkbook = 1 
     .Workbooks.Add() 
     .Worksheets(1).Select() 
     .Range("A1").select() 

     Dim i As Integer = 1 

     For col = 0 To ds.Tables(0).Columns.Count - 1 
      If Asc(ds.Tables(0).Columns(col).ColumnName) = 36 Then 
       .Columns(i).NumberFormat = "General" 
       .Cells(1, i).value = ds.Tables(0).Columns(col).ColumnName.Substring(1) 
      Else 
       .Columns(i).NumberFormat = "@" 
       .Cells(1, i).value = ds.Tables(0).Columns(col).ColumnName 
      End If 
      i += 1 
     Next 

     Dim j As Integer = 1 
     For col = 0 To ds.Tables(0).Columns.Count - 1 
      i = 2 
      For row = 0 To ds.Tables(0).Rows.Count - 1 
       .Cells(i, j).Value = ds.Tables(0).Rows(row).ItemArray(col).ToString 
       i += 1 
      Next 
      j += 1 
     Next 

     Dim fileName As String = Path.GetFileNameWithoutExtension(CurrentQuery.Name) 

     .ActiveWorkbook.SaveAs(Filename:="\\reports\" & value & "\" & fileName & DateTime.Now.ToString("yyyy-MM-dd") & ".xlsx", _ 
     WriteResPassword:="123456", _ 
     ReadOnlyRecommended:=False, _ 
     CreateBackup:=False) 

     .Workbooks.Close() 
     .Quit() 
End With