【问题标题】:C# Importing csv files in datagridview [duplicate]C#在datagridview中导入csv文件[重复]
【发布时间】:2012-10-22 11:26:09
【问题描述】:

可能重复:
Very simple C# CSV reader

在我的应用程序中,用户可以从 datagridview 导出和导出 csv 文件,这可以正常工作,但存在一些小问题。

如您所知,csv 文件使用逗号分隔项目。

有时其中一个单元格有一个逗号,例如(2,5 小时)。

导入 csv 时,它认为 2,5 之间的逗号符号是分隔符,因此它会将 2 放入一个单元格中,将 5 放入下一个单元格中。

我该如何解决这个问题。

这是我用于导入 csv 的 csv

dataGridView1.Rows.Clear();
        try
            {
                if (openFileCsv.ShowDialog() == DialogResult.OK)
                {
                    string csvPath = openFileCsv.FileName;

                    if (System.IO.File.Exists(csvPath))
                    {
                        System.IO.StreamReader fileReader = new System.IO.StreamReader(csvPath, false);


                        //Reading Data
                        while (fileReader.Peek() != -1)
                        {
                            fileRow = fileReader.ReadLine();
                            fileDataField = fileRow.Split(',');
                            dataGridView1.Rows.Add(fileDataField);
                        }
                        fileReader.Dispose();
                        fileReader.Close();
                    }
                    else
                    {
                        MessageBox.Show("CSV Bestand niet gevonden.");
                    }
                }

                DataLoaded = true;

            }

这是我导出 csv 的代码。

if (saveFileCsv.ShowDialog() == DialogResult.OK)
            {
                string CsvFpath = saveFileCsv.FileName;

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

            int countColumn = dataGridView1.ColumnCount - 1;

            int iColCount = dataGridView1.Columns.Count;

            foreach (DataGridViewRow dataRowObject in dataGridView1.Rows)
            {
                //Checking for New Row in DataGridView
                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();
                    }

                    //Writing Data Rows in File
                    csvFileWriter.WriteLine(dataFromGrid);
                }
            }


            csvFileWriter.Flush();
            csvFileWriter.Close();
        }
        catch (Exception exceptionObject)
        {
            MessageBox.Show(exceptionObject.ToString());
        }

【问题讨论】:

  • 将csv文件直接读取到数据表中,而不是读取filerow并用','分割。

标签: c# winforms


【解决方案1】:

尽量使用分号分隔符,或者用逗号(“,”)加引号:

fileRow = fileReader.ReadLine();
fileDataField = fileRow.Replace("\",\"", "\r").Split('\r');
dataGridView1.Rows.Add(fileDataField);

【讨论】:

    【解决方案2】:

    您可以使用逗号以外的其他字符来分隔变量,也可以将值括在引号中。

    看看this

    【讨论】:

    • 完全忽略了这一点,完美运行。
    猜你喜欢
    • 2016-06-07
    • 2021-09-21
    • 1970-01-01
    • 2021-07-12
    • 2018-10-03
    • 2019-04-18
    • 2019-02-23
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多