Sto cercando di passare da una serie di tabelle a aggiornare la mia tabella principale con informazioni, tuttavia per un motivo sconosciuto questo non funzionerà. Vedi il codice allegato qui sotto:
Esempio dalla mia lista che memorizza le mie tabelle:
DT = {Data Table ("Sheet1"), Data Table ("Sheet2") ......}
// apra gli excelfiles in un percorso specificato, funziona bene
percorso = "$ DOCUMENTI \ 580501 \";
ftype = ".xlsx";
// Crea un elenco di file, rimuovi tutti i file non corrispondenti, funziona perfettamente
flist = File nella directory ( sentiero ) ;
Per ( i = N articoli ( flist ) , io> 0 , io--,
Se ( !Finisce con ( flist [ io ] , tipo ) ,
Rimuovere da ( flist, io )
)
) ;
d = N Articoli ( flist ) ;
// importare tutti gli excelfiles dalla directory 580501 e memorizzarli in una lista, funziona correttamente
Mentre ( d> 0 ,
i = 1 ;
dtt = Apri (....)
// questa parte del mio codice funziona bene
DT = Lista () ;
s = 1 ;
Per ( i = 1 , i <= N Tabella () , io ++,
Se ( Tabella dati ( io ) ! = "ISAC_STAT",
Inserire ( DT, tabella dati ( S ) ) ;
s = s + 1 ;
)
) ;
// Analisi di tutte le tabelle aperte in DT
Per ( i = 1 , i <= N Tabella () , io ++,
dtt = Tabella dati ( DTS ( io ) ) ;
// Devo trovare una tabella specifica "sheet1" e aggiornarla prima che possa essere aggiornata con altre tabelle
// sheet1 contiene le informazioni necessarie per confrontarsi con altre tabelle, quindi deve aggiornare il mio principale
// primo tavolo
Per ( k = i, k <= N Tabella () , k ++,
//IO Pensa questo: se l'affermazione è la fonte del mio problema, ma non so perché?
// Ho provato diverse versioni di questa istruzione If:
// Contiene (Char (DTs [k]), Char ("" Data Table ("sheet1") ") == 1
// Contains (DTs [k], "sheet1") == 1
// Contains (DTs [k], "Data Table (" Sheet1 ")" == 1
// ma niente funziona.
Se ( contiene ( carbonizzare ( DTS [ K ] ) , "foglio1" ) == 1 ,
Tabella dati ( "La mia tavola" ) << Aggiornare (
Con ( Tabella dati ( "Sheet1" ) ) ,
Colonne corrispondenti ( : Lotto =: lotto ) ,
Aggiungi colonne dalla tabella di aggiornamento ( Nessuna )
) ;
) ;,
) ;
// Penso che questa affermazione sia la fonte del mio problema, ma non so perché?
Se (
DTS [ io ] ! = "foglio1" & DT [ io ] ! = "sheet2" & DTs [ io ] ! = "sheet3" & DTs [ io ] ! = "foglio4",
Provare (
Tabella dati ( "La mia tavola" ) << Aggiornare (
Con ( DTS [ io ] ) ,
Colonne corrispondenti ( : Lotto =: lotto | : Lotto =: lotto di prova ) ,
Aggiungi colonne dalla tabella di aggiornamento ( Nessuna )
);
);
// Uso lo stesso comando di aggiornamento di cui sopra ma abbiniamo diverse colonne
...
);
Ecco un semplice frammento di codice che funziona:
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// dt = DataTable("Big Class");
If (Contains(Char(dt),"Big Class"),
show("found")
,
show("not found")
)
Come sottolinea Wendy, la funzione Contains fa distinzione tra maiuscole e minuscole, quindi di solito forzerei il caso ad es
If (Contains(LowerCase(Char(dt)),"big class"),
Ciao a tutti e grazie per le vostre risposte veloci,
Come hai detto, l'elenco dei DT memorizza stringhe con valori come Tabella dati ( "Sheet1" ) quindi ho avuto successo nell'implementazione del ciclo for nidificato dove sto cercando due tabelle specifiche.
Comunque nel caso successivo, quando non voglio usare determinati tipi di tabelle, e forse questo è l'errore, sto usando le funzioni contiene per far corrispondere qualsiasi valore di stringa in DT a una determinata parola chiave.
per esempio:
se contiene (DTs [i], "soda") o contiene (DTs [i], "water") o contiene (DTs [i], "food_1"),
fare niente
,
altrimenti aggiorna la tabella principale.
Nota che ci sono casi in cui abbiamo tabella food_1 e food_2, qui dovremmo ignorare food_1 ma usare food_2.
Sto usando la funzione contiene con errori?