Scripting con file xlsx

xlsx.tabs

E’ possibile definire un intero report o parti di esso all’interno di file xlsx.

Il metodo xlsx.tabs permette di caricare un file di definizione del report in formato xlsx. Può essere usato più volte e in qualsiasi punto dello script.

Argomenti:

  • filename: nome del file xlsx
  • sheet => "sheetname": nome del foglio, se non specificato verranno processati tutti i fogli
  • sections => true|false: true i nomi dei fogli vengono usati come nome delle sezioni (default); false non genera i comandi section. I nomi dei fogli che inziano per underscore (_) vengono ignorati
  • section => "Section name": il nome della sezione se specificato un solo foglio
  • action => :syntax|:execute: :syntax genera la sintassi nella finestra di log (default); :execute esegue la sintassi
1
2
 xlsx.tabs "tables_def", sheet: "Sezione 2", :sections => false
 xlsx.tabs "tables_def", action: :execute

Struttura del file xlsx

La funzione autotab di pTabs2 può produrre un file xlsx con la definizione delle tavole e le colonne corrette aggiungendo il parametro :xlsx:

1
autotab :xlsx => "nomefile"

In alternativa o a integrazione di tale file può essere utile utilizzare una tabella che contiene la descrizione delle variabili del file di dati, cioè il nome delle variabili, i codici e le etichette. pTabs2 può produrre una tabella di questo tipo con l’istruzione:

1
xlsx.save 'bozza', :sheets => :codebook

Per ciascuna variabile è possibile aggiungere e modificare le informazioni necessarie per produrre la tavola. Le righe dei livelli possono essere eliminate o lasciate per permettere l’indicazione di pesi, livelli o la modifica delle etichette. Inoltre possono essere aggiunte nuove righe per specificare ulteriori istruzioni.

Colonne della tabella

  • var o name: nome della variabile o lista delle variabili (le liste possono essere inserite anche utilizzando la funzione s)
  • code: codice del livello
  • w: peso del livello
  • missing elenco dei valori missing
  • label: etichetta della variabile o dei livelli. Se valorizzata, verrà prodotta un’istruzione per l’inserimento/modifica dell’etichetta
  • cmd: tipo tabella o istruzione ptabs. Oltre ai tipi di tabelle (cat, ord, md, scale, ecc.) è possibile specificare le seguenti istruzioni:
    • weight: se il campo var contiene un valore produrrà l’istruzione weight! nomevar, altrimenti disattiverà la ponderazione: weight_
    • syn: inserisce nello script il contenuto dei campi syntax# (se il campo syntax contiene un valore è possibile lasciare vuota la colomma cmd)
    • istruzioni pTabs2: l’istruzione verrà unita al contenuto del campo syntax
    • +: unisce la definizione alla riga precedente (per esempio: la seconda variabile di una ord, le variabili di una md)
    • -: nelle md unisce la definizione alla riga precedente segnalando che la variabile è da considerare come mancata risposta
    • #: il tesrto contenuto nella colonna title sarà riportato nel log come commento
  • syntax: blocco esplicito di istruzioni pTabs
    • Più righe possono essere inserite in nuove colonne syntax# (syntax0 .. syntax99) oppure andando a capo (ALT+ENTER) nella spessa cella.
    • Se specificate in corrispondenza di una tabella, le istruzioni saranno inserite nel blocco (do ... end) della tabella.
  • title: titolo tabella
  • net: net
  • panel: identificativo pannello: numero_pannello.posizione_variabile
  • skip: ignora la riga

Nota

L’ordine delle colonne non è rilevante.
Nessuna colonna deve essere necessariamente presente.
La tabella può contenere altre colonne che verranno ignorate da pTabs.
La tabella può contenere righe senza istruzioni che verranno ignorate da pTabs.

Foglio: “_campio”

var code w missing label cmd syntax title net panel skip
peso         weight          

        serr!          

        net_pos :bottom        

        camp   CAMPIONE      
ser_no                    
sesso                 1.2  
eta         ord   Tabella Eta’   1.1  
etaq         +          
area                 1.3  

Foglio: “Sezione 1”

var code w missing label cmd syntax title net panel skip
d1         cat   Tabella D1      
d2         cat   Tabella D2      
d5     9, 99 Nuova label D5 ord   Tabella D5 n5a (NET D5)    

0 nil   Non risponde       1 (NON RISPONDE)    

1 0   Per niente d’accordo       2 (NEGATIVO (NET))    

2 1   Poco d’accordo       2    

3 2   Abbastanza d’accordo       3 (POSITIVO (NET))    

4 3   Molto d’accordo       3    

        #   Questo è un commento      

        syn xtab :n5a        
n5a         cat          

Foglio: “Sezione 2”

var code w missing label cmd syntax title net panel skip

        panels.add :titolo, :prof        

        weight         x

        scale   Tabella D6      
d6_1         +          
d6_2         +          
d6_3       IMPARARE NUOVE COSE +          
d6_4         +          
d6_5         +          
d6_6         +          
d6_7         +          
d6_8         +          
d6_9         +          
d6_10         +          
s(:d7_,10)         md   Tabella D7 (versione 1)      

        md   Tabella D7 (versione 2) n7    
d7_1         +     1 (TOTALE CITAZIIONI)    
d7_2         +     1    
d7_3         +     2    
d7_4         +     1,4 (AMICI/FAMIGLIA)    
d7_5         +     1,3 (SVAGO)    
d7_6         +     1,3    
d7_7         +     1    
d7_8         +     1,4    
d7_9         +     1,3    
d7_10         +     1,3    

        +     none (NESSUNA CITAZIONE)    
name             Descrizione      

Output sintassi

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 ### pTabs2 generated syntax ###

 panels.add :eta, :sesso, :area

 weight! :peso

 serr!

 net_pos :bottom

 camp "CAMPIONE"

 ord :eta => :etaq, title: "Tabella Eta'"


 section "Sezione 1"

 cat :d1, "Tabella D1"

 cat :d2, "Tabella D2"

 label :d5 => "Nuova label D5"
 add_levels :d5 => {0=>"Non risponde", 1=>"Per niente d'accordo", 2=>"Poco d'accordo", 3=>"Abbastanza d'accordo", 4=>"Molto d'accordo"}
 missing :d5 => [9, 99]
 ord :d5, "Tabella D5" do
   net "NON RISPONDE" => [0], "NEGATIVO (NET)" => [1, 2], "POSITIVO (NET)" => [3, 4], :name => :n5a, :label => "NET D5"
   w 0=>:na, 1=>0, 2=>1, 3=>2, 4=>3
 end

 # Questo è un commento

 xtab :n5a

 cat :n5a


 section "Sezione 2"

 panels.add :titolo, :prof

 label :d6_3 => "IMPARARE NUOVE COSE"

 scale s(:d6_,1..10), "Tabella D6"

 md s(:d7_,1..8)+[:d7_9,:d7_10], "Tabella D7 (versione 1)"

 n7 = nets do
   net "TOTALE CITAZIIONI", s(:d7_,1..2,7) do
     net "SVAGO", s(:d7_,5..6,9..10)
     net "AMICI/FAMIGLIA", s(:d7_,4,8)
   end
   var :d7_3
   none "NESSUNA CITAZIONE"
 end
 md n7