将datagridview控件导出为Excel时为什么出现异常

将datagridview控件导出为Excel时为什么出现错误
将datagridview控件导出为Excel时为什么执行到这一句会出现错误。
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();出现检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。的错误。
程序如下:
 try
           {
               //没有数据的话就不往下执行  
               if (dataGridView1.Rows.Count == 0)
                   return;
               string saveFileName = "";
               SaveFileDialog saveDialog = new SaveFileDialog();
               saveDialog.DefaultExt = "xls";
               saveDialog.Filter = "Excel文件|*.xls";
               saveDialog.ShowDialog();
               saveFileName = saveDialog.FileName;
               if (saveFileName.IndexOf(":") < 0) return; //被点了取消

               //实例化一个Excel.Application对象  
               Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

               Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;
               Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
               Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
               //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写  
               //excel.Visible = false;

               //生成Excel中列头名称  
               for (int i = 0; i < dataGridView1.Columns.Count; i++)
               {
                   excel.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
               }
               //把DataGridView当前页的数据保存在Excel中  
               for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
               {
                   for (int j = 0; j < dataGridView1.Columns.Count; j++)
                   {
                       if (dataGridView1[j, i].ValueType == typeof(string))
                       {
                           excel.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
                       }
                       else
                       {
                           excel.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
                       }