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

输出结果如下图

能量条详解
建国、二狗、五姑娘 日本明星的中文昵称知多少【12】