엑셀 읽기 후에, Datatable 에서 날짜 필터 적용 방법 문의

image

위와 같은 형식의 엑셀 파일이 있습니다. 사용량, 총재고 는 통화 형식이고, 발주일 은 날짜 형식입니다.
위 파일을 이용해, 예를 들어 발주일이 오늘부터 2주일 ( 2022-03-23~ 2022-03-29)에 해당하는 데이터만 정제해서 메일을 보내려 합니다.

workbook > read range 액티비티 이용 후(PreserveFormat 미적용), Filter Data Table 액티비티에 now.addDays(1) and now.addDays(14) 를 이용한 필터 를 적용하면 원하는 데이터를 가져오는데.
이렇게 했을 경우 통화 형식의 데이터는 천단위로 콤마가 표시되지 않습니다. ( ex: 8,260 )

천단위로 콤마 표시를 위해 read range 액티비티 이용(PreserveFormat 적용) 하면, Filter Data Table 액티비티에 now.addDays(1) and now.addDays(14) 를 이용한 필터가 적용이 되지 않습니다. 문자열로 인식한건가 해서, 문자열로 바꾸거나 DateTime 형식을 바꿔서 핕터를 해봐도 적용이 되지 않네요.

셀렉트 문을 이용해,
downloadDT.Select("[발주일] >= #"+Convert.ToDateTime(now.AddDays(1).ToString).toString+"# AND [발주일] <= #"+Convert.ToDateTime(now.AddDays(14).ToString).toString+"#").CopyToDataTable
이렇게 했을 경우는

Min (30) must be less than or equal to max (-1) in a Range object
와 같은 에러가 발생하네요.

이러한 방법의 해결방법이나
다른 방법으로 결과를 도출할 수 있을지 문의를 드립니다!

read range는 PreserveFormat 적용 시키시고 아래 Linq문 시도해보세요.

downloadDT.AsEnumerable.Where(function(row) CDate(row(“발주일”)) >=시작일 AndAlso CDate(row(“발주일”))<=종료일 ).Select(function(row) row).AsDataView.ToTable

시작일, 종료일은 Datetime 변수로 선언해서 사전에 알맞는 값 Assign을 하시거나 기본값 처리 해주시면 됩니다. 위 코드에 시작일과 종료일 대신 Now.AddDays(1) / Now.AddDays(14)을 직접 넣으셔도 되긴 될 겁니다.

PreseveFormat 켜면 아마 dt내 각 컬럼의 데이터 타입을 string으로 설정하게 되어있어서 filter 액티비티로는 날짜 비교가 안 될 것 같습니다.

말씀하신 내용대로 하니까 제대로 적용되네요! 정말 감사합니다!
계속 rpa를 하다보니까, linq 나 셀렉트 쪽을 다뤄야 해결되는게 생기네요… 더욱 공부해야겠습니다!

오늘 좋은 하루 보내시기를:)

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.