网上搜索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:\YourPath\YourWorkbook.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应用的方面很多,可能还会有些疑问出现,知晓来龙去脉的朋友尽量补充以方便大家吧。

转载于:https://www.cnblogs.com/hzuIT/articles/907165.html

c#创建、保存excel正常执行要点补疑相关推荐

  1. C#中创建、打开、读取、写入、保存Excel的一般性代码

    1 Excel对象 微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象. (1) Appli ...

  2. python 创建excel,操作excel,保存excel,修改excel,删除sheet页

    from openpyxl import Workbook #该包可进行excel相关的操作 import time import datetime import locale #支持中文日期loca ...

  3. python使用xlwt创建与保存excel文件

    xlwt处理excel的思想是先创建一个excel文件:book,然后创建sheet表:sheet,最后对sheet表内的单元格:cell写入数据. 小栗子: import xlwtif __name ...

  4. 如何在Excel中自动创建报告 Excel中自动创建报告的方法

    如何在Excel中自动创建报告 Excel中自动创建报告的方法,Excel工作表中存储的数据,可以使用宏来一键创建报告并导出为不同的文件类型.Excel自带步骤记录器,因此你不需要自己编写宏.小编在这 ...

  5. 服务器保存excel文件慢,从使用IE的服务器缓慢地保存Excel文件

    这里的问题是试图下载带有html标记内容的excel文件.系统需要很长时间才能下载.有时,在请求下载时,IE的保存对话框不会立即显示.从使用IE的服务器缓慢地保存Excel文件 流程就是这样.这是一个 ...

  6. python自动化接口测试excel用例串行之行_python 读取 Excel 自动化执行测试用例

    python 读取 Excel 自动化执行测试用例 Excel 测试用例的读取 安装 python 操作Excel 的库 pip install xlrd/xlwt/xlutils (安装三个操作库) ...

  7. C#在线打开编辑保存Excel文件[pageoffice]

    在项目开发过程中,经常会涉及到生成Excel报表,但往往系统只能通过后台生成Excel报表并保存到服务器上,若想在系统中打开Excel文件并进行编辑保存,有些人可能就没有思路了.因此,为了实现Exce ...

  8. 如何真正实现无提示保存Excel文档

    要想取消Excel文档的保存提示,从而实现文档的自动保存,应该从两个方面加以考虑,一是设置ThisWorkBook.Saved属性,当此属性为True时,Excel会认为该文档已被保存过,因此不会弹出 ...

  9. type=file的未选择任何文件修改_Excel基础—文件菜单之创建保存

    点赞再看,养成习惯:勤能补拙是良训,一分辛劳一分才. 微信搜索[亦心Excel]关注这个不一样的自媒体人. 本文GitHub https://github.com/hugogoos/Excel 已收录 ...

最新文章

  1. jax-ws服务使用
  2. GPU 图像并行处理
  3. android 5.0 ios 8,Android 5.0和iOS8.1哪个好?安卓5.0与iOS8.1区别对比
  4. BPP 相关——02
  5. ab压力测试php脚本,ab压力测试工具-批量压测脚本
  6. Linux内核--基于Netfilter的内核级包过滤防火墙实现
  7. 如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
  8. windows修改用户文件夹名称 更改用户名 修改C盘Users目录下文件夹名称
  9. 13首唐诗五律,哪个是你心目中的“五律”第一?
  10. matlab fsolve fzero,Matlab中的fzero和fsolve函数
  11. springboot读取xml配置文件
  12. BBED处理RMAN-03009,ORA-1956
  13. 《手把手教你移植InfoNES(到HANKER-LM4F232)》
  14. 基于JAVA幼儿园综合管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  15. 使用git控制word版本
  16. 模拟人生 java 安卓版,模拟人生畅玩版
  17. 51单片机(八).单片机的I2C与串口通讯
  18. 今日头条财经部门后台研发实习生面试
  19. P50发布,鸿蒙OS用户突破4000万!
  20. uniapp调用上一页的方法

热门文章

  1. 屏幕为什么要正负压供电_负压变换器的设计
  2. JavaScript_上
  3. Java开发买低压本还是标压本_标压和低压,笔记本怎么选才最香?
  4. uniapp富文本复制文字内容
  5. 几行代码实现神奇移动的过渡动画
  6. 【iOS】NSDate分类,获得中国农历
  7. 对javscript中Object.defineProperty的理解
  8. 什么是SOLID原则(第3部分)
  9. Algs4-1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)
  10. Ubuntu16.04安装qt