使用vb.net将SQL查询导出到Excel 97文件

时间:2012-01-17 14:29:51

标签: vb.net excel

我有一个桌面应用程序,我使用此代码使用FileStream对象创建.xls文件:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim i As Integer
    Dim strLine As String = ""
    Dim fileExcel As String
    Dim objFileStream As FileStream
    Dim objStreamWriter As StreamWriter
    Dim cnn As SqlConnection = New SqlConnection("...Connection...")

    'Create a pseudo-random file name.
    fileExcel = "c:\temp\test.xls"

    'Use FileStream to create the .xls file.
    objFileStream = New FileStream(fileExcel, FileMode.OpenOrCreate, FileAccess.Write)
    objStreamWriter = New StreamWriter(objFileStream)

    'Use a DataReader to connect to the Pubs database.
    cnn.Open()
    Dim sql As String = "select top 5 idWO, Number, Comment from tblWorkorder (nolock)"
    Dim cmd As SqlCommand = New SqlCommand(sql, cnn)
    Dim dr As SqlDataReader
    dr = cmd.ExecuteReader()

    'Enumerate the field names and records that are used to build the file.
    For i = 0 To dr.FieldCount - 1
        strLine = strLine & dr.GetName(i).ToString & Chr(9)
    Next

    'Write the field name information to file.
    objStreamWriter.WriteLine(strLine)

    'Reinitialize the string for data.
    strLine = ""

    'Enumerate the database that is used to populate the file.
    While dr.Read()
        For i = 0 To dr.FieldCount - 1
            strLine = strLine & dr.GetValue(i) & Chr(9)
        Next
        objStreamWriter.WriteLine(strLine)
        strLine = ""
    End While

    'Clean up.
    dr.Close()
    cnn.Close()
    objStreamWriter.Close()
    objFileStream.Close()

End Sub

这样可以正常工作,但是当我打开创建的.xls文件时,我得到:“您尝试打开的文件格式与文件扩展名中指定的格式不同...”所以我猜它会创建a .xlsx(2007)文件而不是.xls(97-2003)。所以我想知道是否有任何方法可以指定我想要excel文件的版本?

2 个答案:

答案 0 :(得分:1)

因为xls格式是一种不易写入的专有格式,所以不使用任何库的最佳选择是将文件导出到csv文件。 Excel的默认安装将自己与此格式相关联,这意味着它将自动由Excel打开。

由于您的数据相当小,您应该可以轻松转换它。

例如:

strLine = strLine & dr.GetName(i).ToString & Chr(9)

变为:

If Not String.IsNullOrEmpty(strLine) Then
    strLine &= ","
End If
strLine &= """" & dr.GetName(i).ToString & """"

您需要根据数据类型以及是否嵌入双引号来调整某些输出,但这应该可以帮助您。

我还强烈建议对代码进行两项其他更改:

1)使用System.Text.StringBuilder构建字符串

2)使用Using语句确保正确清理所有一次性物体。

答案 1 :(得分:0)

此讨论已在stackoverflow中进行,您可以尝试按此链接

Create Excel (.XLS and .XLSX) file from C#

但基本上你需要在C#中使用正确的扩展名来保存你的工作簿

ExcelLibrary.DataSetHelper.CreateWorkbook(" MyExcelFile.xls",Dataset Object);