您的位置:首页 > 其它

把WinForm的DataGridView的数据导出到Excel

2009-09-04 14:34 519 查看
最近做一个项目,需要用到这个功能,在网上也找了很多资料,但是效果还是不好。我自己总结了网上的代码和自己写了点。觉得用起来还是不错。写出来做个纪念。呵呵 ^_^
      首先要求数据显示在DataGridView中,给个button 事件如下:
       
private void button10_Click(object sender, EventArgs e)
        {

            try
            {
                Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();//创建Excel表
                myExcel.Visible = true;
                Microsoft.Office.Interop.Excel.Workbooks myWorkbooks = myExcel.Workbooks;//创建Excel工作表集合
                Microsoft.Office.Interop.Excel.Workbook myWorkbook = myWorkbooks.Add(System.Reflection.Missing.Value);//创建Excel工作表
                Microsoft.Office.Interop.Excel.Worksheet myWorksheet =(Microsoft.Office.Interop.Excel.Worksheet)myWorkbook.Worksheets[1];//创建Excel工作表Sheet1页
                Microsoft.Office.Interop.Excel.Range myRange = myExcel.get_Range(myExcel.Cells[1, 1], myExcel.Cells[1, 4]);//选择页的范 myExcel.Cells[1, 4]表示下面myhead中存入的好多哥表头的个数
                object[] myhead = {"编号","姓名","性别","名族" };//设置表头,这种设置表头的方法是写死的,虽然有点笨,但是效果还是不错的

                myRange.Value2 = myhead;
                if (this.dataGridView1.Rows.Count > 0)
                {
                    myRange = myWorksheet.get_Range("A2", System.Reflection.Missing.Value);
                    int row = 0;
                    row = this.dataGridView1.Rows.Count;//设置表的行数
                    int col = 4;//设置表的列数,如果你表头是4个,这支需要列数为4个就可以了,你可以根据你添加的表头来规定列数
                    object[,] mydata = new object[row, col];
                    try
                    {
                        for (int i = 0; i < row ; i++)
                        {
                            for (int j = 0; j < col; j++)
                            {
                                mydata[i, j] = this.dataGridView1[j, i].Value.ToString();//读取DataGridView中的值,保存到myData数组中,这里要注意哦,DataGridView是列在前,而Excel刚好相反

                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    myRange = myRange.get_Resize(row, col);
                    myRange.Value2 = mydata;//把mydata数组的值存到Excel表导出
                    myRange.EntireColumn.AutoFit();
                }
                myExcel = null;//清空表单
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            } 
        }


原帖地址:http://www.cnblogs.com/blueface/archive/2009/09/03/1559357.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: