Tekrarlanan envanter tablolarındaki aynı hücreyi toplamak için her tabloyu CSV olarak dışa aktarın, ardından bu konumu okuyup bir özet oluşturan Finder kestirmesini çalıştırın. Bu adım adım kılavuz B3 hücresindeki verileri toplar, her kaynak dosyanın adını korur ve mevcut bir sonucun üzerine yazmayı reddeder.
Kestirmeyi oluşturmadan önce doğru girdileri seçin
Bu iş akışı, aynı düzene sahip birden fazla envanter tablosunu yöneten ve her tablo için ayrı bir özette tek satır görmek isteyenler içindir. Örnekte, sentetik sayımlar içeren ve işiniz bittiğinde silinebilecek üç dosya kullanılıyor. Her dosya dışa aktarılmış bir tabloyu temsil ediyor; hedef, başlık satırı da dahil olmak üzere B sütunu, 3. satırdır.
Üç şeyi birbirinden ayrı tutun: hesap tablosu belgesi, belgenin içindeki tablo ve dışa aktarılmış CSV dosyası. Apple’ın Numbers belgelerine göre CSV dosyaları her tablo için ayrı dosyalar hâlinde veya tablolar birleştirilerek dışa aktarılabilir. Bu görev için ayrı dosyaları seçin: tabloları birleştirmek, hedef kaydın yerini değiştirebilir. CSV dışa aktarımları hücre değerlerini içerir; dolayısıyla ortaya çıkan özet bir anlık görüntüdür. Mac’te Numbers’da diğer dosya biçimlerine dışa aktarma.
Aşağıdaki kestirme, verileri ayıklamak için küçük bir Python programı kullanır. Numbers belgesini veya Excel çalışma kitabını düz metin olarak ele almaz ve bir hesap tablosu dosyasını kabul eden bir eylemin hücrelerine erişebileceğini varsaymaz. Apple, bilgi paneli aracılığıyla bir eylemin kabul ettiği girdiyi ve oluşturduğu çıktıyı nasıl inceleyeceğinizi açıklar. Mac’inizde bulunan eylemleri kontrol ederken bu paneli kullanın. Mac’te Kestirmeler’de eylem listesinde gezinme.
Başlamadan önce bu karar tablosunu kullanın:
| Başlangıç noktası | Bu iş akışı için hazırlık |
|---|---|
| Her Numbers belgesinde eşleşen bir tablo | Her tabloyu CSV olarak dışa aktarın. |
| Bir belgede birden fazla eşleşen tablo | Ayrı CSV dosyaları olarak dışa aktarın ve kullanmak istediğiniz tabloları belirleyin. |
| Mevcut, virgülle ayrılmış CSV dosyaları | Kodlamalarını, düzenlerini ve hedef konumlarını doğrulayın. |
| Farklı düzenler veya yeri değişen envanter satırları | Önce örnekleri aynı düzene getirin; sabit bir koordinat tek başına istenen miktarı belirleyemez. |
Örnekte her kaynakta A3 hücresinde Counted units, B3 hücresinde ise istenen değer bulunmalıdır. Bitişik etiketi kontrol etmek faydalı bir tanılama adımıdır: satır kaymışsa, ilgisiz bir değer sessizce toplanmak yerine işlem durur. Bu, olası her düzen hatasını yakalayamaz; bu yüzden girdileri hazırlarken her iki hücreyi de doğrulayın.
Silinebilir envanter dosyalarını hazırlayın
Bu örnek için Python 3’ü ayrıca yüklemeniz gerekir. Python’ın web sitesindeki standart yükleyiciyi kullandığınızda çalıştırılabilir dosya bağlantıları /usr/local/bin/ konumuna yerleştirilir. Aşağıdaki komutlar kestirmenin komut arama yoluna bağlı kalmamak için açıkça /usr/local/bin/python3 yolunu kullanır. Desteklenen Python sürümünüzün yükleme talimatlarını izleyin, ardından bu komutun çalıştığını kontrol edin. macOS’ta Python kullanımı.
/usr/local/bin/python3 --version
Bu yol yoksa devam etmeden önce Python yüklemesini tamamlayın. Program yalnızca Python’ın standart kütüphanesini kullanır; ek paket gerekmez. Apple’ın Terminal kılavuzu, komutların çalıştırılabilir dosyanın tam yolu ve ardından argümanları kullanılarak çağrılabileceğini açıklar. Mac’te Terminal’de komutları çalıştırma ve araçları kullanma.
Sentetik girdileri oluşturmak için bu komutun tamamını Terminal’e yapıştırın. Komut, Masaüstünüzde Inventory Demo klasörünü oluşturur ve bu klasör zaten varsa durur. Örnekleri mevcut bir klasöre eklemek yerine yeni, silinebilir bir klasör kullanın.
/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
Numbers dışa aktarma adımını ayrıca denemek için silinebilir CSV dosyalarından birini Numbers’da açın ve File > Export To > CSV yolunu kullanarak başka bir silinebilir klasöre aktarın. Her tablo için bir dosya seçin, Include table names seçeneğini kapalı bırakın ve UTF-8 kodlamasını kullanın. Dışa aktarılan tabloyu inceleyerek A3 ve B3 hücrelerinde amaçlanan etiket ve değerin hâlâ bulunduğunu doğrulayın. Bu dışa aktarma seçenekleri Apple tarafından belgelenmiştir. Numbers dışa aktarma ayarları.
Bir hesap tablosunun uzantısını .csv olarak değiştirmek, dışa aktarmanın yerini tutmaz. Bu program gerçek, virgülle ayrılmış metin bekler. Sonraki adımları izlerken üç özgün sentetik CSV dosyasını birlikte tutun.
Özeti oluşturan programı yaratın
Aşağıdaki programın tamamını düz metin düzenleyiciyle Inventory Demo klasörüne, overview.py adıyla kaydedin. Dosya adının .py ile bittiğini, .py.txt olmadığını doğrulayın. Program kaynak dosya yollarını argüman olarak alır, B3 hücresini okur ve ortak klasörlerinde overview.csv dosyasını oluşturur.
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, metni virgüllerde veya satır sonlarında bölmek yerine bir CSV ayrıştırıcısı kullanır. Python’ın okuyucusu alanları dizeler olarak döndürür ve belgeleri CSV dosyalarının newline="" ile açılmasını belirtir. Bu yöntem, virgül veya satır sonu içeren tırnaklı alanları işler. Program, çıkarılan değeri toplamadan veya sayıya dönüştürmeden korur. CSV dosyalarını okuma ve yazma.
Sonucu kontrol etmeyi kolaylaştırmak için çeşitli sınırlar bilinçli olarak belirlenmiştir. Her girdi mevcut olmalı, çözümlenen tüm kaynak yolları aynı klasörde bulunmalı ve yinelenen çözümlenmiş yollar reddedilmelidir. Program Finder’daki seçim sırasına güvenmek yerine dosya adına göre sıralama yapar. Ayrıca önceki sonucun yanlışlıkla girdilere katılmasını önlemek için overview.csv adındaki girdiyi de reddeder.
Çıktı oluşturma işlemi başlamadan önce tüm kaynaklar okunur ve denetlenir. B3 yoksa veya A3 içindeki etiket beklenenden farklıysa işlem durur. Mevcut fakat boş bir B3 hücresi blank olarak işaretlenmiş bir satır oluşturur; 0 değeri 0 olarak kalır ve present şeklinde işaretlenir. Böylece eksik bir hücre, boş bir hücre ve sıfır sayımı birbirinden farklı sonuçlar verir.
Çıktı, \"x\" özel oluşturma modunu kullanır. Python belgelerine göre hedef zaten varsa bu mod hata verir. Bu nedenle program önceki özeti değiştirmez ve numaralı bir dosya adı uydurmaz. Yazma işlemi sırasında oluşan bir hata yine de kısmi bir yeni dosya bırakabilir; yazma hatasından sonra kalan dosyayı yeniden denemeden önce inceleyin. Python’ın dosya açma modları.
Programı bir Finder kestirmesine bağlayın
Kestirmeler’de Inventory Overview adlı bir kestirme oluşturun. Details bölümünü açın, Use as Quick Action seçeneğini etkinleştirin ve Finder’ı seçin. Girdi ayarlarında Files seçili kalsın, ilgisiz içerik türlerini kapatın. Apple, dosya veya klasör kabul eden kestirmelerin Finder’da kullanılabileceğini ve kabul edilen girdilerin nasıl sınırlandırılacağını belgeler. Mac’te çalışırken kestirme çalıştırma, Bir kestirmenin girdisini sınırlama.
Girdi olmadığında yapılacak işlemi Stop and Respond olarak ayarlayın ve Select the source CSV files in Finder. gibi bir mesaj girin. Böylece boş seçim belirsiz bir işleme dönüşmez. Bu seçenek ve yanıt alanı Apple’ın girdi yapılandırması kılavuzunda açıklanmıştır. Girdi eksik olduğunda verilecek yanıtı seçme.
Run Shell Script eylemini ekleyin. Shell alanını /bin/zsh olarak ayarlayın, Input alanını Shortcut Input girdisine bağlayın ve Pass Input değerini as arguments yapın. Örnek betiği aşağıdaki komutun tamamıyla değiştirin:
/usr/local/bin/python3 "$HOME/Desktop/Inventory Demo/overview.py" "$@"
Tırnak işaretlerini koruyun. Tırnak içine alınmış \"$@\", gelen argümanları ayrı ayrı ileterek boşluk içeren dosya adlarını korur. Betik yolu da aynı nedenle tırnak içine alınmıştır. zsh kılavuzu konumsal parametreleri ve tırnak içine alınmış dizi öğelerinin ayrı ayrı açılımını açıklar; Apple’ın Terminal kılavuzu da yol adlarını tırnak içine almayı açıklar. Parametreler, Terminal’de dosya ve klasör belirtme.
Kestirmeler betiklerin etkinleştirilmesini isterse Shortcuts > Settings > Advanced yolunu izleyip Allow Running Scripts seçeneğini işaretleyin. Apple bu ayarı kestirmeden betik çalıştırmaya izin verme bölümünde açıklar. Kestirmeler’in gelişmiş ayarları.
Yapılandırılan akış şöyledir: seçilen dosya nesneleri kestirmeye girer, dosya yolları kabuk argümanlarına dönüşür ve Python bu dosyaları okuyup özeti yazar. Kabuk eyleminin başarılı metin çıktısı, hedef yol adını içeren bir Created: mesajıdır. Bu mesaj CSV dosyasının kendisi değildir. Program dosyayı zaten oluşturduğundan sonradan bir kaydetme eylemi gerekmez.
Finder’da yalnızca Birch.csv, Cedar.csv ve Maple.csv dosyalarını seçin. Seçime Control tuşuyla tıklayın ve Quick Actions > Inventory Overview yolunu seçin. Kestirme görünmüyorsa More > Customize yoluyla etkin Finder uzantılarını inceleyin, ardından kabul edilen girdi türlerini yeniden kontrol edin. Apple hem Finder Hızlı Eylemler özelleştirmesini hem de bu menüye kestirme eklemeyi belgeler. Mac’te Finder’da hızlı eylemler gerçekleştirme.
Sonucu kontrol edin ve yeniden çalıştırmaları yönetin
Demo klasöründeki overview.csv dosyasını Numbers’da açın. Sağlanan sentetik dosyalar kullanıldığında içerik şöyle olmalıdır:
Source file,Cell,Value,Status
Birch.csv,B3,12,present
Cedar.csv,B3,7,present
Maple.csv,B3,0,present
Her seçili kaynak için bir çıktı satırı bulunduğunu ve dosya adlarının amaçlanan tabloları belirttiğini kontrol edin. Örnekteki değerler açıklama amaçlıdır; ölçülmüş envanter sonuçları değildir. Program bir değerin mevcut olup olmadığını bildirir; değerin geçerli bir sayım olup olmadığını denetlemez.
Bir şey farklı görünüyorsa şu tanılama adımlarını izleyin:
- Finder’da kestirme görünmüyor:
Finderayarını, kabul edilenFilesgirdisini ve etkin uzantıyı kontrol edin. - Çalıştırılabilir dosya veya betik bulunamıyor: Python yolunu ve
overview.pydosyasının belirtilen demo klasöründe kaldığını doğrulayın. B3eksik veyaA3yanlış: Programı değiştirmeden önce kaynağın dışa aktarılmış kayıtlarını ve dışa aktarma seçeneklerini inceleyin.- Beklenmeyen boş değer:
B3hücresini inceleyin; program boş değerleri kasıtlı olarak boş bırakır. - Hedef zaten mevcut: Yeniden çalıştırmadan önce önceki silinebilir özeti yeniden adlandırın veya kaynak klasörünün dışına taşıyın.
Girdi yolunu kontrol etmek için aynı kestirmeyi Terminal’den de çağırabilirsiniz. Apple, dosya girdilerini iletmek için -i seçeneğini belgeler; bir yol adını yönlendirme yoluyla vermek ise metin iletir. Aşağıdaki açık dosyaları kullanın ve çıktı seçeneği eklemeyin; çünkü çıktı oluşturma programın sorumluluğundadır. Aynı ad çakışması kuralı burada da geçerlidir. Komut satırından kestirme çalıştırma.
shortcuts run "Inventory Overview" -i \
"$HOME/Desktop/Inventory Demo/Birch.csv" \
"$HOME/Desktop/Inventory Demo/Cedar.csv" \
"$HOME/Desktop/Inventory Demo/Maple.csv"
Her yeni özet, o çalıştırmada seçilen CSV dosyalarını temsil eder. Hesap tablosundaki değişiklikler yeni bir dışa aktarma ve yeni bir çalıştırma gerektirir. Kaynak dosyanın adını korumak, bitişik etiketi denetlemek ve boş değerleri sıfırdan ayırmak, bu küçük özeti bir sonraki envanter incelemenizde kullanmadan önce doğrulamayı kolaylaştırır.
Kaynaklar
- Mac’te Numbers’da diğer dosya biçimlerine dışa aktarma — Apple.
- Mac’te Kestirmeler’de eylem listesinde gezinme — Apple.
- macOS’ta Python kullanımı — Python Software Foundation.
- Mac’te Terminal’de komutları çalıştırma ve araçları kullanma — Apple.
- csv — CSV dosyalarını okuma ve yazma — Python Software Foundation.
- Yerleşik işlevler — Python Software Foundation.
- Mac’te çalışırken kestirme çalıştırma — Apple.
- Mac’te başka bir uygulamadan çalıştırılan kestirmenin girdisini sınırlama — Apple.
- 15 Parametre — The Zsh Project.
- Mac’te Terminal’de dosya ve klasör belirtme — Apple.
- Mac’te Kestirmeler’in gelişmiş gizlilik ve güvenlik ayarları — Apple.
- Mac’te Finder’da hızlı eylemler gerçekleştirme — Apple.
- Komut satırından kestirme çalıştırma — Apple.