如何从DataGridView生成CSV文件时保留格式?

时间:2011-03-24 22:09:17

标签: c# .net

我有以下代码从DataGridView生成CSV文件并且工作正常。但它并没有保留确切的格式。例如,我在一个单元格中有125600.00,在DataGridView中有另一个单元格中有08。当我使用Excel打开CSV文件时,它显示为125600和8.当我使用记事本打开CSV文件时,它显示正确的125600.00和08.我能做些什么来查看相同的格式擅长? 感谢您的任何建议。

private void btnPrint_Click(object sender, EventArgs e)
    {
        sbMainFile = new StringBuilder();
        int dgcolcount = this.dataGridView1.Columns.Count;

        for (int i = 0; i < dgcolcount; i++)
        {
            sbMainFile.Append(this.dataGridView1.Columns[i].Name);
            if (i < dgcolcount - 1)
            {
                sbMainFile.Append(",");
            }
        }
        sbMainFile.Append("\r\n");

        StringBuilder sbRow = null;

        foreach (DataGridViewRow row in this.dataGridView1.Rows)
        {
            sbRow = new StringBuilder();
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                sbRow.Append(row.Cells[i].Value.ToString());
                if (i < dgcolcount - 1)
                {
                    sbRow.Append(",");
                }
            }
            sbMainFile.AppendLine(sbRow.ToString());
        }

        SaveFileDialog savefile = new SaveFileDialog();
        savefile.FileName = "default";
        savefile.Filter = "CSV Files | *.csv";
        savefile.DefaultExt = "csv";

        if (savefile.ShowDialog() == DialogResult.OK)
        {
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(savefile.FileName))
                sw.Write(sbMainFile.ToString());
        }

    }

2 个答案:

答案 0 :(得分:2)

您可以将“列值”保存为字符串;例如08 as =“08”

变化

sbRow.Append(row.Cells[i].Value.ToString());

sbRow.AppendFormat("=\"{0}\"", row.Cells[i].Value.ToString());

答案 1 :(得分:1)

您的代码没有任何问题。这实际上是Excel为您格式化数据的问题。您实际上并没有丢失任何数据。您只需在Excel中指定格式即可。 (如果单击其中一个格式被破坏的单元格,您实际上可以在f(x)编辑器中看到“原始”值。)