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

輸出結果如下圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM