Filterrr

안녕하세요 여러분,

도움이 필요합니다.

이 열에서 “-”, “0”, 비어 있는 값 및 열의 총 금액을 포함하는 마지막 행을 제외하도록 필터링해야 합니다.

제가 다음과 같은 접근 방식을 시도했지만, 예상대로 작동하지 않습니다.

조건 한정자를 "AND"가 아니라 "OR"로 변경해야 합니다.

또한 데이터를 읽을 때 데이터 열의 형식을 유지하고 있는지 아니면 무시하고 있는지를 고려해 볼 수 있습니다…
형식을 유지하고 있다면,
값 필터는 “-” 또는 “0” (여기서 0은 문자열로 읽힘)이어야 합니다.
그렇지 않으면
“-” 또는 0 (여기서 0은 정수로 처리됨)입니다.

SG.

안녕하세요 @dvojinovic

필터가 작동하지 않는 경우 LINQ를 사용할 수도 있습니다:

dt.AsEnumerable() _
.Take(dt.Rows.Count - 1) _
.Where(Function(r) Not String.IsNullOrWhiteSpace(r(“YourColumn”).ToString) _
AndAlso r(“YourColumn”).ToString.Trim <> “-” _
AndAlso r(“YourColumn”).ToString.Trim <> “0”) _
.CopyToDataTable()

여전히 같습니다; 해당 행들은 제거되지 않고 있습니다.

@dvojinovic 값이 어떻게 읽히는지 보려면 데이터테이블 값을 붙여넣어주세요…

따라서 필터를 적용하는 F열은 문자열로 읽힐 수 있는 소수값입니다. “-” 값이 존재할 가능성이 있기 때문입니다. 따라서 소수값과 “-” 모두를 수용하기 위해, 데이터 열은 문자열 타입이어야 합니다.

제가 첫 번째 답변에서 제안한 내용을 시도해 보셨나요?

SG.

음… 내가 여기서 걱정하는 유일한 것은 열 제목에 있는 특수 문자/문자들입니다.

말해봐요, 그 열 제목이나 위치가 변하기는 하나요? 만약 그렇지 않다면, 차라리 열 이름보다는 열 참조를 사용하는 것이 좋습니다. 그리고 예, 필터에서 “그리고” 대신 “또는” 연산자를 사용하세요.

필터를 해결했습니다 :slight_smile: 정말 감사합니다. 이제 문제는 필터링된 테이블에 들어가면 이렇게 복사된다는 것입니다.


이 부분(노란색)은 필요 없습니다.

필터링된 테이블에서 마지막 행을 삭제합니다… 이렇게 하면 마지막 행이 항상 삭제됩니다..
하지만 마지막 행이 항상 이 항목 총계를 포함하도록 합니다…
그렇지 않다면, 초기 데이터 테이블 소스에서 데이터를 읽는 다른 방법을 사용해야 합니다.
다음과 같은 방법으로 이 작업을 수행할 수 있습니다 -
옵션 1 :

  1. 시트의 마지막 행을 가져옵니다. (변수: LastFilledRow)
  2. 읽기 범위 활동에서 읽을 데이터의 범위를 전달합니다. (예: “C1:Z”+LastFilledRow.ToString();
  3. 그런 다음 앞서 설명한 대로 필터를 적용합니다.
    그럼 완료됩니다!

만약 총계가 항상 마지막에 있을 것이라고 확신한다면

옵션 2 :
필터링된 테이블 변수가 DtFilteredData라고 가정합니다.

C#

DtFilteredData.Rows[DtFilteredData.Rows.Count - 1].Delete();