<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao,
Ho una lista di stringhe che sono nomi di colonne. Voglio determinare la loro posizione di colonna (i) in una tabella di dati e quindi aggiungere una nuova colonna con la formula (Colonna (i) + Colonna (i + 1)). Il mio codice assomiglia a questo:
| UN | B | C | D | E | F |
|---|
1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 |
cols = dt << Ottieni i nomi delle colonne (St
squillare);
list = {"B", "D"};
n = N Articoli (elenco);
locate = {}:
Per (i = 1, i <= n, i ++,
individuare = Loc (dt, lista );
Nuova colonna ("Nuovo", Formula (colonna (locate ) + Colonna (individuare + 1)))
);
Ho problemi perché Loc () restituisce una matrice e Column () può solo valutare un numero. Voglio che la mia tabella di dati finale assomigli a questo:
| UN | B | C | D | E | F | Nuovo | Nuovo 2 |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
Qualcuno mi può aiutare?
Grazie per l'aiuto. Lo apprezzo molto.
Una colonna formula non funzionerà naturalmente se vengono rimosse le colonne dipendenti. Se si desidera eliminare le colonne utilizzate dalla formula, qual è il punto di utilizzo delle formule di colonna in primo luogo? Se si è solo dopo la somma e non si è interessati ai vantaggi dinamici offerti da una formula di colonna, suggerisco di non utilizzare le formule (che rendono questo compito molto più semplice).
Prova questo nella tabella sopra:
elenco = { "B" , "D" } ;
individuare = expr ( Loc ( Cols , elenco [ io ] ) [ 1 ] ) ;
Per ( io = 1 , io <= N articoli ( elenco ) , io ++,
Cols = dt << Ottieni nomi di colonne ( Stringa ) ;
col = dt << Nuova colonna ( "Nuovo" , numerico ) ;
Per ogni riga ( col [] = Colonna ( individuare ) [] + Colonna ( individuare + 1 ) [] ) ;
dt << elimina colonne ( Colonna ( individuare ) , Colonna ( individuare + 1 ) ) ;
col << imposta nome ( elenco [ io ] ) ;
) ;
Grazie mille! Questo approccio funziona molto bene.
Ho anche una domanda di follow-up. Vorrei apportare alcune modifiche alle colonne di questa nuova tabella:
| UN | B | C | D | E | F | Nuovo | Nuovo 2 |
|---|
1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
C'è un modo per rimuovere le 4 colonne che sono state sommate per creare le colonne "Nuovo" e "Nuovo 2" e rinominarle usando list = {"B", "D"} in modo che la tabella risultante assomigli a questa:
Per ottenere le variabili di colonna nelle formule di colonna di jsl non è semplice. La formula deve apparire esattamente come l'espressione finale, ovvero nulla viene valutato automaticamente. Il trucco è definire e manipolare le espressioni (o le stringhe) e quindi utilizzare la giusta combinazione di valutazione, analisi ecc.
Di seguito è riportato un esempio che sembra funzionare. È un po 'circolare poiché individua le colonne con il suo nome e poi ottiene il nome che viene poi analizzato. Banco! Non sono riuscito a trovare una procedura più semplice, ma sono interessato se qualcuno ha un'idea di soluzione più elegante.
// crea la tabella di esempio
dt = Nuova tabella ( "test" ,
Aggiungi righe ( 3 ) ,
Nuova colonna ( "UN" , Numerico , Continuo , Formato ( "Migliore" , 1 ) , Imposta valori ( [ 1 , 1 , 1 ] ) ) ,
Nuova colonna ( "B" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 2 , 2 , 2 ] ) ) ,
Nuova colonna ( "C" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 3 , 3 , 3 ] ) ) ,
Nuova colonna ( "D" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 4 , 4 , 4 ] ) ) ,
Nuova colonna ( "E" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 5 , 5 , 5 ] ) ) ,
Nuova colonna ( "F" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 6 , 6 , 6 ] ) )
) ;
// Lo script inizia qui
Cols = dt << Ottieni nomi di colonne ( Stringa ) ;
elenco = { "B" , "D" } ;
// Trova colonna expr
individuare = expr ( Loc ( Cols , elenco [ io ] ) [ 1 ] ) ;
// Nuova colonna con formula expr
f = expr ( Nuova colonna ( "Nuovo" , Formula ( expr ( analizzare ( Colonna ( individuare ) << prendi il nome ) )
+ expr ( analizzare ( Colonna ( individuare + 1 ) << prendi il nome ) ) ) ) ) ;
// Elenco di loop over
Per ( io = 1 , io <= N articoli ( elenco ) , io ++,
Eval ( Eval Espr ( f ) )
) ;