-
VB.net使用Microsoft.Office.Interop.Excel对Excel进行简单的读取和写入
环境:Visual Stadio 2017 .NET Framework 4.6.1
1.直接进入正题,新建一个控制台程序,右键引用-管理Nuget程序包,搜索Microsoft.Office.Interop.Excel并安装至Packages
2.打开Module1.vb,在主函数中调用dll内的类和方法,主要功能是读取excel中第二行开始每行的单元格的内容,并打印到控制台。
excel内容如下图
代码如下
Sub Main() Dim ExlApp As Microsoft.Office.Interop.Excel.Application Dim ExlBook As Microsoft.Office.Interop.Excel.Workbook Dim ExlSheet As Microsoft.Office.Interop.Excel.Worksheet Dim strFilePath As String = "D:/2020.12考勤.xlsx" ExlApp = New Microsoft.Office.Interop.Excel.Application If Not FileIO.FileSystem.FileExists(strFilePath) Then Console.WriteLine("找不到文件。") Else ExlBook = ExlApp.Workbooks.Open(strFilePath) ExlSheet = ExlBook.Worksheets("Sheet1") Dim row As Integer row = ExlSheet.UsedRange.Rows.Count Dim a, b, c, d, e, f, g For i = 2 To row a = ExlSheet.Cells(i, 1).value b = ExlSheet.Cells(i, 2).value c = ExlSheet.Cells(i, 3).value d = ExlSheet.Range($"D{i}").Text e = ExlSheet.Range($"E{i}").Text f = ExlSheet.Range($"F{i}").Text g = ExlSheet.Cells(i, 7).value If Not a = Nothing Then Console.WriteLine($"工号:{a} 姓名:{b} 部门:{c} 日期:{d} 上班时间:{e} 下班时间:{f} 出勤状况:{g}") End If Next ExlBook.Close() ExlApp.Quit() End If Console.Read() End Sub
其中
ExlApp为Application对象,即Excel本身;
ExlBook为workbooks对象集,指Excel的工作簿文件;
ExlSheet为worksheets对象集,表示的是Excel的一个工作表;
Cells和Range对象,指向Excel工作表中的单元格(Range也可用于指代单元区域:某一单元格、某一单元格区域、某一行、某一列、或者是多个连续或非连续的区域组成的区域)。
另外,Excel中D列、E列和F列为时间格式,用Cell(i,j).value的方法会出现一些问题,稍后解释,此处用Range(列名).Text替代之。
先来看看运行效果,结果如下图:
3.插入数据功能
代码如下
Private Sub InsertRow() Dim myWorkExl As Microsoft.Office.Interop.Excel.Application Dim ExlBook As Microsoft.Office.Interop.Excel.Workbook Dim ExlSheet As Microsoft.Office.Interop.Excel.Worksheet myWorkExl = CreateObject("Excel.application") myWorkExl.Visible = True ExlBook = myWorkExl.Workbooks().Open("D:/myWorkExl.xlsx") ExlSheet = ExlBook.Worksheets(1) ExlSheet.Activate() myWorkExl.Cells(1, 1) = 1 myWorkExl.Cells(1, 2) = 2 myWorkExl.Cells(1, 3) = "3" myWorkExl.Cells(1, 4) = "4" myWorkExl.Range("E1").Value = Format(Now, "HH:mm:ss") ExlBook.Save() ExlBook.Close() myWorkExl.Quit() End Sub
效果如下图
4.Cell和Range,前面提到的如果用Cell()方法读取特殊格式的值,比如时间会显示成小数,这不是我们所要的。这里有两种解决办法
- 第一种是用Range().Text代替
- 第二种,从excel中读取到的小数其实也能转化为时间,需要一些操作,以上面的9:00:00为例,从excel中读取到的值为0.375
Private Sub Text() Dim temp1 As Double temp1 = 0.375 Dim temp2 As Double temp2 = temp1 * 86400 Dim temp3 temp3 = Format(DateAdd("s", CDec(temp2), "00:00:00"), "HH:mm:ss") Console.WriteLine($"原始数据为:{temp1}") Console.WriteLine($"换算后为:{temp2}") Console.WriteLine($"最终结果为:{temp3}") Console.Read() End Sub
输出结果如下图
出处:https://www.cnblogs.com/YKAndXLL520/p/14283222.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式