VB .Net 在 MS 中查看时导出为 CSV 时出现问题 Excel
VB .Net when exporting to CSV issue when viewing in MS Excel
我遇到了一些非常奇怪的事情。导出为 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)
Excel 将第一行视为 headers。
因此,问题是由为开始写入文件而手动设置文件编码而创建的 BOM 引起的。
fs.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)
删除此问题可解决问题,并且文件仍保持所需的 UTF8 编码,因为它是在流写入器上设置的。所以不需要添加BOM来设置编码。
像这样的东西应该适合你。
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
我遇到了一些非常奇怪的事情。导出为 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)
Excel 将第一行视为 headers。
因此,问题是由为开始写入文件而手动设置文件编码而创建的 BOM 引起的。
fs.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)
删除此问题可解决问题,并且文件仍保持所需的 UTF8 编码,因为它是在流写入器上设置的。所以不需要添加BOM来设置编码。
像这样的东西应该适合你。
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