Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39
  1. #1
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212

    Proprietà Range di oggetti Excel

    allora, inserisco nella mia applicazione un riferimento all'oggetto COM di Excel, mi creo Applicazione, WorkBook, WorkSheet e comincio lavorare. Mi spiegate perchè se uso la proprietà Range dell'oggetto WorkSheet per modificare alcune celle quando chiudo tutti gli oggetti mi rimane un riferimento in memoria dell'istanza di excel?

    Premetto:

    Salvo il foglio (che mi viene visualizzato correttamente, così come l'ho creato da codice)

    Chiudo correttamente ogni singolo oggetto in ordine

    Li setto a nothing

    Ma lui se ne sbatte .


    Ho forzato anche la garbage collection (VB.NET) ma niente, se elimino la riga di codice che mi imposta, per esempio, un range di celle con il font bold e funziona correttamente. Uso il range di celle e mi resta in memoria l'istanza

    va bene anche un solo conforto morale

    :esaurito:

  2. #2
    Utente bannato
    Registrato dal
    Jan 2000
    Messaggi
    360
    McAuriel V ma tu mi sembra che rombi un po' troppo...per caso sei un cristiano convintissimoooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooo??

    ogni volta che uno scrive una parolaccia tu dici:

    le parolacce...


    non si scrivono!

    per questo.. niente risposta
    ma smettila siamo nel 2002

  3. #3
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    INCREDIBILE!

    ho capito cos'è che non gli garba!

    Se faccio riferimento ad un range di celle così:
    codice:
    xlWorkSheet.Range("A1","B10").Font.Bold=True
    allora funziona (nel senso che quando chiudo mi scarica il processo dalla memoria, mentre se mi azzardo aparametrizzare tipo
    codice:
    Dim Riga as Integer = 9
    xlWorkSheet.Range("A1","B" & Riga+1).Font.Bold=True
    mi rimane il processo in memoria!

    Cmq devo capire il perchè, non è possibile, altrimenti scrivo a Bill direttamente!

    @ McAuriel:
    Parolacce a parte cosa mi avresti risposto?
    (ammesso che avevi una risposta valida)

  4. #4
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    [scandalizzato]
    OH My God! come faro' a rispondere in un 3d con sto' titolo!
    [/scandalizzato]
    :tiratadorecchie:

    [chisenefrega]
    Hai provato a creare due stringhe con le coordinate delle celle e poi passarle al metodo range?
    in questo senso intendo:
    codice:
    Dim Riga as Integer = 9
    dim X    as string
    dim Y    as string
    X="A1"
    Y="B" & cstr(Riga+1)
    xlWorkSheet.Range(x,y).Font.Bold=True
    oppure
    codice:
    Dim Riga as Integer = 9
    xlWorkSheet.Range("A1","B" & cstr(Riga+1)).Font.Bold=True
    [/chisenefrega]
    ...and I miss you...like the deserts miss the rain...

  5. #5
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    vonkranz è bestiale, non riesco a capire da cosa possa dipendere.

    QUALSIASI forma parametrizzata utilizzo mi resta il processo in memoria!

    Ho provato di tutto, anche quello che mi hai suggerito, ma niente da fare!

    non capisco cosa possa condizionare così l'applicazione.....

    Aspettiamo il lampo và


  6. #6
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Che versione di Excel usi?

    Era capitata anche a me una cosa del genere (XL 97) ma mettendo a nothing tutti gli oggetti era andata a posto.

    Cmq se viene generato un errore imprevisto (soprattutto in Debug) o se viene interrotto in modo anomalo, l'istanza di XL resta in memoria anche se riesci a vederla sono con il TaskManager (hai notato che sembra "sospesa nel limbo": non e' attivabile, non ci puoi switchare sopra..... boh? e' li' e basta! ).

    E provare a rancarla via con qualche API?
    Se l'API ti trova il processo attivo, forse riesci anche a terminarlo.
    Se l'API non lo trova, forse la visualizzazione e' soltanto un errore del TaskManager.
    ...and I miss you...like the deserts miss the rain...

  7. #7
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    la versione di excel è la 2002 (Office XP) ma non dovrebbe essere rilevante.

    Il processo lo vedo nel task manager ma l'applicazione non mi da nessun errore.

    Se provo ad aprire excel mi resta in loop senza aprirsi finche non termino il processo.
    Sarebbe assurdo chiamare una API per terminare il processo, DEVE chiuderlo da programma!

    La cosa che non capisco è perchè se NON parametrizzo la chiamata funziona tutto e se la parametrizzo mi resta il processo in memoria?

    Fai conto che chiamo la Garbage Collection appena termino il lavoro ma non cambia nulla.

    Se chiudo l'applicazione, il processo viene scaricato (cosa che non faceva VB6, ma evidentemente hanno ottimizzato la gestione della memoria in VB.NET)

  8. #8
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    tu come lo interpreti?

    codice:
        Option Strict On
        Option Explicit On 
    
    ...
    
        Dim xlApp As Excel.Application
        Dim xlWB As Excel.Workbook
        Dim xlWS As Excel.Worksheet
    
    ...
    
        Sub TestDataSet()
            Me.Cursor = Cursors.WaitCursor
    
            'instanzio l'oggetto
            xlApp = New Excel.Application()
            xlApp.Visible = False
            xlApp.DisplayAlerts = False
    
            'creo il WorkBook
            xlWB = xlApp.Workbooks.Add
    
            'creo il WorkSheet
            xlWS = CType(xlWB.ActiveSheet, Excel.Worksheet)
    
            'riempio il dataset con i valori della tabella
            SqlDataAdapter1.Fill(Me.DataSet11)
    
            'scrivo le celle con i valori del dataset
            Dim riga As Integer = 0
            For riga = 0 To Me.DataSet11.Articoli.Rows.Count - 1
                xlWS.Cells(riga + 1, 1) = Me.DataSet11.Articoli(riga).CodArt
                xlWS.Cells(riga + 1, 2) = Me.DataSet11.Articoli(riga).DescArt
                xlWS.Cells(riga + 1, 3) = Me.DataSet11.Articoli(riga).DataA
                xlWS.Cells(riga + 1, 4) = Me.DataSet11.Articoli(riga).Prezzo
            Next riga
    
            'non funziona
            'Dim x, y As String
            'x = "A1" : y = "D" & riga + 1
            'xlWS.Range(x, y).Font.Bold = True
    
            'non funziona
            'xlWS.Range("A1", "D" & riga + 1).Font.Bold = True
    
            'funziona
            xlWS.Range("A1", "D4").Font.Bold = True
    
            xlWB.Close(True, "c:\test1.xls")
            xlWS = Nothing
            xlWB = Nothing
            xlApp.Quit()
            xlApp = Nothing
    
            'Chiamo la Garbage Collection
            GC.Collect()
            Me.Cursor = Cursors.Default
            Beep()
        End Sub
    Considera che ho anche provato il codice che mi hai postato

    Mah!?!?

  9. #9
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Prova a mettere le dichiarazioni
    codice:
    Dim xlApp As Excel.Application
    Dim xlWB As Excel.Workbook
    Dim xlWS As Excel.Worksheet
    all'interno della Sub TestDataSet.

    Forse istanziando in modo ritardato fa qualche casino con i riferimenti in memoria, e al momento dell'impostazione a Nothing non riesce a risolvere l'assegnazione.

    Secondo me lo stesso discorso vale per il passaggio "secco" dei parametri (attraverso l'assegnazione a variabili rientriamo nel discorso di cui sopra per via dei puntatori alle locazioni delle variabili).

    Oppure + semplicemente ti resta attivo qualche oggetto collegato ai vari Application, WorkBook, WorkSheet ecc. ecc. (anche se non mi pare )

    Visto cosi' il codice che hai postato va + che bene.
    Hai provato anche con:

    codice:
    xlWS.Range("A1", "D" & Cstr(riga + 1)).Font.Bold = True
    ...and I miss you...like the deserts miss the rain...

  10. #10
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    porca pupazza! niente da fare!


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.