
Xuất toàn bộ Expression ra file CSV và nạp lại để cập nhật hàng loạt từ Excel
#Python#Expression#CSV1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Cho kỹ sư sửa tham số trong Excel rồi áp lại vào mô hình là quy trình rất được ưa chuộng. Bài này xuất expression ra CSV và đọc lại để cập nhật những dòng đã đổi.
Xuất toàn bộ Expression ra file CSV và nạp…Các bước thực hiện
- Xuất CSV. Ghi tên, công thức, kiểu của mỗi expression số.
- Sửa trong Excel. Người dùng đổi cột giá trị mới.
- Đọc CSV. Bỏ qua dòng không đổi.
- Áp dụng. Gọi Edit cho từng expression thay đổi.
- Cập nhật một lần. Chỉ gọi DoUpdate sau khi sửa xong tất cả.
Code tham khảo (Python)
import csv import re import NXOpen def xuat_csv(part, duong_dan): with open(duong_dan, "w", newline="", encoding="utf-8-sig") as f: w = csv.writer(f) w.writerow(["ten", "cong_thuc_hien_tai", "gia_tri_moi"]) for e in part.Expressions: if re.match(r"^p\d+$", e.Name) or e.Type != "Number": continue w.writerow([e.Name, e.RightHandSide, ""]) def nap_csv(session, part, duong_dan): thay_doi = [] with open(duong_dan, "r", newline="", encoding="utf-8-sig") as f: for dong in csv.DictReader(f): moi = (dong.get("gia_tri_moi") or "").strip() if moi and moi != dong["cong_thuc_hien_tai"]: thay_doi.append((dong["ten"], moi)) if not thay_doi: return 0, [] mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Nap expression") loi = [] for ten, moi in thay_doi: try: part.Expressions.Edit(part.Expressions.FindObject(ten), moi) except NXOpen.NXException as ex: loi.append("%s: %s" % (ten, ex.Message)) ma = session.UpdateManager.DoUpdate(mark) if ma != 0: session.UndoToMark(mark, "Nap expression") loi.append("DoUpdate lỗi, đã hoàn tác") return 0, loi return len(thay_doi) - len(loi), loi def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return duong_dan = "D:/NXLab_xuat/expression.csv" xuat_csv(part, duong_dan) lw.WriteLine("Đã xuất: " + duong_dan + " (điền cột gia_tri_moi rồi chạy lại phần nạp)") # n, loi = nap_csv(session, part, duong_dan) if __name__ == "__main__": main()Giải thích code
utf-8-siggiúp Excel nhận đúng tiếng Việt khi mở file.- Chỉ những dòng có điền cột
gia_tri_moimới được áp dụng, các dòng trống bị bỏ qua. - Gọi
DoUpdatemột lần cho cả lô nhanh hơn rất nhiều so với cập nhật từng expression.
Lỗi thường gặp
- Thư mục
D:/NXLab_xuatphải tồn tại; thêmos.makedirsnếu cần. - Excel đổi dấu thập phân theo vùng (dấu phẩy); chuẩn hóa trước khi gán vào expression.
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.