MS의 저주일지도 모르지만,
역시 윈도우에서 발생하는 버그는 상상을 초월한다.
많은 부분을 Exception을 처리해도
알 수 없는 오류가..
이번에는 Excel을 두 개 열어서 A파일의 S시트를 B파일로 복사해서
데이터를 그 포맷에 Write Range 로 쓰도록 하였다.
A파일의 S시트는 템플릿이 아니고 현재 사용하는 시트이다 보니 데이터가 있다.
그래서 Delete Range를 이용해서 삭제를 하니.. 에러가..
Excel Application Scope를 여러개 열면 뭔가 충돌이 난다.
그래서 이번에는 close workbook을 이용해서 매번 닫도록 해봤다.
그런데도 역시 Delete Range에서 알수없는 오류로 종료...
B파일의 Excel Application Scope를 열어서 그 안에서 A파일의 Excel Application Scope를 열고, Copy -> Delete -> Write를 해보았다.
역시 에러..
이번엔 분기를 해봤다.
Copy하는 경우는 Delete를 하지 않고,
Copy하지 않는 경우는 Delete를 하고..
기존 시트명이 있는 경우만 데이터를 삭제를 하는 방식이다.
이렇게 하니까 Delete Range는 성공 했으나 몇 개 실행하다보니 Excel workbook이 닫히지 않기 시작하면 다음 처리에서 에러가 발생..
두 개이상 workbook이 열리면 Write Range나 Delete Range에서 해당 파일을 찾지 못하는 것 같다.
결국 마지막 부분에 close workbook을 하여 강제로 죽여주니까 성공..
그냥 놔둬도 닫히지만 안닫힐 때도 있는 경우에 따른 변수가 생겨서
close workbook의 타이밍에 따라서 에러가 나오기도 안나오기도 하네..
윈도우즈의 버그는 ...
익셉션 처리하는게 코드 짜는 거보다 많은 거 같다..
--------
추기1.
나중에 해보니 똑같은 에러가 빈도는 줄었지만 또 났다.
그래서 시도한 것이, Excel이 열리지 않은 경우는 workbook write range로, 엑셀이 열려있는 경우는 excel application scope내의 write range로 처리하도록 한다.
1. excel application scope를 연다.
2. 처리할거 처리하고,
3. exists elements activity로 내가 원하는 이름의 excel파일이 열려있는지 확인한다.
-> 엑셀을 열고 파일명 있는 부분을 선택해서 selector를 가져오면 됨.
4. if 로 elements exists가 true면 excel application scope의 write range로, 없으면 workbook의 write range를 이용한다.
-> 여기까지 모두 1의 excel application scope 안에 넣어두면 됨.
댓글
댓글 쓰기