Per raccogliere la stessa cella da tabelle di inventario ripetute, esporta ogni tabella come CSV, quindi esegui un comando rapido del Finder che legge quella posizione e crea una panoramica. Questa guida raccoglie B3, conserva il nome di ogni file sorgente e impedisce di sovrascrivere un risultato esistente.
Scegli gli input giusti prima di creare il comando rapido
Questa procedura è pensata per chi gestisce diverse tabelle di inventario con la stessa struttura e vuole una riga per ogni tabella in una panoramica separata. L’esempio usa tre file temporanei con conteggi sintetici. Ogni file rappresenta una tabella esportata; la cella di destinazione è la colonna B, riga 3, contando anche la riga dell’intestazione.
Tieni distinti tre elementi: il documento del foglio di calcolo, la tabella al suo interno e il file CSV esportato. La documentazione di Numbers di Apple consente di esportare i CSV come file separati per ogni tabella oppure di combinare le tabelle. Per questa procedura, scegli i file separati: combinare le tabelle può cambiare la posizione del record di destinazione. I file CSV contengono i valori delle celle, quindi la panoramica risultante è un’istantanea. Esportare in altri formati di file in Numbers sul Mac.
Il comando rapido riportato di seguito affida l’estrazione a un piccolo programma Python. Non tratta un documento Numbers o una cartella di lavoro Excel come testo semplice e non presume che accettare un file di foglio di calcolo dia a un’azione accesso alle sue celle. Apple spiega come esaminare gli input accettati da un’azione e il relativo output tramite il pannello informativo. Usa quel pannello per verificare le azioni disponibili sul tuo Mac. Esplorare l’elenco delle azioni in Comandi Rapidi sul Mac.
Prima di iniziare, consulta questa tabella decisionale:
| Punto di partenza | Preparazione per questa procedura |
|---|---|
| Una tabella corrispondente in ogni documento Numbers | Esporta ogni tabella come CSV. |
| Diverse tabelle corrispondenti in un documento | Esporta file CSV separati e individua le tabelle desiderate. |
| File CSV esistenti delimitati da virgole | Verificane la codifica, la struttura e la posizione di destinazione. |
| Strutture diverse o righe dell’inventario che cambiano posizione | Prima uniforma gli esempi temporanei; una coordinata fissa da sola non può identificare la quantità desiderata. |
Nell’esempio, ogni file sorgente deve contenere Counted units in A3 e il valore desiderato in B3. Controllare l’etichetta adiacente è un’utile verifica: se la riga è spostata, l’esecuzione si interrompe invece di raccogliere silenziosamente un valore estraneo. Non può rilevare ogni possibile errore di struttura, quindi verifica entrambe le celle quando prepari gli input.
Prepara file di inventario temporanei
Per questo esempio, Python 3 deve essere installato separatamente. Con il programma di installazione standard dal sito web di Python, i collegamenti agli eseguibili vengono collocati in /usr/local/bin/. I comandi riportati di seguito usano esplicitamente /usr/local/bin/python3, senza dipendere dal percorso di ricerca dei comandi del comando rapido. Segui le istruzioni di installazione per la versione di Python supportata, poi verifica che questo comando funzioni. Usare Python su macOS.
/usr/local/bin/python3 --version
Se il percorso non esiste, completa l’installazione di Python prima di continuare. Il programma usa solo la libreria standard di Python; non sono necessari pacchetti aggiuntivi. La guida di Terminale di Apple spiega che i comandi possono essere eseguiti specificando il percorso completo dell’eseguibile seguito dai relativi argomenti. Eseguire comandi e strumenti in Terminale sul Mac.
Per creare gli input sintetici, incolla questo comando completo in Terminale. Crea Inventory Demo sulla Scrivania e si interrompe se la cartella esiste già. Usa una cartella temporanea nuova, invece di unire questi esempi a una directory esistente.
/usr/local/bin/python3 - <<'PY'
import csv
from pathlib import Path
root = Path.home() / "Desktop" / "Inventory Demo"
root.mkdir()
examples = [
("Birch", "A", "12"),
("Cedar", "B", "7"),
("Maple", "C", "0"),
]
for name, bin_name, count in examples:
with (root / f"{name}.csv").open(
"x", encoding="utf-8", newline=""
) as handle:
csv.writer(handle).writerows([
["Item", "Value"],
["Bin", bin_name],
["Counted units", count],
])
print(root)
PY
Per provare separatamente il passaggio di esportazione da Numbers, apri un CSV temporaneo in Numbers ed esportalo in un’altra cartella temporanea usando File > Esporta in > CSV. Scegli un file per ogni tabella, lascia disattivata l’opzione Includi i nomi delle tabelle e usa la codifica UTF-8. Esamina la tabella esportata per confermare che A3 e B3 contengano ancora l’etichetta e il valore desiderati. Apple documenta queste opzioni di esportazione. Impostazioni di esportazione di Numbers.
Non rinominare l’estensione di un foglio di calcolo in .csv per sostituire l’esportazione. Questo programma richiede testo effettivo delimitato da virgole. Tieni insieme i tre file CSV sintetici originali per la procedura seguente.
Crea il programma che genera la panoramica
Usando un editor di testo semplice, salva il programma completo riportato di seguito come overview.py in Inventory Demo. Verifica che il nome del file termini in .py, non in .py.txt. Il programma accetta i percorsi dei file sorgente come argomenti, legge B3 e crea overview.csv nella cartella condivisa.
import csv
import io
import sys
from pathlib import Path
ROW, COLUMN = 2, 1 # Zero-based: B3
LABEL = "Counted units"
def build_overview(arguments):
if not arguments:
raise ValueError("Select at least one source CSV.")
paths = [Path(name).expanduser().resolve(strict=True)
for name in arguments]
if len(set(paths)) != len(paths):
raise ValueError("The same source was supplied twice.")
if len({path.parent for path in paths}) != 1:
raise ValueError("Keep all source CSVs in one folder.")
rows = []
for path in sorted(paths, key=lambda p: p.name):
if (not path.is_file() or path.suffix.lower() != ".csv"
or path.name.casefold() == "overview.csv"):
raise ValueError(f"Not a source CSV: {path.name}")
with path.open(encoding="utf-8-sig", newline="") as handle:
records = list(csv.reader(handle, strict=True))
if len(records) <= ROW or len(records[ROW]) <= COLUMN:
raise ValueError(f"{path.name}: B3 does not exist.")
if records[ROW][0] != LABEL:
raise ValueError(f"{path.name}: A3 must be {LABEL!r}.")
value = records[ROW][COLUMN]
status = "blank" if value.strip() == "" else "present"
rows.append([path.name, "B3", value, status])
buffer = io.StringIO(newline="")
writer = csv.writer(buffer)
writer.writerow(["Source file", "Cell", "Value", "Status"])
writer.writerows(rows)
return paths[0].parent / "overview.csv", buffer.getvalue()
def main(arguments):
try:
destination, content = build_overview(arguments)
with destination.open("x", encoding="utf-8", newline="") as handle:
handle.write(content)
except (OSError, ValueError, csv.Error) as error:
print(f"Stopped: {error}", file=sys.stderr)
return 1
print(f"Created: {destination}")
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
Il programma usa un parser CSV invece di dividere il testo in corrispondenza delle virgole o delle interruzioni di riga. Il lettore di Python restituisce i campi come stringhe e la relativa documentazione specifica di aprire i file CSV con newline="". Questo permette di gestire campi tra virgolette contenenti virgole o interruzioni di riga. Il programma conserva il valore estratto senza sommarlo né convertirlo in un numero. Lettura e scrittura di file CSV.
Alcuni limiti intenzionali rendono più semplice verificare il risultato. Ogni input deve esistere, tutti i percorsi sorgente risolti devono appartenere alla stessa cartella e i percorsi risolti duplicati vengono rifiutati. Il programma ordina per nome del file, senza affidarsi all’ordine di selezione nel Finder. Rifiuta anche un input denominato overview.csv, impedendo l’inclusione accidentale del risultato precedente.
Tutti i file sorgente vengono letti e verificati prima di iniziare a creare l’output. Se manca B3 o l’etichetta in A3 è diversa da quella prevista, l’esecuzione si interrompe. Se B3 esiste ma è vuota, viene creata una riga contrassegnata con blank; il valore 0 resta 0 ed è contrassegnato con present. In questo modo una cella assente, una cella vuota e un conteggio pari a zero producono risultati diversi.
L’output usa la modalità di creazione esclusiva, "x". Python documenta che questa modalità non funziona se la destinazione esiste già. Il programma quindi non sostituisce la panoramica precedente e non crea un nome numerato. Un errore durante la scrittura effettiva può comunque lasciare un nuovo file incompleto; se la scrittura dà errore, controlla gli eventuali file rimasti prima di riprovare. Modalità di apertura dei file in Python.
Collega il programma a un comando rapido del Finder
Crea in Comandi Rapidi un comando rapido chiamato Inventory Overview. Apri Dettagli, attiva Usa come azione rapida e seleziona Finder. Nella configurazione dell’input, lascia attivo File e disattiva i tipi di contenuto non pertinenti. Apple documenta la disponibilità nel Finder dei comandi rapidi che accettano file o cartelle e i controlli per limitare gli input accettati. Eseguire un comando rapido mentre usi il Mac, Limitare l’input di un comando rapido.
Imposta il comportamento quando non ci sono input su Interrompi e rispondi, con un messaggio come Seleziona i file CSV sorgente nel Finder. In questo modo una selezione vuota non produce un’esecuzione ambigua. L’opzione e il campo della risposta sono descritti nella guida di Apple alla configurazione degli input. Scegliere la risposta quando manca un input.
Aggiungi Esegui script shell. Imposta Shell su /bin/zsh, collega il campo Input a Input comando rapido e imposta Passa input su come argomenti. Sostituisci lo script di esempio con questo comando completo:
/usr/local/bin/python3 "$HOME/Desktop/Inventory Demo/overview.py" "$@"
Mantieni le virgolette. "$@" tra virgolette passa gli argomenti in ingresso separatamente, conservando i nomi di file che contengono spazi. Anche il percorso dello script è tra virgolette per lo stesso motivo. Il manuale di zsh documenta i parametri posizionali e l’espansione separata degli elementi di un array tra virgolette; la guida di Terminale di Apple spiega anche come racchiudere tra virgolette i percorsi. Parametri, Specificare file e cartelle in Terminale.
Se Comandi Rapidi richiede di abilitare gli script, scegli Comandi Rapidi > Impostazioni > Avanzate e seleziona Consenti l’esecuzione degli script. Apple documenta questa impostazione nella sezione dedicata all’esecuzione degli script da un comando rapido. Impostazioni avanzate di Comandi Rapidi.
Il flusso configurato è il seguente: gli oggetti file selezionati entrano nel comando rapido, i relativi percorsi diventano argomenti della shell, quindi Python legge i file e scrive la panoramica. Il risultato testuale dell’esecuzione riuscita dell’azione shell è un messaggio Created: contenente il percorso di destinazione. Questo messaggio non è il file CSV. Non serve un’azione di salvataggio successiva, perché il programma ha già creato il file.
Nel Finder, seleziona solo Birch.csv, Cedar.csv e Maple.csv. Fai clic tenendo premuto il tasto Ctrl sulla selezione e scegli Azioni rapide > Inventory Overview. Se il comando rapido non è presente, usa Altro > Personalizza per controllare le estensioni del Finder abilitate, quindi verifica di nuovo i tipi di input accettati. Apple documenta sia la personalizzazione delle azioni rapide del Finder sia l’aggiunta di comandi rapidi a quel menu. Eseguire azioni rapide nel Finder sul Mac.
Verifica il risultato e gestisci le esecuzioni successive
Apri overview.csv dalla cartella demo in Numbers. Con i file sintetici forniti, il contenuto dovrebbe essere:
Source file,Cell,Value,Status
Birch.csv,B3,12,present
Cedar.csv,B3,7,present
Maple.csv,B3,0,present
Verifica che ci sia una riga di output per ogni file sorgente selezionato e che i nomi dei file identifichino le tabelle desiderate. I valori dell’esempio sono illustrativi e non rappresentano risultati di inventario misurati. Il programma indica se un valore è presente; non verifica che sia un conteggio valido.
Se qualcosa è diverso, segui questa sequenza diagnostica:
- Il comando rapido non compare nel Finder: controlla l’impostazione
Finder, l’input accettatoFilee che l’estensione sia abilitata. - Eseguibile o script non trovato: verifica il percorso di Python e che
overview.pysia ancora nella cartella demo specificata. - Manca
B3oA3è errato: esamina i record esportati e le opzioni di esportazione del file sorgente prima di modificare il programma. - Compare uno spazio vuoto inaspettato: controlla
B3; il programma lascia volutamente vuoti i valori vuoti. - La destinazione esiste già: rinomina la panoramica temporanea precedente oppure spostala fuori dalla cartella sorgente prima di eseguire di nuovo il comando.
Puoi anche richiamare lo stesso comando rapido da Terminale per verificare il percorso di input. Apple documenta l’opzione -i per passare input di tipo file; reindirizzando un percorso si passa invece del testo. Usa i file specificati qui sotto, senza un’opzione di output, perché è il programma Python a occuparsi della creazione dell’output. Si applica comunque la stessa regola per evitare nomi già esistenti. Eseguire comandi rapidi dalla riga di comando.
shortcuts run "Inventory Overview" -i \
"$HOME/Desktop/Inventory Demo/Birch.csv" \
"$HOME/Desktop/Inventory Demo/Cedar.csv" \
"$HOME/Desktop/Inventory Demo/Maple.csv"
Ogni nuova panoramica rappresenta i file CSV selezionati per quell’esecuzione. Se apporti modifiche a un foglio di calcolo, devi esportarlo di nuovo ed eseguire nuovamente il comando. Conservare il nome del file sorgente, controllare l’etichetta adiacente e distinguere i valori vuoti da zero rende questa piccola panoramica più facile da verificare prima della prossima revisione dell’inventario.
Fonti
- Esportare in altri formati di file in Numbers sul Mac — Apple.
- Esplorare l’elenco delle azioni in Comandi Rapidi sul Mac — Apple.
- Usare Python su macOS — Python Software Foundation.
- Eseguire comandi e strumenti in Terminale sul Mac — Apple.
- csv — Lettura e scrittura di file CSV — Python Software Foundation.
- Funzioni integrate — Python Software Foundation.
- Eseguire un comando rapido mentre usi il Mac — Apple.
- Limitare l’input di un comando rapido quando viene eseguito da un’altra app sul Mac — Apple.
- 15 Parametri — The Zsh Project.
- Specificare file e cartelle in Terminale sul Mac — Apple.
- Impostazioni avanzate di privacy e sicurezza in Comandi Rapidi sul Mac — Apple.
- Eseguire azioni rapide nel Finder sul Mac — Apple.
- Eseguire comandi rapidi dalla riga di comando — Apple.