업무 자동화/VBA, VB.NET For Creo

Creo 자동 프로그램 만들기 #3 - beginner

ToolBOX01 2025. 11. 15. 19:19
반응형

◎ 폴더안에 있는 최신 Creo 파일 이름 가져오기

 참고 사이트 . . . 

 

IpfcBaseSession.ListFiles

□ 모든 Creo 모델 검색 하기하드디스크 내 모든 폴더를 검색하여 Creo 파일을 자동으로 읽는 기능은 데이터 관리 및 활용 측면에서 다양한 이점을 제공합니다. PorstgreSQL과 같은 무료 데이터베이스

tool-2020.tistory.com

 


▶ Function ListFiles (Filter as String, Version as IpfcFileListOpt, Path as String [optional]) as Istringseq

FunctionListFiles 함수는 Creo Parametric 세션에서 지정된 디렉토리 내의 파일 목록을 검색하고 반환하는 데 사용됩니다. 이는 파일 관리 및 자동화 작업에 매우 유용합니다.

매개변수 (Parameters)

매개변수 타입 설명
Filter String 검색할 파일의 파일 이름 필터입니다. 예: ”*.prt” (모든 Creo 파트 파일), ”*.*” (모든 파일).
Version IpfcFileListOpt 반환할 파일의 버전을 지정하는 플래그입니다.
- EpfcFILE_LIST_LATEST: 최신 버전만 반환합니다.
- EpfcFILE_LIST_ALL_VERSIONS: 모든 버전을 반환합니다.
- 기타 옵션은 정렬 기준을 포함할 수 있습니다.
Path String (선택 사항) 파일을 검색할 디렉토리 경로입니다.
이 매개변수를 생략하거나 빈 문자열 ("" 또는 vbNullString)을 사용하면 Creo 세션의 현재 작업 디렉토리를 사용합니다.

반환 값 (Returns)

IStringSeq 타입의 객체를 반환하며, 이는 발견된 파일들의 전체 경로 이름을 포함하는 문자열 시퀀스(컬렉션/배열)입니다.

예외 (Exceptions)

IpfcXToolkitInvalidDir: 지정된 Path가 유효하지 않은 디렉토리일 때 발생합니다.


▶ IStringSeq 클래스

문자열(String) 타입의 항목들을 순서대로 저장하고 관리하는 컬렉션(Sequence) 객체입니다. VBA의 배열이나 컬렉션과 유사하지만, Creo API에서 사용하는 특수한 인터페이스입니다. 이 표현은 프로그래밍에서 리스트(List)나 배열(Array)과 같은 자료 구조를 설명하는 것입니다.

"문자열(String) 타입의 항목들을 순서대로 저장하고 관리하는 컬렉션(Sequence) 객체"라는 문장은 특정 종류의 데이터를 담는 자료 구조를 설명합니다. 쉽게 말해, 이것은 문자열만 담을 수 있는 정렬된 목록이라고 생각하시면 됩니다.

주요 특징은 다음과 같습니다:

  • 제로 기반 (Zero-based): 항목에 접근할 때 인덱스(색인)는 0부터 시작합니다.
  • 순차적 접근: 항목의 위치(인덱스)를 통해 항목에 접근하거나 조작할 수 있는 메서드를 제공합니다.
  • 주요 용도: Creo API의 다른 함수(FunctionListFiles 등)가 파일 이름 목록이나 다른 문자열 데이터를 반환할 때 이 IStringSeq 타입으로 결과를 전달합니다.

 


User program : Sub ListCreoPartFiles()

Let's create a program that imports Creo "*.prt" files into the current working folder.
Use the Creo and VBA connection module. The module uses the code from the blog.

 

Creo 자동 프로그램 만들기 #2 - beginner

