none
VB Net - Excel thread ? RRS feed

  • 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
    giovedì 24 novembre 2011 15:03

Risposte

Tutte le risposte

  • Ciao gwadafu,

    You wrote on 24/11/2011 :

    Any idea ?

    Questp è un forum in italiano.

    .m


    --
    blog @ //milestone.topics.it
    venerdì 25 novembre 2011 03:50
  • 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

    venerdì 25 novembre 2011 07:17
  • 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

    Italy
    venerdì 25 novembre 2011 13:37
  • Excel é invisibile ... ma anche fosse ... l'utente puo' aprire un'altra istanza di excel é causare il problema in oggetto
    venerdì 25 novembre 2011 13:46
  • 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

    Italy
    venerdì 25 novembre 2011 14:53
  • Mi sa che la domanda non é stata capita ...

    Comunque risolto utilizzando l'oggetto Worksheet

    Grazie :)

    • Contrassegnato come risposta gwadafu venerdì 25 novembre 2011 14:57
    venerdì 25 novembre 2011 14:56