我遇到了一些非常奇怪的事情。导出为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)
答案 0 :(得分:0)
Excel将第一行视为标题。
答案 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