◎ Creating a VBA moduleCreating a VBA module to connect to Creo Parametric. Procedures within a module can be called directly from anywhere in the project, such as Module1.MyProcedure (if declared Public). ✨ Module name CreoConnect Code (module name :

tool-2020.tistory.com

 

Sample code

Displays the *.prt file names in the entered folder in the debug window.The module name that connects Creo and VBA is "Connect".

'// ============================================================= //'
'// 1. 메인 실행 함수 (파일 목록 검색 및 출력) //'
'// ============================================================= //'
Sub GetAndDisplayCleanFilenames()

    '// Creo 세션 연결 시도 //'
    Call Connect.CreoConnect
    
    If BaseSession Is Nothing Then
        '// 연결 실패 시 종료 //'
        Exit Sub
    End If

    '// 변수 선언 //'
    Dim FolderName As String
    Dim FileType As String 
    Dim Stringseq As pfcls.IStringSeq '// Istringseq는 pfcls.IStringSeq로 선언 //'
    Dim Version As pfcls.IpfcFileListOpt '// Version 옵션 //'
    Dim i As Long
    
    '// 값 설정 (사용자 코드를 기반으로 수정) //'
    FolderName = "C:\TEMP" '// 검색할 디렉토리 //'
    FileType = "*.prt"     '// 파트 파일 필터 //'
    '// 버전 옵션 설정 (EpfcFILE_LIST_LATEST는 Enum 값, Set이 아닌 그냥 할당) //'
    Version = EpfcFILE_LIST_LATEST 
    
    On Error GoTo ErrorHandler
    
    '// 1. 디렉토리 변경 (선택적) //'
    BaseSession.ChangeDirectory (FolderName) 
    
    '// 2. 파일 목록 검색 //'
    '// NOTE: ListFiles는 Path 인수가 선택 사항이 아니며, 명시적으로 포함되어야 합니다. //'
    '// 그러나 현재 작업 디렉토리가 변경되었으므로 빈 문자열을 전달해도 작동할 수 있습니다. //'
    '// 명시된 디렉토리에서 검색하려면 FolderName을 마지막 인수로 사용합니다.//'
    Set Stringseq = BaseSession.FunctionListFiles(FileType, Version, FolderName)
    
    Debug.Print "--------------------------------------------------------"
    Debug.Print "검색 디렉토리: " & FolderName
    Debug.Print "발견된 최신 파트 파일 개수: " & Stringseq.Count
    Debug.Print "--------------------------------------------------------"

    '// 3. 목록 순회 및 정리된 파일 이름 출력 //'
    If Stringseq.Count > 0 Then
        For i = 0 To Stringseq.Count - 1
            '// ConvertFilename 함수를 사용하여 확장자와 버전 제거 //'
            Debug.Print ConvertFilename(Stringseq.Item(i))
        Next i
    Else
        Debug.Print "지정된 디렉토리에서 최신 파트 파일이 발견되지 않았습니다."
    End If
    
    Exit Sub

ErrorHandler:
    MsgBox "파일 목록 처리 중 오류 발생: " & Err.Description & vbCrLf & _
           "오류 위치: " & Erl, vbCritical, "런타임 오류"

End Sub

'// ============================================================= //'
'// 2. 파일 이름 정리 함수 (FunctionListFiles 결과 처리) //'
'// ============================================================= //'
Function ConvertFilename(ByVal originalFilename As String) As String
    '// 파일 경로에서 확장자(.prt.1 또는 .prt) 이후의 문자열을 제거하여 파일 이름만 추출합니다.//'
    
    Dim lastDotPosition As Integer
    Dim lastSlashPosition As Integer '// 경로에서 파일 이름만 추출하기 위함 //'
    Dim cleanName As String

    '// 1. 전체 경로에서 파일 이름만 추출 (예: C:\TEMP\PARTA.prt.1 -> PARTA.prt.1) //'
    lastSlashPosition = InStrRev(originalFilename, "\")
    If lastSlashPosition > 0 Then
        cleanName = Mid(originalFilename, lastSlashPosition + 1)
    Else
        cleanName = originalFilename
    End If
    
    '// 2. 파일 이름에서 확장자 및 버전 제거 (예: PARTA.prt.1 -> PARTA) //'
    '// 첫 번째 점(.)을 찾아 그 앞의 문자열을 반환합니다. //'
    lastDotPosition = InStr(1, cleanName, ".") '// InStr를 사용하여 첫 번째 점을 찾음 //'
    
    If lastDotPosition > 0 Then
        '// 첫 번째 점 앞 문자열 반환 (파일명만) //'
        ConvertFilename = Left(cleanName, lastDotPosition - 1)
    Else
        '// 확장자가 없는 경우 원본 파일 이름 반환//'
        ConvertFilename = cleanName
    End If
End Function

 

by korealionkk@gmail.com


반응형