数据导出到Excel不一定要用Office的COM,利用ODBC也可以做到! 定义一个连接Excel文件的连接字符串: String excelSql = @"Driver={Microsoft Excel Driver (*.xls)};READONLY=FALSE;DriverId=790;Dbq={0};DefaultDir=c:\;" ; 其中的{0}要实际替换为目标文件的路径和全名. this.saveFileDialog1.Filter = "Excel文件.xls | *.xls"; string saveFileName = ""; DialogResult dr = this.saveFileDialog1.ShowDialog(); if(dr != DialogResult.Cancel) { saveFileName = saveFileDialog1.FileName; if(File.Exists(saveFileName)) { File.Delete(saveFileName);//删除目标文件 } File.Copy("Book1.xls",saveFileName,true);//复制母板文件为目标文件 } else { return;//保存文件对话框中选择了'取消' } String conSql =excelSql.Replace("{0}",saveFileName);//替换连接字符串中的占位符 OdbcConnection cnn = new OdbcConnection(conSql); try{ cnn.Open();//打开连接 } catch { return;//打开连接失败,退出 } ///下面在Excel文件中创建一个sheet String sql = @"CREATE TABLE [新增Sheet] ( [姓名] varchar(32), [单位名称] varchar(200) )"; OdbcCommand cmd = new OdbcCommand(sql,cnn); try { cmd.ExecuteNonQuery(); } catch { cnn.Close(); cmd.Dispose(); MessageBox.Show("导出失败!",this.title); return; } cmd.Dispose(); sql = @"Select * from [新增Sheet]"; cmd = new OdbcCommand(sql,cnn); DataSet newDs = new DataSet(); OdbcDataAdapter adp = new OdbcDataAdapter(cmd);//生成DataAdapter try { adp.Fill(newDs);//生成一个空的数据集 } catch { adp.Dispose(); newDs.Dispose(); cnn.Close(); cmd.Dispose(); MessageBox.Show("导出失败!",this.title); return; } DataSet ds = (DataSet)this.listView1.Tag;//listView1.Tag中保存的是要导出的dataset foreach(DataRow row in ds.Tables[0].Rows)//往目标数据集复制数据 { DataRow newRow = newDs.Tables[0].NewRow(); newRow["姓名"] = row["姓名"]; newRow["单位名称"] = row["单位名称"]; newDs.Tables[0].Rows.Add(newRow); } OdbcCommandBuilder cb = new OdbcCommandBuilder(adp);//生成插入数据需要的Command int k = adp.Update(newDs);//插入数据到Excel中 adp.Dispose(); cnn.Close(); cmd.Dispose(); cb.Dispose(); MessageBox.Show("导出成功,共导出" + k.ToString() + "条数据,文件保存在:" + saveFileName, this.title);

评论