2种方法参考:
第一种:用流保存成xls文件. 这种方法比较好, 可以参考
  1
  2using System.IO;
  3
  4       
  5
  6        /// <summary>
  7
  8        /// 另存新档按钮
  9
 10        /// </summary>
 11
 12        private void SaveAs() //另存新档按钮   导出成Excel
 13
 14        {
 15
 16            SaveFileDialog saveFileDialog = new SaveFileDialog();
 17
 18            saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
 19
 20            saveFileDialog.FilterIndex = 0;
 21
 22            saveFileDialog.RestoreDirectory = true;
 23
 24            saveFileDialog.CreatePrompt = true;
 25
 26            saveFileDialog.Title = "Export Excel File To";
 27
 28
 29            saveFileDialog.ShowDialog();
 30
 31
 32            Stream myStream;
 33
 34            myStream = saveFileDialog.OpenFile();
 35
 36            //StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
 37
 38            StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
 39
 40            string str = "";
 41
 42            try
 43
 44            {
 45
 46                //写标题
 47
 48                for (int i = 0; i < dgvAgeWeekSex.ColumnCount; i++)
 49
 50                {
 51
 52                    if (i > 0)
 53
 54                    {
 55
 56                        str += " ";
 57
 58                    }
 59
 60                    str += dgvAgeWeekSex.Columns[i].HeaderText;
 61
 62                }
 63
 64
 65                sw.WriteLine(str);
 66
 67
 68
 69                //写内容
 70
 71                for (int j = 0; j < dgvAgeWeekSex.Rows.Count; j++)
 72
 73                {
 74
 75                    string tempStr = "";
 76
 77                    for (int k = 0; k < dgvAgeWeekSex.Columns.Count; k++)
 78
 79                    {
 80
 81                        if (k > 0)
 82
 83                        {
 84
 85                            tempStr += " ";
 86
 87                        }
 88
 89                        tempStr += dgvAgeWeekSex.Rows[j].Cells[k].Value.ToString();
 90
 91                    }
 92
 93                   
 94
 95                    sw.WriteLine(tempStr);                   
 96
 97                }
 98
 99                sw.Close();
100
101                myStream.Close();
102
103            }
104
105            catch (Exception e)
106
107            {
108
109                MessageBox.Show(e.ToString());
110
111            }
112
113            finally
114
115            {
116
117                sw.Close();
118
119                myStream.Close();
120
121            }          
122
123      }