.NET操作Excel表格的整理
首先需要引用一个COM引用: Microsoft Excel 11.0 Object Library. 在程序代码中添加命名空间Microsoft.Office.Interop.Excel的引用. 然后就可以跟Excel进行操作了.
基本的Excel对象
Application: 每个Application对象表示一个Excel程序, 在程序中每创建一个该对象就启动Excel程序的一个实例
Workbook: 每个Workbook对象表示一个Excel工作薄, 在同一个Excel程序中可以打开多个工作薄
Worksheet: 每个Worksheet对象表示一个Excle工作表, 在同一个Excel工作薄中可以打开多个工作表
Range: 每个Range对象表示Excel工作表上的一个区域, 该区域可以是一个单元格, 也可以是多个单元格的组合. 区域可以是连续的, 也可以是离散的
简单的代码实现对Excel的操作
1 2 3 4 5 6 7 8 | private void button1_click( object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application app1 = new Microsoft.Office.Interop.Excel.Application(); app1.visible = true ; Workbook book1 = app1.Workbooks.Add(Type.Missing); Wroksheet sheet1 = (Worksheet)book1.Sheets[1]; Range rng1 = sheet1.get_Range( "A1" , Type.Missing); rng.Value2 = "hello" ; } |
这样点击按钮之后就会发现新建了一个Excel, 这个Excel里有一个表格, 在A1的单元格里显示文本hello.
Workbook book1 = app1.Workbooks.Add(Type.Missing); |
除了Add这个方法外, 如果想打开一个已经存在的表格, 并对它进行操作, 可以使用Open方法.
获取区域值的方法, 返回的是一个Object类型的数组:
1 2 3 4 5 6 | sheet1.get_Range( "B2" , Type.Missing); //返回B2单元格 sheet1.get_Range( "A1:C10" , Type.Missing); //返回左上角A1到右下角C10区域单元格 sheet1.get_Range( "A1" , "C10); //和上一行效果一样(左上角A1到右下角C10区域单元格) sheet1.get_Range( "A:A" , Type.Missing); //返回整个A列 sheet1.get_Range( "A:C" , Type.Missing); //返回A到C列 sheet1.get_Range( "3:3" , Type.Missing); //返回A到C列 sheet1.get_Range( "A1:A5, C1:C5" , Type.Missing); //返回两个独立的区域 |
除了获取一个区域的值, 获得单个单元格值的方法:
1 2 | Range rng1 = (Range)sheet1.Cells[1, 1]; //获取A1单元格 Range rng2 = (Range)sheet1.Cells[3, "C]; //获取C3单元格 Range rng3 = (Range)sheet1.Cells[2, Type.Missing]; //获取B1单元格 |
Range对象除了Value2属性, 还有Value属性, 只有当涉及日期和货币格式才使用这个属性. 否则, 为保持程序简洁和一致性, 应该使用Value2属性.
Range对象还有个只读属性: Text, 该属性虽然是Object类型的, 但所有值类型都是按文本方式进行处理的. 所以在使用这个Text属性时, 如果已经确定这个文本的数据类型时, 可以使用Parse方法把文本转变成该数据类型. 如果不能确定, 则可以使用TryParse方法.
除此之外, Range对象中如果某个或某些单元格的值全为数字, 而我们不想按数字来处理这些值, 想把它转变成文本或是其它格式. 可以使用Range的NumberFormat属性.
操作Excel表格, 还有个专门的控件叫做SpreedSheet控件, 不过在我做东西的时候, 想把日期格式的数据正确显示在这个控件中出现了不少问题, 最后还是舍弃了使用这个控件. 最后还是选择了比较常见的DataGridView -_-
作者:Create Chen
出处:http://technology.cnblogs.com
说明:文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库