E3D 내에 Excel import
Pml Example 3
E3D Excel import
E3D 를 사용하면 엑셀파일을 그대로 E3D내에 가져와서 가공해야할 경우가 종종 있습니다.
예를들어 D드라이브에 test.xlsx라는 엑셀 파일에 아래와 같은 데이터가 들어가있다고 가정해봅시다.
우선 전체 코드입니다
!table안에 Array의 형태로 엑셀 데이터가 들어가게 됩니다
import 'GridControl'
handle ANY
endhandle
using namespace 'Aveva.Core.Presentation'
!path = |D:TEST.xlsx|
!grid = object NETGRIDCONTROL()
!data = object NETDATASOURCE(|imp|,!path)
!grid.bindToDataSource(!data)
!headings = !grid.GETCOLUMNS()
!table = object array()
do !i index !headings
!column = !grid.GETCOLUMN(!headings[!i])
!table[!i] = !column
ENDDO하나하나 살펴보자면
E3D 기본 DLL인 GridControl을 사용하기 위해 Import 해줍니다.
import 'GridControl'
handle ANY
endhandle
using namespace 'Aveva.Core.Presentation'아래 부분 NETGRIDCONTROL 과 NETDATASOURCE는 GridControl 안에 들어있는 Method인데
별도로 추후에 자세히 올리겠습니다 일단 고정적으로 사용해주시면 됩니다.
$* 파일 경로
!path = |D:TEST.xlsx|
$* Grid 선언
!grid = object NETGRIDCONTROL()
$* |imp| 이부분은 아무 텍스트나 와도 상관이 없습니다 abcd 이렇게 써도 무관
$* Path만 잘 지정해주면 됩니다.
!data = object NETDATASOURCE(|imp|,!path)
$* Grid에 엑셀 데이터를 넣어줍니다.
!grid.bindToDataSource(!data)
$* Grid의 heading 값을 가져옵니다.
!headings = !grid.GETCOLUMNS()
$* 실제 데이터가 들어갈 Array를 선언합니다.
!table = object array()위까진 엑셀 데이터를 >> Grid에 넣는 과정이였고
이제 Grid의 데이터를 편하게 쓰기 위해 Array형태로 변경합니다.
do !i index !headings
!column = !grid.GETCOLUMN(!headings[!i])
!table[!i] = !column
ENDDO이렇게 되면 !table 안에 데이터가 들어갑니다.
q var !table 명령어를 쳐보면
<ARRAY>
[1] <ARRAY> 3 Elements
[2] <ARRAY> 3 Elements
[3] <ARRAY> 3 Elements이런식으로 Array안에 Array가 들어가있습니다.
Array안의 Array정보를 보기위해 이런식으로 명령어를 사용하면
q var !table[1]
q var !table[2]
q var !table[3]
<ARRAY>
[1] <STRING> 'A'
[2] <STRING> '1'
[3] <STRING> 'D'
<ARRAY>
[1] <STRING> 'B'
[2] <STRING> '2'
[3] <STRING> 'E'
<ARRAY>
[1] <STRING> 'C'
[2] <STRING> '3'
[3] <STRING> 'F'
이런식으로 데이터가 들어가 있습니다.즉 2차원 배열 상태로 데이터가 들어가있습니다.
!headings[1] !headings[2] !headings[3]
!table[1][1] !table[2][1] !table[3][1]
!table[1][2] !table[2][2] !table[3][2]
!table[1][3] !table[2][3] !table[3][3]