我有一个桌面应用程序,我使用此代码使用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文件的版本?
答案 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);