在MS Excel中查看时导出为CSV问题时的VB .Net

时间:2017-10-02 08:35:21

标签: excel vb.net csv filestream streamwriter

我遇到了一些非常奇怪的事情。导出为CSV时,我的第一行显示引号,但下面的行显示为。

我使用UTF8编码并手动将双引号添加到值中,以便用引号括起来。

正在使用的代码是

Dim fs As New IO.FileStream(GenericValueEditorExportFilename.Value, IO.FileMode.Create)
        Dim writer As New IO.StreamWriter(fs, Encoding.UTF8)
        fs.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)
.... 
.... 
....

While reader.Read
                If reader("TargetLanguageID") = targetLanguageID Then
                    writer.WriteLine(Encode(reader("SourcePhrase")) & ", " & Encode(reader("TargetPhrase")))
                End If 
.... 
.... 
....

Friend Shared Function Encode(ByVal value As String) As String
    Return ControlChars.Quote & value.Replace("""", """""") & ControlChars.Quote
End Function

在excel中显示的结果显示为(https://ibb.co/ntMYdw

当我在Notepad ++中打开文件时,文本如下所示。但每条线的显示方式不同。为什么第一行显示它们而第二行不显示它们。 Notepad ++结果显示为(https://ibb.co/fMkWWG

3 个答案:

答案 0 :(得分:0)

Excel将第一行视为标题。

https://stackoverflow.com/a/24923167/2319909

答案 1 :(得分:0)

因此问题是由创建的BOM导致手动设置文件的编码作为开始写入文件。

fs.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

删除此问题会解决问题,并且文件仍保留在流编写器上设置的所需UTF8编码中。所以不需要添加BOM来设置编码。

答案 2 :(得分:0)

这样的事情对你有用。

Dim str As New StringBuilder

For Each dr As DataRow In Me.NorthwindDataSet.Customers

     For Each field As Object In dr.ItemArray

     str.Append(field.ToString & ",")

     Next

     str.Replace(",", vbNewLine, str.Length - 1, 1)

Next



Try

     My.Computer.FileSystem.WriteAllText("C:\temp\testcsv.csv", str.ToString, False)

Catch ex As Exception

     MessageBox.Show("Write Error")

End Try