2013-07-11 75 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