0

我有一个小函数,可以从存储在数据网格中的字符串创建一个 .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 行。

例子:

  1. 100 ,

  2. 555,333,333,666,777

  3. 200 ,

  4. 444,555,453,345,778

它应该是:

  1. 100,555,333,333,666,777

  2. 200,444,555,453,345,778

有任何想法吗?

编辑:问题已被修改以表明它是插入字符串的换行符,而不是空格。

4

2 回答 2

2

从您的代码中不清楚空间的来源,摆脱空间的最佳方法可能是从一开始就防止它发生。

此外,空格不会导致Excel添加换行符(我刚刚测试了它以确保)。事实上,Excel 默默地吞噬了这个空间。如果在您的情况下插入了换行符,则表明该字符不是空格而是其他字符。

除此之外,您用于删除空格的代码有效。您可能忘记将结果分配给变量:

strrowvalue = strrowvalue.Replace(" ", "")

编辑:因为它显然是一个回车字符而不是一个空格,所以使用这个:

strrowvalue = strrowvalue.Replace(vbCr, "")

或者,如果它是完整的 Windows 样式换行符:

strrowvalue = strrowvalue.Replace(vbCrLf, "")

如果这些都不起作用(奇怪!),试试这个:

strrowvalue = strrowvalue.Replace(vbLf, "")

在其他新闻中,您应该在StringBuilder此处使用 a ,它的性能会比大量重复的字符串连接好得多。

于 2013-01-17T20:31:45.790 回答
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,"")
于 2013-01-17T20:47:08.233 回答