C#对EXCEL文件操作

  1. using Microsoft.Office.Interop.Excel; 
  2. using System.Reflection; 
  3. public class MyConsole 
  4.     public static void Main() 
  5.     { 
  6.         Application app = new ApplicationClass(); 
  7.         try 
  8.         { 
  9.             //让后台执行设置为不可见 
  10.             app.Visible = false
  11.             //新增加一个工作簿 
  12.             Workbook wBook = app.Workbooks.Add(true); 
  13.             //如果要打开已有的工作簿,则使用下面的注释语句 
  14.                 // Workbook wBook = app.Workbooks.Open(@"C:/YourPath/YourWorkbook.xls", 
  15.             //    missing, missing, missing, missing, missing, missing, missing, 
  16.             //    missing, missing, missing, missing, missing,missing, missing); 
  17.             //取得一个工作表 
  18.             //如果打开了已有的工作簿,也可以这样获取工作表 
  19.             //Worksheet wSheet = wBook.ActiveSheet as Worksheet 
  20.             Worksheet wSheet = wBook.Worksheets[1] as Worksheet; 
  21.             wSheet.Cells[1, 1] = "this is a test"
  22.             
  23.             //设置禁止弹出保存和覆盖的询问提示框 
  24.             app.DisplayAlerts = false
  25.             app.AlertBeforeOverwriting = false
  26.             //保存工作簿 
  27.               wBook.Save(); 
  28.              app.Save("C://abc.xls"); 
  29.  
  30.         } 
  31.         catch 
  32.         { 
  33.         
  34.         } 
  35.         finally 
  36.         { 
  37.             //确保Excel进程关闭 
  38.             app.Quit(); 
  39.             app = null
  40.         } 
  41.     } 
  42. 语句一 
  43. Workbook   wBook = app.Workbooks.Add(true);Workbooks.Add的参数是个object类型,通常使用truenull,表明工作簿在默认文档下创建,或者使用枚举值 XlWBATemplate.xlWBATWorksheet,但如果传入一个excel完整文件名,却相当于打开已有工作簿。 
  44. 语句二  
  45. Worksheet   wSheet = wBook.Worksheets[1] as Worksheet;wBook.Worksheets虽然反映的是工作表的集合,然而新创建的工作簿中只有一个工作表,且索引是1,如果换成0将无法找到指定的WorkSheet,如果是操作多个工作表的话,建议用new WorkSheetClass()实例化之后加入到wBook.Worksheets中去。如果是打开已存在的工作簿,这条语句也可能会报错,最好是调用wBook.ActiveSheet来获取或者再加些判断。 
  46. 语句三 
  47. wBook.Save(); 
  48. app.Save("C://abc.xls"); 
  49. 这两句代码至关重要,而且必不可少,否则,保存时会弹出“是否保存sheet1.xls”的对话框。像示例中的保存,在windows server 2003中,因为权限的原因,还可能会出现这样的现象(其它操作系统的结果有待考证):生成的abc.xls除了本机上运行此代码的用户打开正常外,其他户打开后的错误信息如下: 
  50. 无法访问文件。请尝试下列方法之一: 
  51.       确认所指定的文件夹已存在。 
  52.       确认文件所在的文件夹不是只读的。 
  53.       确认给出的文件名不包含下列字符:<>?[]:Sheet1.xls或*。 
  54.       确认文件/路径名长度不超过218个字符。 
  55. 因为此时创建的工作簿其实是在当前用户的“我的文档”目录下自动生成了一个Sheet1.xls副本,而abc.xls是指向这个副本的快捷方式,所以导致其他用户无权访问。我采取的解决办法是将这两句替换为: 
  56. wSheet.SaveAs("C://abc.xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value); 
  57. wBook.Save(); 
  58. 这样做,“我的文档”下就不会再创建Sheet1.xls,而且打开可以发现,原来工作簿里那个工作表名是sheet1.xls的也更改名字为abc.xls了。 
  59. 语句四 app.Quit(); 
  60. 这个关闭一直有疑点,因为C#操作com非托管对象时,凭借Quit()还没有释放掉对象,excel进程不一定会终止,于是,有人使用KillProcess()来处理,我个人认为这不是一个好主意,可能会破坏其它正在执行的excel进程。目前我使用app = null;权作安慰吧。不过有一点是一定要做到,就是在Quit()前不能再有任何更改,不然还是会弹出保存的对话框。所以退出前确保一定是执行过WorkBook或是Application的Save()方法的。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值