我有一个小函数,可以从存储在数据网格中的字符串创建.csv文件。
Dim rowcount As Integer = DataGridView1.Rows.Count - 1
For m As Integer = 0 To rowcount
Dim strrowvalue As String = ""
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value)
For n As Integer = 1 To DataGridView1.Columns.Count - 1
If DataGridView1.CurrentCell.Value Is DBNull.Value Then
strrowvalue += "," + "0"
End If
If DataGridView1.Rows(m).Cells(n).Value Is DBNull.Value Then
strrowvalue += "," + "0"
Else
strrowvalue += "," + CStr(DataGridView1.Rows(m).Cells(n).Value)
End If
Next
If m <> rowcount Then
streamwriter.WriteLine(strrowvalue)
End If
Next
然而,在第一个值之后插入换行符。这会导致Excel和其他程序将第一个值放在第1行,然后该行的其余值放在第2行。
示例:
100,
555,333,333,666,777
200,
444,555,453,345,778
应该是:
100,555,333,333,666,777
200,444,555,453,345,778
有什么想法吗?
编辑:问题已被修改,以表明它是一个插入字符串的换行符,而不是空格。
答案 0 :(得分:2)
从代码中可以看出空间来自哪里,摆脱空间的最佳方法可能是防止它首先发生。
此外,该空间将不导致Excel添加换行符(我刚刚对其进行了测试以确保)。事实上,Excel默默地吞噬了这个空间。如果在您的案例中插入换行符,则表明该字符不是空格,而是其他内容。
除此之外,删除空格的代码也可以。您可能忘记将结果分配给变量:
strrowvalue = strrowvalue.Replace(" ", "")
编辑:因为它显然是回车符而不是空格,请使用:
strrowvalue = strrowvalue.Replace(vbCr, "")
或者,如果它是一个完整的Windows风格的换行符:
strrowvalue = strrowvalue.Replace(vbCrLf, "")
如果这些都不起作用(很奇怪!),试试这个:
strrowvalue = strrowvalue.Replace(vbLf, "")
在其他新闻中,你应该在这里使用StringBuilder
,它会比许多重复的字符串连接好得多。
答案 1 :(得分:0)
根据插入的换行符类型,我会将此行更新为以下之一:
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbCrLf,"")
- 或 -
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbCr,"")
- 或 -
strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbLf,"")