環境: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
輸出結果如下圖

