1.导出数据到excel后进行保存时:弹出对话框提示"是否想覆盖"那个文件.怎么能制止它.且不影响保存?
method1:保存成其它的名字
method2:不显示确认对话框 xlsApp.Application.DisplayAlerts = false;
2.保存多个worksheet时用workbook对象的saveas方法
oBook.SaveAs(filename,missing,missing,missing,missing,missing,XlSaveAsAccessMode.xlExclusive,
missing,missing,missing,missing,missing);
3.关闭excel进程
public void DestoryExcel()
{
oBook.Close( false, null, null );
oExcel.Workbooks.Close();
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject( oRange );
System.Runtime.InteropServices.Marshal.ReleaseComObject( oWorkSheet );
System.Runtime.InteropServices.Marshal.ReleaseComObject( oSheet );
System.Runtime.InteropServices.Marshal.ReleaseComObject( oBook );
System.Runtime.InteropServices.Marshal.ReleaseComObject( oExcel );
oRange = null;
oWorkSheet = null;
oSheet = null;
oBook = null;
oMissing = null;
oExcel = null;
GC.Collect();
}
----------------------------------------------------------------
http://www.cnblogs.com/renyu732/archive/2005/06/15/174866.html
网上搜索C#实现excel操作的示例太多了,但不知道有多少是经过验证确实可行才发布出来的,也是因为开发需要,我找了一些代码却发现大多都不能正确执行完毕,于是决定补充自己在实践中遇到的要点以供参考。如下示例:























































代码注释部分只是简单描述各语句的原由,个别的还是值得推敲的。
Workbooks.Add的参数是个object类型,通常使用true或null,表明工作簿在默认文档下创建,或者使用枚举值 XlWBATemplate.xlWBATWorksheet,但如果传入一个excel完整文件名,却相当于打开已有工作簿。
wBook.Worksheets虽然反映的是工作表的集合,然而新创建的工作簿中只有一个工作表,且索引是1,如果换成0将无法找到指定的WorkSheet,如果是操作多个工作表的话,建议用new WorkSheetClass()实例化之后加入到wBook.Worksheets中去。如果是打开已存在的工作簿,这条语句也可能会报错,最好是调用wBook.ActiveSheet来获取或者再加些判断。
这两句代码至关重要,而且必不可少,否则,保存时会弹出“是否保存sheet1.xls”的对话框。像示例中的保存,在windows server 2003中,因为权限的原因,还可能会出现这样的现象(其它操作系统的结果有待考证):生成的abc.xls除了本机上运行此代码的用户打开正常外,其他户打开后的错误信息如下:
确认所指定的文件夹已存在。
确认文件所在的文件夹不是只读的。
确认给出的文件名不包含下列字符: <>? []:Sheet1.xls或 * 。
确认文件 / 路径名长度不超过218个字符。
因为此时创建的工作簿其实是在当前用户的“我的文档”目录下自动生成了一个Sheet1.xls副本,而abc.xls是指向这个副本的快捷方式,所以导致其他用户无权访问。我采取的解决办法是将这两句替换为:
wBook.Save();
这样做,“我的文档”下就不会再创建Sheet1.xls,而且打开可以发现,原来工作簿里那个工作表名是sheet1.xls的也更改名字为abc.xls了。
这个关闭一直有疑点,因为C#操作com非托管对象时,凭借Quit()还没有释放掉对象,excel进程不一定会终止,于是,有人使用KillProcess()来处理,我个人认为这不是一个好主意,可能会破坏其它正在执行的excel进程。目前我使用app = null;权作安慰吧。不过有一点是一定要做到,就是在Quit()前不能再有任何更改,不然还是会弹出保存的对话框。所以退出前确保一定是执行过WorkBook或是Application的Save()方法的。