2011-03-14 64 views
1

我需要在VB.NET中從頭開始創建一個excel文件,並從asp.net提供一個DataTable。 我可以爲特定文件執行此操作,但我不知道如何爲通用數據庫執行此操作。 也就是說,我在哪裏使用「CREATE TABLE ...」,我不知道如何告訴它哪些類型用於表中的數據。vb.net將數據廣泛寫入excel

DataTable是從FoxPro數據庫派生而來的。 (我不知道,如果該事項。)

我調用類似於如下表:

<% 
return_value = make_excel(sql_table, excel_filename) 
%> 

make_excel被定義爲

Option Explicit On 
'Option Strict On 

Imports System 
Imports System.Web 
Imports System.Web.UI 
Imports System.Web.UI.Page 
Imports System.IO 
Imports Microsoft.VisualBasic 
Imports System.Diagnostics 
Imports System.Data 
Imports System.Data.OleDb 


Public Class clsCommon 
    Inherits Page 

    ' buncha other stuff defined in here. 

    Public Shared Function make_excel(ByVal sqlTable As DataTable, ByVal xls_fn As String) As Boolean 
     Dim conn As System.Data.OleDb.OleDbConnection 
     Dim ds As System.Data.DataSet 
     Dim cmd As New System.Data.OleDb.OleDbCommand() 

     conn = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & xls_fn & "';Extended Properties=Excel 8.0;") 
     conn.Open() 

     cmd.Connection = conn 
     cmd.CommandText = "CREATE TABLE MyTable (Admin char(20), first_name char(20));" 
     cmd.ExecuteNonQuery() 

     cmd.CommandText = "INSERT INTO MyTable (Admin, first_name) VALUES ('true', 'Bob')" 
     cmd.ExecuteNonQuery() 

     conn.Close() 

     Return True 
    End Function 

End Class 

我需要什麼,能夠做通過上面的sqlTable中的值運行,檢查它們的類型,然後構建sql來編寫它們。指針?

+0

我注意到的一件事是,事情不喜歡字段名稱「密碼」。 – elbillaf 2011-03-16 12:37:36

回答

0

我有問題的解決方案。作爲一種通用的解決方案,我並不高興,但對於我目前正在處理的案例來說,它的效果已經足夠好了。

在此解決方案中,我創建了具有要使用的列標題的excel文件的模板。當我在轉發代碼中進行選擇時,我會根據需要更改字段的名稱(或刪除我不想要的任何字段)。

公共共享功能TestXL(BYVAL RESP作爲HttpResponse對象,BYVAL SQLTABLE作爲數據表,BYVAL xls_template_fn作爲字符串,BYVAL xls_fn作爲字符串)爲布爾 昏暗康恩作爲System.Data.OleDb.OleDbConnection 昏暗DS作爲System.Data。數據集 昏暗CMD作爲新System.Data.OleDb.OleDbCommand()

Dim r As DataRow 
Dim c As DataColumn 
Dim i As Integer 
Dim sql As String 
dim str as string 

If File.Exists(xls_template_fn) Then 
    try 
     If File.Exists(xls_fn) Then 
     File.Delete(xls_fn) 
     Else 
     File.Copy(xls_template_fn, xls_fn) 
     End If 
    catch ex1 as Exception 
     File.Copy(xls_template_fn, xls_fn) 
    End Try 
Else 
    resp.Write("Unable to locate template file: " & xls_template_fn) 
    Return False 
End If 

conn = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & xls_fn & "';Extended Properties=Excel 8.0;") 
conn.Open() 


cmd.Connection = conn 
cmd.CommandText = sql 


For Each r In sqlTable.Rows 
    sql = "INSERT INTO MyTable (" 
    For i = 0 To sqlTable.Columns.Count - 1 
     sql = sql & " " & sqlTable.Columns(i).ColumnName & "," 
    Next 
    sql = Left(sql, sql.Length - 1) & ") VALUES (" 
    For i = 0 To sqlTable.Columns.Count - 1 
    str = r(i).toString() 
     dim str2 as string = str.replace("'", "''") 
     sql = sql & " '" & str2 & "'," 
    Next 
    sql = Left(sql, sql.Length - 1) & ");" 


    'resp.Write(sql & "<br/>") 

    cmd.CommandText = sql 
    cmd.ExecuteNonQuery() 
Next 

conn.Close() 

Return True 

端功能

注意工作表的名稱是表的OLEDB調用的名稱。

有到這樣做的其他方式的鏈接:

http://blogs.msdn.com/b/erikaehrli/archive/2009/01/30/how-to-export-data-to-excel-from-an-asp-net-application-avoid-the-file-format-differ-prompt.aspx

如果我不得不重新審視這個問題,我可能會從那裏開始。

+0

我注意到這個問題已經解決 - 不知道我錯過了它 - 在另一個Stackoverflow線程:http://stackoverflow.com/questions/150339/generating-an-excel-file-in-aspnet – elbillaf 2011-03-17 20:55:33

1

你看過copyfromrecordset函數嗎?您需要完成一些工作,並稍稍改變方法,但這可能是您可以研究的問題。 MS文章可用here(對不起,本文基於VBA,但它應該有助於指導)。

+0

感謝您的留言。我開始嘗試使用ADO,就像我之前用VBA做過類似的事情一樣;然而,我無法弄清楚用什麼進口來獲得這些方法,因此也走了這條路。儘管如此,這種特殊的方法對我來說並不熟悉 - 非常感謝。 – elbillaf 2011-03-15 12:27:31