1

CSV にエクスポートしようとしていますが、グリッド ビューに含まれるデータにコンマが含まれている場合に問題が発生します。「,」が区切り文字として使用されているため、csv 内であらゆる種類の問題が発生しています。以下はコードです。これを回避する方法はありますか?

  try
        {
            System.IO.StreamWriter csvFileWriter = new StreamWriter(CsvFpath, false);

            string columnHeaderText = "";

            int countColumn = dataGridViewLogging.ColumnCount - 1;

            if (countColumn >= 0)
            {
                columnHeaderText = dataGridViewLogging.Columns[0].HeaderText;
            }

            for (int i = 1; i <= countColumn; i++)
            {
                columnHeaderText = columnHeaderText + ',' + dataGridViewLogging.Columns[i].HeaderText;
            }


            csvFileWriter.WriteLine(columnHeaderText);

            foreach (DataGridViewRow dataRowObject in dataGridViewLogging.Rows)
            {
                if (!dataRowObject.IsNewRow)
                {
                    string dataFromGrid = "";

                    dataFromGrid = dataRowObject.Cells[0].Value.ToString();

                    for (int i = 1; i <= countColumn; i++)
                    {
                        dataFromGrid = dataFromGrid + ',' + dataRowObject.Cells[i].Value.ToString();

                        csvFileWriter.WriteLine(dataFromGrid);
                    }
                }
            }
4

2 に答える 2

0

エスケープ文字を使用し、エスケープの処理方法を理解しているパーサーを使用します。Escape()拡張機能とUnescape()拡張機能をすばやく作成できます。

public static class ExtentionClass
{
    public static string Escape(this string str)
    {
          return str.Replace("\\","\\\\").Replace(",","\\,");
    }
    public static string Unescape(this string str)
    {
          return str.Replace("\\\\","\\").Replace("\\,",",");
    }
}

これで、行を次のように変更できます...

dataFromGrid = dataFromGrid + ',' + dataRowObject.Cells[i].Value.ToString().Escape();

ただし、Excelで出力を表示したい場合は、\が機能しません...二重引用符で囲む必要があります。

...
    public static string Escape(this string str)
    {
        return "\"" + str.Replace("\"","\"\"") + "\"";
    }

詳細については、... CSV for Excel(先行ゼロとカンマの両方を含む)を参照してください。

于 2012-10-22T14:33:05.603 に答える
0

CSV へのエクスポートには任意のライブラリを使用できます。

于 2012-10-22T14:07:03.463 に答える