29 messaggi dal 03 marzo 2009
Ciao a tutti,
il seguente codice mi funziona perfettamente. Alla fine dell'esecuzione Excel.EXE si chiude.
Se tolgo il commento davanti alla LABEL5 il processo non si chiude più :-(
Praticamente se leggo da una a quattro tutto è a posto se ne leggo di più no.
Qualcuno sa dirmi perchè?

Grazie

Paolo

PS so che è una pratica deprecata, ma devo sistemare una cosa esistente.

Visual studio 2017 on Windows 10 with IIS Express e Office 2016

Sub LeggiFileXLS
Dim oApp As New Microsoft.Office.Interop.Excel.Application()
Dim oBooks As Microsoft.Office.Interop.Excel.Workbooks = oApp.Workbooks
Dim oBook As Microsoft.Office.Interop.Excel.Workbook = oBooks.Open("c:\temp\test.xlsx", False)
oApp.Visible = False
oApp.DisplayAlerts = False
Label1.Text = oBook.Sheets("test").range("E16").text
Label2.Text = oBook.Sheets("test").range("F16").text
Label3.Text = oBook.Sheets("test").range("G16").text
Label4.Text = oBook.Sheets("test").range("H16").text

'Label5.Text = oBook.Sheets("test").range("I16").text

oBook.Close(False)
NAR(oBook)
oBook = Nothing
oBooks.Close()
NAR(oBooks)
oBooks = Nothing
oApp.Quit()
NAR(oApp)
oApp = Nothing

GC.Collect()
GC.WaitForPendingFinalizers()

end sub

Private Sub NAR(ByVal o As Object)
Try
While (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0)
End While
Catch
Finally
o = Nothing
End Try
End Sub
29 messaggi dal 03 marzo 2009
In tutte le celle c'è lo stesso identico valore
29 messaggi dal 03 marzo 2009
Mi accontenterei anche di un modo brutale di killare il processo, ma:

Dim proc As System.Diagnostics.Process

For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL")
proc.Kill()
Next

funziona ma termina tutti i processi excel, cosa che non voglio, e:


Dim oApp As New Microsoft.Office.Interop.Excel.Application()
Dim processId As IntPtr
GetWindowThreadProcessId(oApp.Hwnd, processId)
Dim excelProcess As Process = Process.GetProcessById(processId.ToInt32())

........
excelProcess.Kill()

funziona bene sulla macchina di sviluppo, killa solo il processo excel aperto dall'app, ma non va sul server di produzione dove non ha diritti amministrativi per il Process.GetProcessById per conoscere l'ID del processo da uccidere.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
leggere le celle è molto più semplice usando la libreria NPOI, che non richiede un'installazione di Office.
Ecco un esempio:
https://stackoverflow.com/questions/5855813/npoi-how-to-read-file-using-npoi

PS so che è una pratica deprecata, ma devo sistemare una cosa esistente.

Puoi sostituire completamente il codice della Sub per usare NPOI, a meno che non ti sia stato espressamente vietato.

ciao,
Moreno
Modificato da BrightSoul il 11 febbraio 2018 20.09 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.