Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Conversione da .xls a .csv ottimizzata

    Salve a tutti ragazzi,
    sto sviluppando un tool per la conversione da .xls a .csv e fin qui tutto bene.
    Ho notato che la procedura risulta particolarmente lenta, perchè vado a scorrermi anche le celle vuote.
    Come potrei velocizzare il tutto secondo voi?
    grazie.

    Marco

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Hai scritto tutto meno che le informazioni più importanti.

    - Linguaggio
    - codice

  3. #3
    Originariamente inviato da gibra
    Hai scritto tutto meno che le informazioni più importanti.

    - Linguaggio
    - codice
    confidavo in un vostro esempio :-D
    comunque il linguaggio vb.net o c# è indifferente

  4. #4
    ecco il codice:

    codice:
    Public Shared Function WriteSystemArray(ByVal wsIndex As Integer, ByVal rowIndex As Long, ByVal colIndex As Long, ByVal value As System.Array) As Integer
    
            
    
            For x As Integer = value.GetLowerBound(0) To value.GetUpperBound(0)
                For y As Integer = value.GetLowerBound(1) To value.GetUpperBound(1)
                    If ColonnaVuota(value, y) = False Then
                        DirectCast(_ws(wsIndex).Cells(rowIndex + x, colIndex + y), Excel.Range).Value = value(x, y)
                    End If
                Next y
            Next x
    
            Return 0
        End Function
    
    Public Shared Function ColonnaVuota(ByVal matrix As System.Array, ByVal ColNum As Integer) As Boolean
            Dim contaVuoti As Integer = 0
            Dim contaTutti As Integer = 0
    
            For x As Integer = matrix.GetLowerBound(0) To matrix.GetUpperBound(0)
                If Trim(matrix(x, ColNum)) = "" Then
                    contaVuoti += 1
                End If
                contaTutti += 1
            Next
            If contaTutti = contaVuoti Then
                Return True
            Else
                Return False
            End If
        End Function
    _ws è il worksheet.

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Se ho capito bene, tu stai eseguendo 2 cicli annidati:

    -> per ogni colonna (X)
    ----> per ogni riga (Y)
    --------> leggi la cella (X,Y)

    per ottenere il contenuto di ogni singola cella.


    Ma la routine ColonnaVuota(), essendo nel ciclo interno verrà eseguita NON solo quando cambi colonna, ma anche quando cambi riga. La cosa non ha senso, perchè alla prima RIGA di una colonna sai già se la colonna è vuota o no, è inutile ripetere per ogni riga la routine ColonnaVuota().

    Per cui basta eseguirla al ciclo esterno, ovvero
    -> Per ogni colonna (X)
    ---Se la ColonnaVuota = False
    ----> Per ogni riga (Y)
    --------> leggi la cella (X,Y)
    ---Altrimenti passa alla colonna (X) successiva

    Chissà se mi sento spiegato bene...


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.