C#中操作Excel(5)—— 操作Excel的两种技术(一)--COM技术

一、引言

        本文主要介绍操作Excel的两种技术,第一种就是我们之前的文章中一直在使用的COM技术,而另一种是使用OLEDB技术。两种方法各有优势和缺点,前者利用COM接口操作Excel,更加自由和灵活,可以自由的设置单元格格式等等,但是数据量较大时存在性能瓶颈。后者把Excel当成一个数据库,读取速度较快,但是无法设置Excel的格式。下面分别介绍两种技术,在此之前我们先布置试验环境,在D盘新建一个名叫“Test.xlsx”Excel文件,输入以下内容:


 

二、使用COM技术操作Excel

        我们要实现的功能的是分别复制原始表格的数据,然后在该表格的另一片区域(D1~E4)插入复制的数据。相信阅读过之前博文的童鞋,对这种操作Excel的方法已经很熟悉了,首先我们需要以模板的方式加载该Excel并获取覆盖A1~B4的Range。
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
            app.Visible = true;
            /* 以模板方式打开模板*/
            Workbook book = app.Workbooks.Add("D:\\Test.xlsx");
            /* 获取第²一个sheet*/
            Worksheet sheet = book.Worksheets[1];
            Range range = sheet.get_Range("A1");
            range = range.get_Resize(4, 2);
        代码的第8和第9行,我们先是获取了一个Range对象,然后用range.get_Resize()函数获取了一个以A1位起点,覆盖4行2列的Range对象,这样就正好覆盖了这片数据区域。当然我们也可以通过sheet.get_Range("A1",”B4”);来直接获取这部分Range。
        接下来我们调用range的get_Value()接口直接读取这边数据到内存。
object _optionalValue = Missing.Value;
            object[,] objects = new object[4, 2];
            objects = range.get_Value(_optionalValue);

        第1行我们先定义了一个值为Missing.Value的object对象,这是Excel中定义的方法的默认值,调用部分方法时,如果不提供该默认值,可能会出现异常,所以建议以后再Excel编程中入股需要默认参数时,都要填上此值。

        第2行,我们创建了一个4行2列的object[,]对象,第3行我们调用range的get_Value()方法,可以把range覆盖的这部分内容保存到该object[,]对象中。如果你在这里打断点的话,应该会看到objects成功读取到了这些数据:


 
        接下来我们可以直接使用range的set_Value方法直接将这部分数据保存的Excel:
Range rangeToInsert = sheet.get_Range("D1","E4");
rangeToInsert.set_Value(_optionalValue,objects);

如果没问题,我们成功插入了上面的数据:


 本文完整的源代码:

 Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
            app.Visible = true;
            /* 以模板方式打开Excel模板*/
            Workbook book = app.Workbooks.Add("D:\\Test.xlsx");
            /* 获取第一个sheet*/
            Worksheet sheet = book.Worksheets[1];
            
            Range range = sheet.get_Range("A1");
            range = range.get_Resize(4, 2);
           
            /*获取Excel中的数据*/
            object _optionalValue = Missing.Value;
            object[,] objects = new object[4, 2];
            objects = range.get_Value(_optionalValue);

            /*插入数据*/
            Range rangeToInsert = sheet.get_Range("D1","E4");
            rangeToInsert.set_Value(_optionalValue,objects);
           
            /*保存*/
            //book.SaveAs("E:\\Test.xlsx ");
            /*退出*/
            //app.Quit();



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值