WinForm 将GridView中的数据导出到Excel表格

 int ColIndex = 0;
            int RowIndex = 0;
            int ColCount = dataCha.ColumnCount;
            int RowCount = dataCha.RowCount;

            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
            Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
            Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[1];
            // 设置标题
            Microsoft.Office.Interop.Excel.Range range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, ColCount]); //标题所占的单元格数与DataGridView中的列数相同
            range.MergeCells = true;
            xlApp.ActiveCell.Font.Size = 20;
            xlApp.ActiveCell.Font.Bold = true;
            xlApp.ActiveCell.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
            // 创建缓存数据
            object[,] objData = new object[RowCount + 1, ColCount];
            //获取列标题
            foreach (DataGridViewColumn col in dataCha.Columns)
            {
                objData[RowIndex, ColIndex++] = col.HeaderText;
            }
            // 获取数据
            for (RowIndex = 1; RowIndex < RowCount; RowIndex++)
            {
                for (ColIndex = 0; ColIndex < ColCount; ColIndex++)
                {
                    if (dataCha[ColIndex, RowIndex - 1].ValueType == typeof(string)
                        || dataCha[ColIndex, RowIndex - 1].ValueType == typeof(DateTime))//这里就是验证DataGridView单元格中的类型,如果是string或是DataTime类型,则在放入缓存时在该内容前加入" ";
                    {
                        objData[RowIndex, ColIndex] = "" + dataCha[ColIndex, RowIndex - 1].Value;
                    }
                    else
                    {
                        objData[RowIndex, ColIndex] = dataCha[ColIndex, RowIndex - 1].Value;
                    }
                }
                System.Windows.Forms.Application.DoEvents();
            }
            // 写入Excel
            range = xlSheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[RowCount, ColCount]);
            range.Value2 = objData;

            //保存
            xlBook.Saved = true;
            xlBook.SaveCopyAs("D:\\非员工用户" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");

引用dll   using Microsoft.Office.Interop;

posted @ 2011-06-01 17:36  天添  阅读(1845)  评论(0)    收藏  举报