Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Processo di Excel nel taskmanager

    Ciao a tutti!

    Tramite la mia applicazione, se l'utente sceglie di esportare i dati (contenuti in un datagridview) in un foglio excel, allora l'applicazione riempie le celle di un nuovo foglio excel e fa visualizzare i dati aprendo quest'ultimo.
    La cosa strana è questa: al momento dell'apertura del foglio excel TRAMITE LA MIA APPLICAZIONE, nel taskmanager vedo un processo che si chiama "EXCEL.EXE". Quando l'utente chiude excel, il processo rimane li, nel takmanager.
    Se invece, apro excel selezionando quest'ultimo dai programmi di windows (NON UTILIZZANDO LA MIA APPLICAZIONE) visualizzo comunque il processo "EXCEL.EXE" nel taskmanager che poi però sparisce quando chiudo EXCEL!

    Nella mia applicazione ho provato con i metodi .Quit() o .Close() di ExcelApp ma il processo rimane li, nel taskmanager! Sbaglio qualcosa nel codice?

    codice:
       Public Shared Sub EsportaExcel(ByVal lista As Object, ByVal nomeFile As String)
    
            Dim I As Integer
            Dim J As Integer
            Dim ItemCount As Integer
            Dim ColumnCount As Integer
            Dim tipoOggetto As String = ""
    
            Dim ExcelApp As New Microsoft.Office.Interop.Excel.Application
            Dim FileExcel As Microsoft.Office.Interop.Excel.Workbook = ExcelApp.Workbooks.Add()
    		ExcelApp.SheetsInNewWorkbook = 1
            Dim FoglioExcel As Microsoft.Office.Interop.Excel.Worksheet = DirectCast(FileExcel.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)
            Dim intesta As Microsoft.Office.Interop.Excel.Range = Nothing
            Dim valori As Microsoft.Office.Interop.Excel.Range = Nothing
            Try
               ......TUTTE LE OPERAZIONI UTILI AL RIEMPIMENTO DELLE CELLE DI EXCEL
    		   ......(PROVATE E FUNZIONANTI)
    
                ExcelApp.DisplayAlerts = True
                ExcelApp.Visible = True
    
            Catch ex As Exception
                logger.error(ex.Message)
            Finally
            End Try
        End Sub

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa ... ma se non fai quit l'applicazione sarà sempre attiva ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Se faccio .Quit() esce da Excel ma non uccide il processo "EXCEL.EXE" nel taskmanager!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Metti il quit comunque e fai una prova ad eliminare tutte le linee inserite nel try, per intenderci quelle indicate da

    ......TUTTE LE OPERAZIONI UTILI AL RIEMPIMENTO DELLE CELLE DI EXCEL

    e controlla se c'è il problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Inoltre, credo che i wrapper delle interfacce COM implementino IDisposable, per cui alla fine del blocco chiama Dispose sui vari oggetti di Excel (o anche meglio, includili in un blocco Using).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6

    Moderazione

    Tra parentesi, manca il linguaggio di riferimento nel titolo, ora sistemo io, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Ho provato ad aggiungere il Quit(), ed eliminare quello che mi hai suggerito, ma il processo nel taskmanager non muore! Ho provato con dispose, ma non funge neanche quello!

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da giuse.dv
    Ho provato ad aggiungere il Quit(), ed eliminare quello che mi hai suggerito, ma il processo nel taskmanager non muore! Ho provato con dispose, ma non funge neanche quello!
    Come ti ha già detto MItaly, bisogna liberare TUTTE le risorse.

    Vedi questo progetto:

    VS2010 - Early-Late Binding in VB.NET con Excel
    http://nuke.vbcorner.net/Progetti/NE...T/Default.aspx



  9. #9
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ma usare Marshal.ReleaseComObject pare brutto?

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    7
    Scusate se riapro questa conversazione ma nn riesco ad uscirne...

    Imports System.Threading

    Public Class Form1 : Inherits Form

    Dim Trasferisci As Threading.Thread
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim Trasferisci As New Threading.Thread(AddressOf trasferisciSSC)
    Trasferisci.Start()
    End Sub

    Private Sub trasferisciSSC()

    Dim oExcel As Object
    oExcel = CreateObject("Excel.Application")
    Dim oBook As Object
    oBook = oExcel.Workbooks.Open("...\Test Kill Excel.xlsx")
    Dim osheet0 As Object
    osheet0 = oBook.Worksheets(1)

    osheet0.Activate()
    osheet0.Cells(1, 1).value = TextBox1.Text

    oBook.Close(SaveChanges:=True)
    osheet0 = Nothing
    oBook = Nothing
    oExcel = Nothing

    End Sub
    End Class
    Semgra tutto coì semplice, ma il processo Excel resta aperto..
    cosa ancora non ho distrutto?

    Vi prego Aiutooo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.