环境: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

输出结果如下图

VB.net使用Microsoft.Office.Interop.Excel对Excel进行简单的读取和写入的更多相关文章

  1. C# Microsoft.Office.Interop.Owc11 导出excel文件

    C# Microsoft.Office.Interop.Owc11 导出excel文件 1.新建项SupremeWindowsForms窗体应用项目(项目平台设置称X86) 注意:因为大多数第三方写的 ...

  2. Microsoft.Office.Interop.Excel的用法以及利用Microsoft.Office.Interop.Excel将web页面转成PDF

    1.常见用法           using Microsoft.Office.Interop.Excel; 1)新建一个Excel ApplicationClass ExcelApp = New A ...

  3. 引用Microsoft.Office.Interop.Excel出现的问题

    引用Microsoft.Office.Interop.Excel出现的问题   转自:http://www.hccar.com/Content,2008,6,11,75.aspx,作者:方继祥 操作背 ...

  4. Microsoft.Office.Interop.Excel操作Excel文件时出现的问题及解决方案

    问题描述: Microsoft.Office.Interop.Excel.Worksheet 打不开文件 Microsoft Office Excel 不能访问文件"a.xls". ...

  5. Microsoft.Office.Interop.Excel 程序集引用 ,Microsoft.Office.Interop.Excel.ApplicationClass 无法嵌入互操作类型

    using Microsoft.Office.Interop.Excel   添加程序集引用 方法:在引用--程序集--扩展中,添加引用Microsoft.Office.Interop.Excel,此 ...

  6. 利用Microsoft.Office.Interop.Excel 将web页面转成PDF

    网上有很多将Web页面转成PDF的方法,还有许多收费的第三方插件.其实利用Office 自带的将EXCEL发布成PDF的功能就可以实现,如果你的需求没有多复杂,可以采用笔者的方法. 首先将web页面h ...

  7. Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决)

    Microsoft.Office.Interop.Excel, Version=12.0.0.0版本高于引用的程序集(已解决) 论坛里的帮助:http://bbs.csdn.net/topics/39 ...

  8. 无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口

    解决 把Microsoft.Office.Interop.Excel.DLL的嵌入互操作类型改为ture就可以了

  9. 解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel。。

    .NET错误提示:未能加载文件或程序集“Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToke ...

随机推荐

  1. css-theme 通过一套源码生成一份包含多套皮肤配置的样式文件

    css-theme 通过单一css文件生成多套主题,并合并入一个css文件中 特性 只加载一个css,通过切换rootClass瞬间切换主题 体积压缩,将多套css合并,去除冗余代码,避免文件体积膨胀 ...

  2. 【Android Studio】Gradle统一管理版本号引用配置

    1.在根目录下的build.gradle文件下添加 ext{ .... } 中的内容 ...... // Define versions in a single place ext { // SDK ...

  3. CCF201712-2游戏

    问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,--,1号小朋友坐在n号小朋友的顺时针方向. 游戏开始,从1号小朋 ...

  4. [MySQL]IP处理函数inet_aton()和inet_ntoa()

    INET_ATON(expr) 给出一个作为字符串的网络地址的"点地址"(如127.0.0.1)表示,返回一个代表该地址数值的整数.地址可以是4或8比特地址. mysql> ...

  5. 基于express框架的留言板实现步骤

    这个留言板是基于express框架,和ejs模板引擎,首先需要在根目录安装express框架,然后安装ejs模块和body-parser(获取用户表单提交的数据):建立项目目录 message,然后依 ...

  6. 常见的JVM 面试题

    1.讲一讲JVM的跨平台与跨语言 跨平台 我们写的一个类,在不同的操作系统上(Linux.windows.Mac OS)执行,效果是一样的.这就是JVM的跨平台性. 跨语言 JVM只识别字节码,JVM ...

  7. jupyter notebook 调用.py文件

    方法1.利用 %run xx.py 直接运行得出结果. 方法2:利用 %load xx.py 载入代码再点击Run运行,这种方法的好处是可以方便修改代码. 说明: Jupyter Notebook中以 ...

  8. Linux利用crontab创建计划任务详解

    crontab 周期性计划任务 cron是Linux下的定时执行工具,可以在无需人工干预的情况下运行作业. 当需要周期性地重复执行任务时可以使用cron服务:该服务每分钟检查一次,并执行符合条件的任务 ...

  9. For-Each循环(增强型For循环)

    public class Demo077 { public static void main(String[] args) { int[] array ={11,2}; System.out.prin ...

  10. Java实现平滑加权轮询算法--降权和提权

    上一篇讲了普通轮询.加权轮询的两种实现方式,重点讲了平滑加权轮询算法,并在文末留下了悬念:节点出现分配失败时降低有效权重值:成功时提高有效权重值(但不能大于weight值). 本文在平滑加权轮询算法的 ...