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代わりにここを使用する必要があります。これは、多くの繰り返される文字列連結よりもはるかに優れたパフォーマンスを発揮します。

于 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 に答える