最近做一个项目,需要用到这个功能,在网上也找了很多资料,但是效果还是不好。我自己总结了网上的代码和自己写了点。觉得用起来还是不错。写出来做个纪念。呵呵 ^_^ 首先要求数据显示在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