c#创建、保存excel正常执行要点补疑
来源:互联网 发布:python爬虫抓取数据 编辑:程序博客网 时间:2024/05/22 04:36
引自:http://dev.21tx.com/2008/10/23/13774.html
网上搜索C#实现Excel操作的示例太多了,但不知道有多少是经过验证确实可行才发布出来的,也是因为开发需要,我找了一些代码却发现大多都不能正确执行完毕,于是决定补充自己在实践中遇到的要点以供参考。如下示例:using Microsoft.Office.Interop.Excel;using System.Reflection; public class MyConsole{ public static void Main() { Application app = new ApplicationClass(); try { //让后台执行设置为不可见 app.Visible = false; //新增加一个工作簿 Workbook wBook = app.Workbooks.Add(true); //如果要打开已有的工作簿,则使用下面的注释语句 // Workbook wBook = app.Workbooks.Open(@"C:YourPathYourWorkbook.xls", // missing, missing, missing, missing, missing, missing, missing, // missing, missing, missing, missing, missing,missing, missing); //取得一个工作表 //如果打开了已有的工作簿,也可以这样获取工作表Worksheet wSheet = wBook.ActiveSheet as Worksheet Worksheet wSheet = wBook.Worksheets[1] as Worksheet; wSheet.Cells[1, 1] = "this is a test"; //设置禁止弹出保存和覆盖的询问提示框 app.DisplayAlerts = false; app.AlertBeforeOverwriting = false; //保存工作簿 wBook.Save(); //保存excel文件 app.Save("C:abc.xls"); } catch { } finally { //确保Excel进程关闭 app.Quit(); app = null; } }}代码注释部分只是简单描述各语句的原由,个别的还是值得推敲的。 语句一 Workbook wBook = app.Workbooks.Add(true);Workbooks.Add的参数是个object类型,通常使用true或null,表明工作簿在默认文档下创建,或者使用枚举值 XlWBATemplate.xlWBATWorksheet,但如果传入一个excel完整文件名,却相当于打开已有工作簿。 语句二 Worksheet wSheet = wBook.Worksheets[1] as Worksheet;wBook.Worksheets虽然反映的是工作表的集合,然而新创建的工作簿中只有一个工作表,且索引是1,如果换成0将无法找到指定的WorkSheet,如果是操作多个工作表的话,建议用new WorkSheetClass()实例化之后加入到wBook.Worksheets中去。如果是打开已存在的工作簿,这条语句也可能会报错,最好是调用wBook.ActiveSheet来获取或者再加些判断。 语句三 wBook.Save();app.Save("C:abc.xls");这两句代码至关重要,而且必不可少,否则,保存时会弹出“是否保存sheet1.xls”的对话框。像示例中的保存,在Windows server 2003中,因为权限的原因,还可能会出现这样的现象(其它操作系统的结果有待考证):生成的abc.xls除了本机上运行此代码的用户打开正常外,其他户打开后的错误信息如下: 无法访问文件。请尝试下列方法之一: 确认所指定的文件夹已存在。 确认文件所在的文件夹不是只读的。 确认给出的文件名不包含下列字符:<>?[]:Sheet1.xls或*。 确认文件/路径名长度不超过218个字符。 因为此时创建的工作簿其实是在当前用户的“我的文档”目录下自动生成了一个Sheet1.xls副本,而abc.xls是指向这个副本的快捷方式,所以导致其他用户无权访问。我采取的解决办法是将这两句替换为: wSheet.SaveAs("C:abc.xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value); wBook.Save(); 这样做,“我的文档”下就不会再创建Sheet1.xls,而且打开可以发现,原来工作簿里那个工作表名是sheet1.xls的也更改名字为abc.xls了。 语句四 app.Quit(); 这个关闭一直有疑点,因为C#操作com非托管对象时,凭借Quit()还没有释放掉对象,excel进程不一定会终止,于是,有人使用KillProcess()来处理,我个人认为这不是一个好主意,可能会破坏其它正在执行的excel进程。目前我使用app = null;权作安慰吧。不过有一点是一定要做到,就是在Quit()前不能再有任何更改,不然还是会弹出保存的对话框。所以退出前确保一定是执行过WorkBook或是Application的Save()方法的。 对于在c#中操作excel应用的方面很多,可能还会有些疑问出现,知晓来龙去脉的朋友尽量补充以方便大家吧。
- c#创建、保存excel正常执行要点补疑
- C#创建、保存Excel正常执行要点补疑
- c#创建、保存excel正常执行要点补疑
- c#创建、保存excel正常执行要点补疑
- c#创建、保存excel正常执行
- C#创建、打开、读取、写入、保存Excel,Excel打印输出
- C# 操作 Excel 要点
- C# 操作 Excel 要点
- C# 操作 Excel 要点
- C# Excel 创建、打开、读取、写入、保存的一般性代码
- C# Excel 创建、打开、读取、写入、保存的一般性代码
- C# Excel 创建、打开、读取、写入、保存的一般性代码
- C# Excel 创建、打开、读取、写入、保存的一般性代码
- C#中创建、打开、读取、写入、保存Exce,C#如何向EXCEL写入数据
- C#创建EXCEL
- C#创建Excel文件
- C# 创建EXCEL文件
- C#操作Excel(创建、打开、读写、保存)几种方法的总结
- 安装jdk配置环境变量并测试java
- Windows界面编程第三篇 异形窗体 普通版
- KVM虚拟机代码揭秘——设备I/O虚拟化
- MyEclipse 性能测试工具VisualVm简介
- 【转】Oracle中Decode()函数使用技巧
- c#创建、保存excel正常执行要点补疑
- java序列化学习笔记
- Windows常用shell命令大全
- 更改MyEclipse/Eclipse代码自动换行的长度
- C SIZEOF
- 工作趣事 之 重装服务器后的网站不能正常访问的问题
- tomcat 的优化配置
- MDS项目多媒体调度系统(语音调度,视频调度)qq413342656
- Book One - The Silent Void(第一篇 静寂的空宇)