
Nạp thuộc tính từ CSV vào hàng loạt part: cập nhật mã vật tư, vật liệu, người thiết kế
#Python#Attribute#CSV1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Bộ phận kỹ thuật gửi bảng Excel chứa mã vật tư mới cho 200 chi tiết. Nạp CSV rồi ghi thuộc tính hàng loạt, có kiểm tra, ghi nhật ký và lưu file, tiết kiệm cả ngày làm tay.
Nạp thuộc tính từ CSV vào hàng loạt partCác bước thực hiện
- Chuẩn bị CSV. Cột file và các thuộc tính cần ghi.
- Đọc và kiểm tra. File tồn tại, giá trị không rỗng.
- Mở part và ghi. SetUserAttribute cho từng cột.
- Lưu và đóng. Save rồi Close.
- Nhật ký. Thành công/lỗi từng file.
Code tham khảo (Python)
import csv import os import NXOpen NGAY = NXOpen.Update.Option.Now def doc_csv(duong_dan): with open(duong_dan, "r", newline="", encoding="utf-8-sig") as f: return list(csv.DictReader(f)) def cap_nhat_mot_file(session, dong, cot_thuoc_tinh): duong_dan = dong["file"].strip() if not os.path.isfile(duong_dan): raise FileNotFoundError(duong_dan) part, st = session.Parts.Open(duong_dan) st.Dispose() try: if part.IsReadOnly: raise PermissionError("File chỉ đọc") for cot in cot_thuoc_tinh: gia_tri = (dong.get(cot) or "").strip() if gia_tri: part.SetUserAttribute(cot.upper(), -1, gia_tri, NGAY) s = part.Save(NXOpen.BasePart.SaveComponents.FalseValue, NXOpen.BasePart.CloseAfterSave.FalseValue) s.Dispose() finally: part.Close(NXOpen.BasePart.CloseWholeTree.FalseValue, NXOpen.BasePart.CloseModified.CloseModified, None) def main(duong_dan_csv="D:/NXLab_nhap/thuoc_tinh.csv"): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() dong_csv = doc_csv(duong_dan_csv) if not dong_csv: lw.WriteLine("CSV rỗng") return cot = [c for c in dong_csv[0].keys() if c.lower() != "file"] lw.WriteLine("Sẽ ghi các thuộc tính: " + ", ".join(cot)) ok = loi = 0 for d in dong_csv: try: cap_nhat_mot_file(session, d, cot) ok += 1 lw.WriteLine("OK " + d["file"]) except Exception as ex: loi += 1 lw.WriteLine("LỖI %s : %s" % (d["file"], ex)) lw.WriteLine("Hoàn tất: %d thành công, %d lỗi" % (ok, loi)) if __name__ == "__main__": main()Giải thích code
- Tên cột CSV (trừ cột
file) được dùng làm tên thuộc tính, viết hoa tự động. - Ô trống bị bỏ qua để không ghi đè thuộc tính hiện có bằng chuỗi rỗng.
SaveComponents.FalseValuechỉ lưu part này, không lưu cả component con.
Lỗi thường gặp
- Luôn thử trên bản sao của dữ liệu trước; ghi hàng loạt sai rất khó hoàn tác.
- Excel lưu CSV theo dấu phẩy hay chấm phẩy tùy vùng; thống nhất dấu phân cách hoặc dùng
csv.Sniffer.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.