大型datagridview导出为ex​​cel

IM尝试导出在DataGridView到Excel(.xls的)在C#中使用Visual Studio 2010 WinForms应用程序,这个问题被它正在采取永远保存,到目前为止,我有4220行和20列。 有没有更快的方法来做到这一点。 注意:我正在从保存的excel文件填充datagridview。 我感谢你的帮助....我的保存代码如下:

private void btnSave_Click(object sender, EventArgs e)
    {
        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Add(misValue);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        // Get the Header from dataGridView
        for (int h = 1; h < dataGridView1.Columns.Count + 1; h++)
        {
            xlWorkSheet.Cells[1, h] = dataGridView1.Columns[h - 1].HeaderText;
        }

        // Get the Cell Values
        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
        {
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                DataGridViewCell cell = dataGridView1[j, i];
                xlWorkSheet.Cells[i + 2, j + 1] = cell.Value;
            }
        }

        //xlWorkBook.SaveCopyAs("FORM TEST.xlsx");
        xlWorkBook.SaveAs("GB STOCK.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        xlApp = null;
        xlWorkBook = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();      
    }

在阅读了各种搜索之后,通过上面的答案,我看到了这段代码,它的工作速度非常快(几乎是瞬间的),而我的原始代码只花了2分钟。 我非常感谢你的回答,我会研究这些,特别是复制和粘贴方法,这是一个有趣的阅读。 我对这个(新的爱好)是一个相对较新的人,我只是开始理解一些关于导出数据集的概念等等。我知道这绝不是实现我的目标的最好方式,但它做到了我想要的东西到目前为止。 再次感谢所有帮助过我的人,我正在学习很多东西。

            int cols;
            //open file 
            StreamWriter wr = new StreamWriter("GB STOCK.csv", false, Encoding.UTF8);

            //determine the number of columns and write columns to file 
            cols = dgvStock.Columns.Count;
            for (int i = 0; i < cols; i++)
                { 
                    wr.Write(dgvStock.Columns[i].Name.ToString().ToUpper() + ",");
                } 
            wr.WriteLine();

            //write rows to excel file
            for (int i = 0; i < (dgvStock.Rows.Count); i++)
                { 
                    for (int j = 0; j < cols; j++)
                        { 
                            if (dgvStock.Rows[i].Cells[j].Value != null)
                                {
                                    wr.Write(dgvStock.Rows[i].Cells[j].Value + ",");
                                }
                            else 
                                {
                                    wr.Write(",");
                                }
                        }

                    wr.WriteLine();
                }
                //close file
                wr.Close();

您希望尽量减少您在.NET代码和Excel进程之间进行的调用次数 - 这些执行速度非常慢,因此逐个填充单元格需要很长时间。

最好将网格的内容放入数组中:然后可以通过单个操作将其转储到Excel工作表中。

将数组写入Excel范围


使用互操作来逐个单元格复制非常缓慢。 我会建议使用复制粘贴代替。 有关如何将数据复制到剪贴板的示例,请参见此msdn文章; 然后您可以使用interop将这些值粘贴到电子表格中。

链接地址: http://www.djcxy.com/p/36771.html

上一篇: large datagridview export to excel

下一篇: c# exporting data from datagridview into excel