NX Lab

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

  1. 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… Xuất toàn bộ Expression ra file CSV và nạp…

    Các bước thực hiện

    1. Xuất CSV. Ghi tên, công thức, kiểu của mỗi expression số.
    2. Sửa trong Excel. Người dùng đổi cột giá trị mới.
    3. Đọc CSV. Bỏ qua dòng không đổi.
    4. Áp dụng. Gọi Edit cho từng expression thay đổi.
    5. 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-sig giúp Excel nhận đúng tiếng Việt khi mở file.
    • Chỉ những dòng có điền cột gia_tri_moi mới được áp dụng, các dòng trống bị bỏ qua.
    • Gọi DoUpdate mộ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_xuat phải tồn tại; thêm os.makedirs nế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.