Untuk mengumpulkan sel yang sama daripada jadual inventori berulang, eksport setiap jadual sebagai CSV, kemudian jalankan pintasan Finder yang membaca kedudukan itu dan mencipta gambaran keseluruhan. Panduan ini mengumpulkan B3, mengekalkan nama fail sumber dan enggan menulis ganti hasil sedia ada.
Pilih input yang betul sebelum membina pintasan
Aliran kerja ini sesuai untuk seseorang yang mengurus beberapa jadual inventori dengan susun atur yang sama dan mahu satu baris bagi setiap jadual dalam gambaran keseluruhan berasingan. Contoh ini menggunakan tiga fail sementara yang mengandungi kiraan sintetik. Setiap fail mewakili satu jadual yang dieksport; sasaran ialah lajur B, baris 3, termasuk baris pengepala.
Bezakan tiga perkara: dokumen hamparan, jadual di dalamnya dan fail CSV yang dieksport. Dokumentasi Numbers Apple membenarkan eksport CSV sama ada sebagai fail berasingan bagi setiap jadual atau dengan jadual digabungkan. Untuk tugasan ini, pilih fail berasingan: penggabungan jadual boleh mengubah kedudukan rekod sasaran. Eksport CSV mengandungi nilai sel, jadi gambaran keseluruhan yang terhasil ialah petikan data. Eksport ke format fail lain dalam Numbers pada Mac.
Pintasan di bawah menyerahkan pengekstrakan kepada program Python kecil. Program ini tidak menganggap dokumen Numbers atau buku kerja Excel sebagai teks biasa, dan tidak mengandaikan bahawa tindakan yang menerima fail hamparan boleh mengakses selnya. Apple menerangkan cara memeriksa input yang diterima oleh sesuatu tindakan dan output yang terhasil melalui panel maklumatnya. Gunakan panel itu untuk menyemak tindakan yang tersedia pada Mac anda. Navigasi senarai tindakan dalam Pintasan pada Mac.
Gunakan jadual keputusan ini sebelum bermula:
| Titik permulaan | Persediaan untuk aliran kerja ini |
|---|---|
| Satu jadual sepadan dalam setiap dokumen Numbers | Eksport setiap jadual sebagai CSV. |
| Beberapa jadual sepadan dalam satu dokumen | Eksport fail CSV berasingan dan kenal pasti jadual yang dimaksudkan. |
| Fail CSV dipisahkan koma yang sedia ada | Sahkan pengekodan, susun atur dan kedudukan sasaran. |
| Susun atur berbeza atau baris inventori berubah-ubah | Seragamkan contoh sementara terlebih dahulu; koordinat tetap sahaja tidak dapat mengenal pasti kuantiti yang dimaksudkan. |
Untuk contoh ini, setiap sumber mesti mempunyai Counted units dalam A3 dan nilai yang dikehendaki dalam B3. Memeriksa label bersebelahan memberikan petunjuk diagnostik yang berguna: baris yang tersasar akan menghentikan proses dan bukannya mengumpulkan nilai yang tidak berkaitan secara senyap. Pemeriksaan ini tidak dapat mengesan setiap kemungkinan kesilapan susun atur, jadi sahkan kedua-dua sel semasa menyediakan input.
Sediakan fail inventori sementara
Python 3 perlu dipasang secara berasingan untuk contoh ini. Dengan pemasang standard daripada laman web Python, pautan boleh laku diletakkan dalam /usr/local/bin/. Arahan di bawah menggunakan /usr/local/bin/python3 secara khusus, supaya tidak bergantung pada laluan carian arahan pintasan. Ikut arahan pemasangan untuk keluaran Python yang disokong, kemudian semak sama ada arahan ini berfungsi. Menggunakan Python pada macOS.
/usr/local/bin/python3 --version
Jika laluan itu tiada, lengkapkan pemasangan Python sebelum meneruskan. Program ini hanya menggunakan pustaka standard Python; tiada pakej tambahan diperlukan. Panduan Terminal Apple menerangkan bahawa arahan boleh dipanggil menggunakan nama laluan penuh fail boleh laku diikuti argumennya. Laksanakan arahan dan jalankan alat dalam Terminal pada Mac.
Untuk mencipta input sintetik, tampal arahan lengkap ini ke dalam Terminal. Arahan ini mencipta Inventory Demo pada Desktop anda dan berhenti jika folder itu sudah wujud. Gunakan folder sementara yang baharu dan jangan gabungkan contoh ini dengan direktori sedia ada.
/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
Untuk menguji langkah eksport Numbers secara berasingan, buka satu CSV sementara dalam Numbers dan eksportnya ke folder sementara yang berbeza menggunakan File > Export To > CSV. Pilih satu fail bagi setiap jadual, biarkan Include table names dimatikan dan gunakan pengekodan UTF-8. Periksa jadual yang dieksport untuk mengesahkan bahawa A3 dan B3 masih mengandungi label dan nilai yang dimaksudkan. Apple mendokumentasikan pilihan eksport ini. Tetapan eksport Numbers.
Jangan tukar sambungan fail hamparan kepada .csv sebagai ganti mengeksportnya. Program ini menjangkakan teks sebenar yang dipisahkan koma. Kekalkan tiga fail CSV sintetik asal bersama-sama untuk panduan seterusnya.
Cipta program untuk membina gambaran keseluruhan
Simpan program lengkap berikut sebagai overview.py dalam Inventory Demo, menggunakan penyunting teks biasa. Pastikan nama fail berakhir dengan .py, bukannya .py.txt. Program ini menerima laluan fail sumber sebagai argumen, membaca B3 dan mencipta overview.csv dalam folder kongsi mereka.
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:]))
Program ini menggunakan penghuraian CSV dan bukannya memisahkan teks pada koma atau pemisah baris. Pembaca Python mengembalikan medan sebagai rentetan, dan dokumentasinya menetapkan supaya fail CSV dibuka dengan newline="". Ini menyokong medan bertanda petik yang mengandungi koma atau pemisah baris terbenam. Program ini mengekalkan nilai yang diekstrak tanpa menjumlahkannya atau menukarkannya kepada nombor. Membaca dan menulis fail CSV.
Beberapa had yang disengajakan memudahkan hasil disemak. Setiap input mesti wujud, semua laluan sumber yang telah diselesaikan mesti berkongsi satu folder, dan laluan pendua yang telah diselesaikan akan ditolak. Program ini menyusun mengikut nama fail dan bukannya bergantung pada susunan pilihan Finder. Program ini juga menolak input bernama overview.csv untuk mengelakkan hasil terdahulu disertakan secara tidak sengaja.
Semua sumber dibaca dan disemak sebelum penciptaan output bermula. B3 yang tiada atau label yang tidak dijangka dalam A3 akan menghentikan proses. B3 yang wujud tetapi kosong menghasilkan baris bertanda blank; nilai 0 kekal sebagai 0 dan ditandakan present. Oleh itu, sel yang tiada, sel kosong dan kiraan sifar menghasilkan keputusan yang berbeza.
Output menggunakan mod penciptaan eksklusif, "x". Python mendokumentasikan bahawa mod ini gagal jika destinasi sudah wujud. Oleh itu, program ini tidak menggantikan gambaran keseluruhan terdahulu atau mencipta nama fail bernombor secara automatik. Kegagalan semasa penulisan sebenar masih boleh meninggalkan fail baharu yang tidak lengkap; periksa sebarang fail yang tertinggal selepas ralat penulisan sebelum mencuba semula. Mod pembukaan fail Python.
Sambungkan program kepada pintasan Finder
Cipta pintasan bernama Inventory Overview dalam Pintasan. Buka Details, aktifkan Use as Quick Action dan pilih Finder. Dalam konfigurasi input, kekalkan Files diaktifkan dan matikan jenis kandungan yang tidak berkaitan. Apple mendokumentasikan ketersediaan Finder untuk pintasan yang menerima fail atau folder, serta kawalan untuk mengehadkan input yang diterima. Jalankan pintasan semasa bekerja pada Mac, Hadkan input untuk pintasan.
Tetapkan tingkah laku apabila tiada input kepada Stop and Respond, dengan mesej seperti Select the source CSV files in Finder. Ini mengelakkan pilihan kosong daripada menghasilkan proses yang tidak jelas. Pilihan itu dan medan responsnya diterangkan dalam panduan konfigurasi input Apple. Pilih respons apabila tiada input.
Tambah Run Shell Script. Tetapkan Shell kepada /bin/zsh, sambungkan Input kepada Shortcut Input dan tetapkan Pass Input kepada as arguments. Gantikan skrip contoh dengan arahan lengkap ini:
/usr/local/bin/python3 "$HOME/Desktop/Inventory Demo/overview.py" "$@"
Kekalkan tanda petik. "$@" yang bertanda petik menghantar argumen masuk secara berasingan, sekali gus mengekalkan nama fail yang mengandungi ruang. Laluan skrip juga ditandakan petik atas sebab yang sama. Manual zsh mendokumentasikan parameter kedudukan dan pengembangan berasingan bagi elemen tatasusunan bertanda petik; panduan Terminal Apple turut menerangkan penggunaan tanda petik pada nama laluan. Parameter, Nyatakan fail dan folder dalam Terminal.
Jika Pintasan memerlukan skrip diaktifkan, pilih Shortcuts > Settings > Advanced dan tandakan Allow Running Scripts. Apple mendokumentasikan tetapan ini di bawah kebenaran menjalankan skrip daripada pintasan. Tetapan lanjutan Pintasan.
Aliran yang dikonfigurasikan ialah: objek fail yang dipilih memasuki pintasan, laluannya menjadi argumen shell, dan Python membaca fail tersebut serta menulis gambaran keseluruhan. Hasil teks yang berjaya daripada tindakan shell ialah mesej Created: yang mengandungi nama laluan destinasi. Mesej itu bukan fail CSV itu sendiri. Tiada tindakan simpan seterusnya diperlukan kerana program sudah mencipta fail tersebut.
Dalam Finder, pilih hanya Birch.csv, Cedar.csv dan Maple.csv. Control-click pilihan itu dan pilih Quick Actions > Inventory Overview. Jika pintasan tiada, gunakan More > Customize untuk memeriksa sambungan Finder yang diaktifkan, kemudian semak semula jenis input yang diterimanya. Apple mendokumentasikan penyesuaian Quick Actions Finder dan penambahan pintasan pada menu itu. Lakukan tindakan pantas dalam Finder pada Mac.
Semak hasil dan kendalikan proses berulang
Buka overview.csv daripada folder demo dalam Numbers. Dengan fail sintetik yang dibekalkan, kandungannya sepatutnya seperti berikut:
Source file,Cell,Value,Status
Birch.csv,B3,12,present
Cedar.csv,B3,7,present
Maple.csv,B3,0,present
Semak bahawa terdapat satu baris output bagi setiap sumber yang dipilih dan nama fail mengenal pasti jadual yang dimaksudkan. Nilai dalam contoh ini sekadar ilustrasi, bukan hasil inventori yang diukur. Program ini melaporkan sama ada sesuatu nilai wujud; program ini tidak menyemak sama ada nilai itu kiraan yang sah.
Gunakan urutan diagnostik ini apabila hasilnya berbeza:
- Tiada pintasan dalam Finder: semak tetapan
Finder, inputFilesyang diterima dan sambungan yang diaktifkan. - Fail boleh laku atau skrip tiada: sahkan laluan Python dan pastikan
overview.pymasih berada dalam folder demo yang ditetapkan. B3tiada atauA3salah: periksa rekod sumber yang dieksport dan pilihan eksport sebelum mengubah program.- Kosong yang tidak dijangka: periksa
B3; program ini sengaja membiarkan nilai kosong. - Destinasi sudah wujud: namakan semula gambaran keseluruhan sementara terdahulu atau alihkannya keluar daripada folder sumber sebelum menjalankan semula.
Anda juga boleh menjalankan pintasan yang sama daripada Terminal untuk menyemak laluan input. Apple mendokumentasikan -i untuk menghantar input fail; menyalurkan nama laluan pula menghantar teks. Gunakan fail khusus di bawah tanpa bendera output kerana program Python mengendalikan penciptaan output. Peraturan pertembungan nama yang sama tetap terpakai. Jalankan pintasan daripada baris arahan.
shortcuts run "Inventory Overview" -i \
"$HOME/Desktop/Inventory Demo/Birch.csv" \
"$HOME/Desktop/Inventory Demo/Cedar.csv" \
"$HOME/Desktop/Inventory Demo/Maple.csv"
Setiap gambaran keseluruhan baharu mewakili fail CSV yang dipilih untuk proses tersebut. Perubahan dalam hamparan memerlukan eksport dan proses baharu. Dengan mengekalkan nama fail sumber, menyemak label bersebelahan dan membezakan nilai kosong daripada sifar, gambaran keseluruhan kecil ini lebih mudah disahkan sebelum digunakan untuk semakan inventori anda yang seterusnya.
Sumber
- Eksport ke format fail lain dalam Numbers pada Mac — Apple.
- Navigasi senarai tindakan dalam Pintasan pada Mac — Apple.
- Menggunakan Python pada macOS — Python Software Foundation.
- Laksanakan arahan dan jalankan alat dalam Terminal pada Mac — Apple.
- csv — Membaca dan menulis fail CSV — Python Software Foundation.
- Fungsi terbina dalam — Python Software Foundation.
- Jalankan pintasan semasa bekerja pada Mac — Apple.
- Hadkan input untuk pintasan apabila dijalankan daripada app lain pada Mac — Apple.
- 15 Parameter — The Zsh Project.
- Nyatakan fail dan folder dalam Terminal pada Mac — Apple.
- Tetapan Privasi dan keselamatan lanjutan dalam Pintasan pada Mac — Apple.
- Lakukan tindakan pantas dalam Finder pada Mac — Apple.
- Jalankan pintasan daripada baris arahan — Apple.