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

您可以使用任何库导出为 CSV。

于 2012-10-22T14:07:03.463 回答
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 回答