Italian per farla breve

giannimaione

Well-Known Member
Licensed User
Longtime User
per farla breve, descrivo con un semplice esempio:

ho un foglio excel, con un numero di colonne indefinito e un numero di righe indefinito;
devo stampare TUTTO il contenuto del foglio excel, con queste condizioni:
ogni foglio in formato A4 ha un numero di colonne predefinito (esempio 11 colonne con uguale ampiezza) e un numero di righe predefinito (esempio 40 righe con uguale altezza);

considerazioni:
il foglio excel ha un numero di colonne non definito
il foglio excel ha un numero di righe non definito

ogni foglio A4 ha un numero di colonne fisse (11) e un numero di righe fisse (40);
un foglio excel potrebbe essere composto (per esempio) da 18 colonne e 15 righe,
oppure da 27 colonne e 4 righe, e via dicendo;

vorrei eseguire con B4X, alcuni cicli for ... next che mi permettono di "spezzettare" TUTTO il foglio excel, in modo da ottenere tanti fogli A4 (a secondo dei dati contenuti in excel), con le condizioni appena descritte;
 

Star-Dust

Expert
Licensed User
Longtime User
CHATGPT (ovviamente sarà da aggiustare)

Per ottenere un output stampabile suddiviso in fogli A4 con un numero fisso di colonne e righe, è necessario creare un algoritmo che:

1. Legga tutti i dati dell'Excel.
2. Iteri sulle righe e colonne in modo da estrarre blocchi di 11 colonne e 40 righe alla volta.
3. Crei una nuova "pagina" per ciascun blocco ottenuto.

Ecco un esempio di codice in **B4X** che realizza questa suddivisione e stampa i dati in blocchi di 11 colonne per 40 righe.

### Passaggi

1. **Impostazione**: Carica i dati Excel e ottieni il numero totale di righe e colonne.
2. **Suddivisione**: Usa dei cicli `For ... Next` per iterare sulle righe e colonne in base ai limiti della pagina.
3. **Stampa**: Creare un "foglio" virtuale con i dati del blocco corrente.

Ecco un esempio di codice che puoi adattare:

B4X:
Sub ProcessExcelSheetToA4(excelSheet As List)
    ' Definire le dimensioni della pagina A4
    Dim maxColPerPage As Int = 11
    Dim maxRowPerPage As Int = 40
 
    ' Ottieni il numero totale di righe e colonne
    Dim totalRows As Int = excelSheet.Size
    Dim totalCols As Int = excelSheet.Get(0).Size
 
    ' Inizia a dividere in blocchi
    Dim currentPage As Int = 1
 
    For rowStart = 0 To totalRows - 1 Step maxRowPerPage
        For colStart = 0 To totalCols - 1 Step maxColPerPage
         
            ' Crea una nuova pagina A4 con i dati del blocco corrente
            Dim pageData As List
            pageData.Initialize
         
            ' Aggiungi 40 righe alla pagina corrente (o le rimanenti se meno di 40)
            For row = rowStart To Min(rowStart + maxRowPerPage - 1, totalRows - 1)
                Dim rowData As List
                rowData.Initialize
             
                ' Aggiungi 11 colonne alla riga corrente (o le rimanenti se meno di 11)
                For col = colStart To Min(colStart + maxColPerPage - 1, totalCols - 1)
                    rowData.Add(excelSheet.Get(row).Get(col))
                Next
             
                pageData.Add(rowData)
            Next
         
            ' Stampa o salva la pagina A4
            Log("Pagina A4 #" & currentPage)
            PrintPage(pageData)
            currentPage = currentPage + 1
        Next
    Next
End Sub

Sub PrintPage(pageData As List)
    ' Funzione per stampare i dati della pagina A4
    For Each row As List In pageData
        Dim rowText As String = ""
        For Each cell In row
            rowText = rowText & cell & "    " ' Spaziatura per separare le celle
        Next
        Log(rowText)
    Next
    Log("---- Fine Pagina ----")
End Sub

### Spiegazione del Codice

- **Impostazioni delle dimensioni della pagina**: `maxColPerPage` e `maxRowPerPage` sono le dimensioni fisse della tua pagina A4 (11 colonne e 40 righe).
- **Loop esterno `For ... Next`**: si usa per partire da ogni blocco iniziale di riga e colonna (`rowStart` e `colStart`).
- **Estrazione dei blocchi**:
- All’interno del ciclo, il codice estrae i dati per ogni blocco (pagina) di 11 colonne per 40 righe.
- I metodi `Min(rowStart + maxRowPerPage - 1, totalRows - 1)` e `Min(colStart + maxColPerPage - 1, totalCols - 1)` sono usati per evitare di eccedere i limiti dell'array se ci sono meno righe o colonne rimanenti.
- **Stampa della pagina**: La funzione `PrintPage` simula la stampa del blocco attuale.

### Adattamento per la Stampa Effettiva

Se hai bisogno di stampare le pagine A4 in un formato di file o direttamente su carta, sostituisci il codice di `Log` con funzioni di esportazione o di stampa effettiva, come l'uso di librerie che supportano la stampa in PDF o la stampa diretta in B4X.

### Note Finali

Questa soluzione è flessibile per qualsiasi numero di colonne e righe nel file Excel e assicura che ogni blocco sia organizzato e limitato a 11 colonne e 40 righe per pagina.
 
Top