2012-01-17 4 views
0

У меня есть настольное приложение, я использую этот код, чтобы создать файл .xls с помощью FileStream объекта:Экспорт запросов SQL в Excel 97 файла с помощью vb.net

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, я получаю: «Файл, который вы пытаетесь открыть, находится в другом формате, чем указано в расширении файла ...», поэтому я предполагаю, что он создает файл .xlsx (2007) вместо .xls (97-2003). Поэтому я задаюсь вопросом, есть ли способ указать версию, в которой я хочу получить файл excel?

ответ

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) Использование Использование заявлений для обеспечения всех ваших одноразовых предметов очищаются правильно.

+0

Большое вам спасибо. – Somebody

0

Эта дискуссия уже имеют место здесь, в StackOverflow можно попробовать по этой ссылке:

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

, но в основном вам нужно, чтобы сохранить книгу с правом пролонгации в C# случае будет

ExcelLibrary.DataSetHelper.CreateWorkbook («MyExcelFile.xls», объект набора данных);

+0

спасибо за ответ, но ваш подход использует ExcelLibrary, который отличается от моего. Думаю, я не могу делать то, что хочу, используя FileStream. – Somebody

Смежные вопросы