2016-03-21 3 views
0

У меня есть форма в VB.NET с .NET 4.5. У меня есть файл EXCEL, открытый бок о бок формы.Данные Live update в листе Excel из формы VB.NET

Я хочу видеть обновленные данные из кода LIVE в листе EXCEL. Но не могу видеть данные.

Ниже приведен код

Imports Microsoft.Office.Interop.Excel 
Public Class Form1 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    'Me.OpenFileDialog1.ShowDialog() 
    Dim xlApp As Application 
    Dim xlWorkBook As Workbook 
    Dim xlWorkSheet As Worksheet 

    xlApp = New ApplicationClass 
    'xlApp.ScreenUpdating = False 
    xlWorkBook = xlApp.Workbooks.Open("E:\BACKUP\TRY.xls") 
    xlWorkSheet = xlWorkBook.Worksheets("Sheet1") 
    'display the cells value B2 
    MsgBox(xlWorkSheet.Cells(8, 1).value) 'GETTING EXISTING VALUE OK 
    'edit the cell with new value 
    xlWorkSheet.Cells(2, 2) = "HI" 'WANT TO SEE THIS DATA BEING LIVE UPDATED 
    'xlWorkBook.Close() 'DONT WANT TO CLOSE THE OPENED SHEET/WORKBOOK 
    'xlApp.ScreenUpdating = True 
    xlApp.Quit() 

    releaseObject(xlApp) 
    releaseObject(xlWorkBook) 
    releaseObject(xlWorkSheet) 

End Sub 

Private Sub releaseObject(ByVal obj As Object) 
    Try 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
     obj = Nothing 
    Catch ex As Exception 
     obj = Nothing 
    Finally 
     GC.Collect() 
    End Try 
End Sub 
End Class 

ответ

1

В следующем примере основной преуспеть работа выполняется в модуле кода, объект рабочего листа, если лист был найден возвращается к абоненту, в этом случае кнопки формы мыши ,

Option Strict On 
Imports Excel = Microsoft.Office.Interop.Excel 
Imports Microsoft.Office 
Imports ST = System.Runtime.InteropServices 
Module OpenWorkSheets2 
    ''' <summary> 
    ''' Open file, activate sheet while keeping 
    ''' the excel file open 
    ''' </summary> 
    ''' <param name="FileName">Path and file name to open</param> 
    ''' <param name="SheetName">Worksheet to work with</param> 
    ''' <param name="FoundSheet">True indicates we are good to use the returned sheet object</param> 
    ''' <returns></returns> 
    ''' <remarks></remarks> 
    Public Function OpenExcel1(
     ByVal FileName As String, 
     ByVal SheetName As String, 
     ByRef FoundSheet As Boolean) As Excel.Worksheet 

     Dim xlApp As Excel.Application = Nothing 
     Dim xlWorkBooks As Excel.Workbooks = Nothing 
     Dim xlWorkBook As Excel.Workbook = Nothing 
     Dim xlWorkSheet As Excel.Worksheet = Nothing 
     Dim xlWorkSheets As Excel.Sheets = Nothing 

     xlApp = New Excel.Application 
     xlApp.DisplayAlerts = False 
     xlWorkBooks = xlApp.Workbooks 
     xlWorkBook = xlWorkBooks.Open(FileName) 
     xlApp.Visible = True 
     xlWorkSheets = xlWorkBook.Sheets 

     For x As Integer = 1 To xlWorkSheets.Count 
      xlWorkSheet = CType(xlWorkSheets(x), Excel.Worksheet) 

      If xlWorkSheet.Name = SheetName Then 
       xlWorkSheet.Activate() 
       FoundSheet = True 
       Exit For 
      End If 

      ST.Marshal.FinalReleaseComObject(xlWorkSheet) 
      xlWorkSheet = Nothing 
     Next 

     Return xlWorkSheet 

    End Function 
End Module 

Поместите следующий в верхней части формы

Imports Excel = Microsoft.Office.Interop.Excel 

Add для формирования переменного уровня

Private xlWorkSheet As Excel.Worksheet = Nothing 
Private Success As Boolean = False 

В случае нажатия кнопки вызова функции выше в качестве первого аргумента имя файла и путь, за которым следует имя листа, а затем перейдите в нашу переменную Success выше.

xlWorkSheet = OpenExcel1(
    IO.Path.Combine(Application.StartupPath, "Customers.xlsx"), 
    "Orders", 
    Success) 

Теперь, чтобы изменить стоимость ячейки и посмотреть ее вживую. Добавьте TextBox, поместите что-нибудь в него и вызовите его следующим образом. Обратите внимание, что адрес ячейки может быть тем, что вы хотите.

If Not String.IsNullOrWhiteSpace(TextBox1.Text) Then 
    If Me.Success Then 
     xlWorkSheet.Cells(2, 2) = TextBox1.Text 
    Else 
     MessageBox.Show("Failed") 
    End If 
Else 
    MessageBox.Show("Please enter a value") 
End If