Talend에서 Excel 파일 로드
소개
엑셀 파일을 Talend로 읽어 집계하려고 했던 곳
날짜 형식의 데이터가 Excel 측에서 설정된 형식과 다르기 때문에
비망록으로 남겨 둡니다.
환경
사용환경
버전
OS
Windows10
TalendOpenStudio
7.2.1
OpenJDK
11.0.4
Office365
1902년
준비된 엑셀 파일
ExcelTestData.xlsx
※확장자 「xlsx」파일
※작업 시간: 「End」-「Start」, 셀의 서식 설정: 사용자 정의(h:mm)
누적 시간: "1행 전의 작업 시간"+ "근무 시간", 셀 서식: 사용자 정의([h]:mm)
Talend에서 로드
사용환경
버전
OS
Windows10
TalendOpenStudio
7.2.1
OpenJDK
11.0.4
Office365
1902년
준비된 엑셀 파일
ExcelTestData.xlsx
※확장자 「xlsx」파일
※작업 시간: 「End」-「Start」, 셀의 서식 설정: 사용자 정의(h:mm)
누적 시간: "1행 전의 작업 시간"+ "근무 시간", 셀 서식: 사용자 정의([h]:mm)
Talend에서 로드
실행
TalaendStudio 실행 작업에서
ジョブ readExcel を 11:35 05/10/2019 に開始しました。
[statistics] connecting to socket on port 3421
[statistics] connected
.---------+----------------------------+----------------------------+----------------------------+----------------------------.
| tLogRow_1 |
|=--------+----------------------------+----------------------------+----------------------------+---------------------------=|
|newColumn|newColumn1 |newColumn2 |newColumn3 |newColumn4 |
|=--------+----------------------------+----------------------------+----------------------------+---------------------------=|
|1 |Tue Oct 01 09:30:00 JST 2019|Tue Oct 01 18:30:00 JST 2019|Sun Dec 31 09:00:00 JST 1899|Sun Dec 31 09:00:00 JST 1899|
|2 |Tue Oct 01 09:00:00 JST 2019|Tue Oct 01 19:00:00 JST 2019|Sun Dec 31 10:00:00 JST 1899|Sun Dec 31 19:00:00 JST 1899|
|3 |Tue Oct 01 09:00:00 JST 2019|Tue Oct 01 18:00:00 JST 2019|Sun Dec 31 09:00:00 JST 1899|Mon Jan 01 04:00:00 JST 1900|
|4 |Tue Oct 01 09:30:00 JST 2019|Tue Oct 01 19:30:00 JST 2019|Sun Dec 31 10:00:00 JST 1899|Mon Jan 01 14:00:00 JST 1900|
|5 |Tue Oct 01 13:30:00 JST 2019|Tue Oct 01 21:30:00 JST 2019|Sun Dec 31 08:00:00 JST 1899|Mon Jan 01 22:00:00 JST 1900|
|6 |Tue Oct 01 09:30:00 JST 2019|Tue Oct 01 18:30:00 JST 2019|Sun Dec 31 09:00:00 JST 1899|Tue Jan 02 07:00:00 JST 1900|
'---------+----------------------------+----------------------------+----------------------------+----------------------------'
[statistics] disconnected
ジョブ readExcel が 11:35 05/10/2019 に終了しました。 [終了コード=0]
날짜 형식 정보
Excel2007의 날짜 형식을 String 형식으로 읽으면
"Tue Oct 01 09:30:00 JST 2019"
라는 형태가 되었습니다.
※날짜 표시가 문자가 되어 있으므로, Locale를 지정하지 않으면
문자열 ⇒ 날짜 변환이 불가능합니다.
스키마에서는 패턴 지정 만 가능하기 때문에
tFileInputExcel로 직접 날짜형에서는 읽을 수 없다고 생각됩니다.
※「Excel은, 날짜 정보를 파일 내부에서는 수치형으로서 값을 보관 유지하고 있어, 값이 0의 경우는 기준일로서, 통상은 「1899년 12월 31일(Excel 표기상은 1900년 1월 0) 일)"을 나타냅니다. '라는 것입니다.
참고) 파일 내부 날짜의 기준 날짜 설정
tJavaRow로 변환
tFileInputExcel 컴퍼넌트의 뒤에 tJavaRow 컴퍼넌트를 추가해
문자열을 날짜로 변환합니다.
ジョブ readExcel を 11:35 05/10/2019 に開始しました。
[statistics] connecting to socket on port 3421
[statistics] connected
.---------+----------------------------+----------------------------+----------------------------+----------------------------.
| tLogRow_1 |
|=--------+----------------------------+----------------------------+----------------------------+---------------------------=|
|newColumn|newColumn1 |newColumn2 |newColumn3 |newColumn4 |
|=--------+----------------------------+----------------------------+----------------------------+---------------------------=|
|1 |Tue Oct 01 09:30:00 JST 2019|Tue Oct 01 18:30:00 JST 2019|Sun Dec 31 09:00:00 JST 1899|Sun Dec 31 09:00:00 JST 1899|
|2 |Tue Oct 01 09:00:00 JST 2019|Tue Oct 01 19:00:00 JST 2019|Sun Dec 31 10:00:00 JST 1899|Sun Dec 31 19:00:00 JST 1899|
|3 |Tue Oct 01 09:00:00 JST 2019|Tue Oct 01 18:00:00 JST 2019|Sun Dec 31 09:00:00 JST 1899|Mon Jan 01 04:00:00 JST 1900|
|4 |Tue Oct 01 09:30:00 JST 2019|Tue Oct 01 19:30:00 JST 2019|Sun Dec 31 10:00:00 JST 1899|Mon Jan 01 14:00:00 JST 1900|
|5 |Tue Oct 01 13:30:00 JST 2019|Tue Oct 01 21:30:00 JST 2019|Sun Dec 31 08:00:00 JST 1899|Mon Jan 01 22:00:00 JST 1900|
|6 |Tue Oct 01 09:30:00 JST 2019|Tue Oct 01 18:30:00 JST 2019|Sun Dec 31 09:00:00 JST 1899|Tue Jan 02 07:00:00 JST 1900|
'---------+----------------------------+----------------------------+----------------------------+----------------------------'
[statistics] disconnected
ジョブ readExcel が 11:35 05/10/2019 に終了しました。 [終了コード=0]
Excel2007의 날짜 형식을 String 형식으로 읽으면
"Tue Oct 01 09:30:00 JST 2019"
라는 형태가 되었습니다.
※날짜 표시가 문자가 되어 있으므로, Locale를 지정하지 않으면
문자열 ⇒ 날짜 변환이 불가능합니다.
스키마에서는 패턴 지정 만 가능하기 때문에
tFileInputExcel로 직접 날짜형에서는 읽을 수 없다고 생각됩니다.
※「Excel은, 날짜 정보를 파일 내부에서는 수치형으로서 값을 보관 유지하고 있어, 값이 0의 경우는 기준일로서, 통상은 「1899년 12월 31일(Excel 표기상은 1900년 1월 0) 일)"을 나타냅니다. '라는 것입니다.
참고) 파일 내부 날짜의 기준 날짜 설정
tJavaRow로 변환
tFileInputExcel 컴퍼넌트의 뒤에 tJavaRow 컴퍼넌트를 추가해
문자열을 날짜로 변환합니다.
SimpleDateFormat sdfi = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);
SimpleDateFormat sdfo = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");
// エクセル基準日
String zeroDate="Sun Dec 31 00:00:00 JST 1899";
long dateTimeZero = sdfi.parse(zeroDate).getTime();
output_row.newColumn = input_row.newColumn;
output_row.newColumn1 = sdfo.format( sdfi.parse( input_row.newColumn1 ) );
output_row.newColumn2 = sdfo.format( sdfi.parse( input_row.newColumn2 ) );
// 時間差
long dateTimeDiff = sdfi.parse( input_row.newColumn3 ).getTime();
long dateTimeAccm = sdfi.parse( input_row.newColumn4 ).getTime();
output_row.newColumn3 = String.valueOf((dateTimeDiff - dateTimeZero )/ (1000 * 60 * 60 ) );
output_row.newColumn4 = String.valueOf((dateTimeAccm - dateTimeZero )/ (1000 * 60 * 60 ) );
※엑셀 기준일(1899-12-31 00:00:00)부터, 시각차의 밀리 세컨드를 long로 취해
(1000 * 60 * 60 )로 나누어 시간으로 변환합니다.
import java.util.Locale;
결과
tJavaRow에 상기를 설정해 실행하면, 아래와 같은 출력이 되었습니다.
ジョブ readExcel を 21:44 05/10/2019 に開始しました。
[statistics] connecting to socket on port 3829
[statistics] connected
.---------+-------------------+-------------------+----------+----------.
| tLogRow_1 |
|=--------+-------------------+-------------------+----------+---------=|
|newColumn|newColumn1 |newColumn2 |newColumn3|newColumn4|
|=--------+-------------------+-------------------+----------+---------=|
|1 |2019/10-01 09:30:00|2019/10-01 18:30:00|9 |9 |
|2 |2019/10-01 09:00:00|2019/10-01 19:00:00|10 |19 |
|3 |2019/10-01 09:00:00|2019/10-01 18:00:00|9 |28 |
|4 |2019/10-01 09:30:00|2019/10-01 19:30:00|10 |38 |
|5 |2019/10-01 13:30:00|2019/10-01 21:30:00|8 |46 |
|6 |2019/10-01 09:30:00|2019/10-01 18:30:00|9 |55 |
'---------+-------------------+-------------------+----------+----------'
[statistics] disconnected
ジョブ readExcel が 21:44 05/10/2019 に終了しました。 [終了コード=0]
xls 파일의 경우
확장자 xls 파일을 대상으로 비슷한 형식으로 로드한 경우,
아래와 같이 되었습니다.
※tFileInputExcel 컴퍼넌트의 「Excel2007의 파일 형식(xlsx)을 읽는다」로부터 체크를 제외했습니다.
ジョブ readExcel_Copy を 22:12 05/10/2019 に開始しました。
[statistics] connecting to socket on port 3940
[statistics] connected
.---------+----------+----------+----------+----------.
| tLogRow_1 |
|=--------+----------+----------+----------+---------=|
|newColumn|newColumn1|newColumn2|newColumn3|newColumn4|
|=--------+----------+----------+----------+---------=|
|1 |9:30 |6:30 |9:00 |:00 |
|2 |9:00 |7:00 |10:00 |:00 |
|3 |9:00 |6:00 |9:00 |:00 |
|4 |9:30 |7:30 |10:00 |:00 |
|5 |1:30 |9:30 |8:00 |:00 |
|6 |9:30 |6:30 |9:00 |:00 |
|null |null |null |null |null |
'---------+----------+----------+----------+----------'
[statistics] disconnected
ジョブ readExcel_Copy が 22:12 05/10/2019 に終了しました。 [終了コード=0]
표준 시각의 서식은, 표시와 같은 서식으로 읽어들여 주실 수 있습니다만,
newColumn4의 열은 파일 형식이 사용자 정의 ([h] : mm) 이었기 때문에
시간을 읽을 수 없었던 것 같습니다.
※엑셀의 표시대로 읽어 주는 것은 편합니다만,
읽을 수 없는 경우가 있는 것은, 서식이 엉망인 파일을 취급하는 경우에는 힘들군요.
Reference
이 문제에 관하여(Talend에서 Excel 파일 로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shimiyou10/items/afa683b55e056eafc442
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ジョブ readExcel を 21:44 05/10/2019 に開始しました。
[statistics] connecting to socket on port 3829
[statistics] connected
.---------+-------------------+-------------------+----------+----------.
| tLogRow_1 |
|=--------+-------------------+-------------------+----------+---------=|
|newColumn|newColumn1 |newColumn2 |newColumn3|newColumn4|
|=--------+-------------------+-------------------+----------+---------=|
|1 |2019/10-01 09:30:00|2019/10-01 18:30:00|9 |9 |
|2 |2019/10-01 09:00:00|2019/10-01 19:00:00|10 |19 |
|3 |2019/10-01 09:00:00|2019/10-01 18:00:00|9 |28 |
|4 |2019/10-01 09:30:00|2019/10-01 19:30:00|10 |38 |
|5 |2019/10-01 13:30:00|2019/10-01 21:30:00|8 |46 |
|6 |2019/10-01 09:30:00|2019/10-01 18:30:00|9 |55 |
'---------+-------------------+-------------------+----------+----------'
[statistics] disconnected
ジョブ readExcel が 21:44 05/10/2019 に終了しました。 [終了コード=0]
확장자 xls 파일을 대상으로 비슷한 형식으로 로드한 경우,
아래와 같이 되었습니다.
※tFileInputExcel 컴퍼넌트의 「Excel2007의 파일 형식(xlsx)을 읽는다」로부터 체크를 제외했습니다.
ジョブ readExcel_Copy を 22:12 05/10/2019 に開始しました。
[statistics] connecting to socket on port 3940
[statistics] connected
.---------+----------+----------+----------+----------.
| tLogRow_1 |
|=--------+----------+----------+----------+---------=|
|newColumn|newColumn1|newColumn2|newColumn3|newColumn4|
|=--------+----------+----------+----------+---------=|
|1 |9:30 |6:30 |9:00 |:00 |
|2 |9:00 |7:00 |10:00 |:00 |
|3 |9:00 |6:00 |9:00 |:00 |
|4 |9:30 |7:30 |10:00 |:00 |
|5 |1:30 |9:30 |8:00 |:00 |
|6 |9:30 |6:30 |9:00 |:00 |
|null |null |null |null |null |
'---------+----------+----------+----------+----------'
[statistics] disconnected
ジョブ readExcel_Copy が 22:12 05/10/2019 に終了しました。 [終了コード=0]
표준 시각의 서식은, 표시와 같은 서식으로 읽어들여 주실 수 있습니다만,
newColumn4의 열은 파일 형식이 사용자 정의 ([h] : mm) 이었기 때문에
시간을 읽을 수 없었던 것 같습니다.
※엑셀의 표시대로 읽어 주는 것은 편합니다만,
읽을 수 없는 경우가 있는 것은, 서식이 엉망인 파일을 취급하는 경우에는 힘들군요.
Reference
이 문제에 관하여(Talend에서 Excel 파일 로드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shimiyou10/items/afa683b55e056eafc442텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)