c# 操作excel

查看文章
  
c# excel
2008-03-12 11:14

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()方法的。


类别:.net | 添加到搜藏 | 浏览( 34) | 评论 (0) <script language="javascript" type="text/javascript"> /* 
'); if(pre[0]){ document.write('上一篇:'); } /*]]>*/ </script>
 
上一篇:
水晶报表ACCESS_DataSet    下一篇: C# string
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值