vb.net不能读取excel表格,如果表格是首先打开的

我的工作簿是在我的表单加载之前打开的。

在Excel中使用VBA,这个代码工作没有缺陷:

wbListPath = "C:\WAREHOUSE CONTROL ----- DO NOT DELETE\" wbListName = "WAREHOUSE CONTROL FORM ----- DO NOT DELETE.xlsm" Set wbList = Application.Workbooks("WAREHOUSE CONTROL FORM ----- DO NOT DELETE.xlsm") If Not BookOpen(wbList.Sheets("Directories").Cells(15, 3)) Then ' inventory master wb2 = Workbooks.Open(wbList.Sheets("Directories").Cells(15, 2) & wbList.Sheets("Directories").Cells(15, 3)) 'Cambridge Master Else wbLkup = wbList.Sheets("Directories").Cells(15, 3).Text Set wb2 = Application.Workbooks(wbLkup) End If Function BookOpen(strBookName As String) As Boolean Dim oBk As Workbook On Error Resume Next Set oBk = Workbooks(strBookName) On Error GoTo 0 If oBk Is Nothing Then BookOpen = False Else BookOpen = True End If End Function 

切换到vb.net,我不能得到任何代码来检测工作簿已经打开之前运行form1,最近我能find的是这样的:

 Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click Dim WorkBookNames() As String = {TextBox1.Text, TextBox1.Text & " [Compatibility Mode]", "Microsoft Excel - 001 Phone List [Compatibility Mode]"} exPhone = ChkNOpenWB(exPhone, WorkBookNames, TextBox12.Text) excelApp.Visible = True End Sub Function ChkNOpenWB(bookName As Workbook, WorkBookNames() As String, path As String) As Workbook Dim openFlag As Boolean = True For Each p As System.Diagnostics.Process In System.Diagnostics.Process.GetProcesses() If p.ProcessName = "EXCEL" Then For Each excelFile As String In WorkBookNames If p.MainWindowTitle.Contains(excelFile) Then bookName = GetObject(TextBox12.Text & "\" & TextBox1.Text) bookName.RefreshAll() openFlag = False End If Next End If Next If (openFlag) Then bookName = excelApp.Workbooks.Open(TextBox12.Text & "\" & TextBox1.Text, ReadOnly:=False) bookName.Activate() End If Return (bookName) End Function 

你也可以使用编组。 这看起来是否已经打开工作簿。 如果不是,则打开它。 如果已经打开,则将工作簿分配给variables。

  Dim exApp AS Excel.Application = New Excel.Application Dim wb as excel.Workbook Dim exSheet As Excel.Worksheet = Nothing exApp.Visible = True wb = System.Runtime.InteropServices.Marshal.BindToMoniker(FileNamePath) exApp = wb.Parent 'lets see it exApp.Visible = True exApp.Windows(1).Visible = True Dim tSheet As Excel.Worksheet = exApp.ActiveWorkbook.Sheets.Item(1) 

你可以检查文件是否可以打开写入。 如果在Excel中打开,则检查将失败。

 Public Shared Function FileInUse(ByVal Filename As String) As Boolean Dim thisFileInUse As Boolean = False If System.IO.File.Exists(Filename) Then Try Using f As New IO.FileStream(Filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None) thisFileInUse = False End Using Catch thisFileInUse = True End Try End If Return thisFileInUse End Function