vb.net将excel的数据一般化写入

我需要在VB.NET中从头开始创build一个从asp.net的DataTable的Excel文件。 我可以做一个特定的文件,但我不知道如何做一个普通的数据库。 也就是说,在我使用“CREATE TABLE …”的地方,我不知道如何告诉它什么types的表中的数据。

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中的值运行,检查他们的types,然后build立sql来写他们。 指针?

你看过copyfromrecordset函数吗? 你需要做一些工作,稍微改变一下方法,但这可能是你可以研究的。 一篇MS文章可以在这里find (对不起,这篇文章是基于VBA的,但是应该可以作为指导帮助)。

我有一个解决问题的办法。 作为一个通用的解决scheme,我并不高兴,但是对于我目前正在处理的案例来说,这种方法已经足够好了。

在这个解决scheme中,我创build了具有我想要使用的列标题的excel文件的模板。 当我在转发代码中进行select时,我会根据需要更改字段的名称(或者删除我不想要的任何字段)。

公共共享函数TestXL(ByVal resp As HttpResponse,ByVal sqlTable As DataTable,ByVal xls_template_fn As String,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()

 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 

结束function

请注意工作表的名称是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-格式不同-prompt.aspx

如果我不得不重新讨论这个问题,我可能会从那里开始。