Principale utente con più risposte
VB Net - Excel thread ?

Domanda
-
Ciao, ho una procedura che importa dati da Excel. Tipo:
Public Sub ImportExcel(sFileName As String) Dim xlsApp As New Microsoft.Office.Interop.Excel.Application Dim nRow As Integer = 2
xlsApp.Workbooks.Open(sFileName) Try While xlsApp.Range("A" & nRow).Text.ToString <> ""
/// CODICE IMPORT
nRow += 1 End While Catch ex As Exception MsgBox(ex.Message) Finally xlsApp.Workbooks.Close() xlsApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp) End Try
Se durante l'esecuzione della routine viene aperto Excel, la procedura procede l'elaborazione usando il file aperto e nono quello originale.Idee ?
Grazie
- Modificato gwadafu giovedì 24 novembre 2011 15:27
Risposte
Tutte le risposte
-
-
Non so perché ho scritto in inglese in effetti ... mai poi ho modificato in italiano, strano tu veda ancora in inglese... comunque:
Ciao, ho una procedura che importa dati da Excel. Tipo:
Public Sub ImportExcel(sFileName As String) Dim xlsApp As New Microsoft.Office.Interop.Excel.Application Dim nRow As Integer = 2
xlsApp.Workbooks.Open(sFileName) Try While xlsApp.Range("A" & nRow).Text.ToString <> ""
/// CODICE IMPORT
nRow += 1 End While Catch ex As Exception MsgBox(ex.Message) Finally xlsApp.Workbooks.Close() xlsApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp) End Try
Se durante l'esecuzione della routine viene aperto Excel, la procedura procede l'elaborazione usando il file aperto e nono quello originale.Idee ?
Grazie
-
ciao
il problema è che tu lasci Excel aperto, e quindi l'utente può utilizzarlo a proprio piacimento
devi nascondere la UI così solo il tuo codice potrà fare quello che vorrà su quel file
ovviamente all'uscita dovrai chiudere correttamente excel
xlsApp.Visible = false ' alla fine del processo: xlsApp.Quit()
Antonio Esposito
MCT, MCPD, MCTS, MCP
http://dotnetlombardia.org -
-
prova così:
Imports System.IO Imports System.Threading Module Module1 Sub Main() Dim ex = New Microsoft.Office.Interop.Excel.Application Dim fname = Path.Combine(My.Application.Info.DirectoryPath, "file.xlsx") Dim tempname = Path.GetTempFileName() + Path.GetExtension(fname) File.Copy(fname, tempname, True) ex.Visible = False ex.Workbooks.Open(fname) Thread.Sleep(10000) ex.Workbooks(1).Save() ex.Quit() File.Copy(tempname, fname, True) End Sub End Module
Antonio Esposito
MCT, MCPD, MCTS, MCP
http://dotnetlombardia.org -