Creo 자동 프로그램 만들기 #3 - beginner
◎ 폴더안에 있는 최신 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
