2017-02-12 6 views
-2

웹 API 호출을 수행하는 Excel udf를 작성했으며 웹 API 호출 대신 번들링하여 함수 값을 새로 고치면 전반적인 성능을 향상시키고 싶습니다. 기능의 각 인스턴스를 가지고 독립적 인 호출을합니다. 데이터 새로 고침이 트리거 될 때 열려있는 통합 문서 내 udf 인스턴스 수를 계산할 수 있고 업데이트가 필요한 데이터의 식별자를 수집하고 내 카운터가 udf 인스턴스 수에 도달 할 때만 웹 API 호출을 실행할 수 있다고 생각했습니다. . 보다 효과적인 접근 방법에 대한 제안?네트워크 호출을하는 Excel UDF : 성능 향상 방법

+4

도와 드리겠습니다. ** 현재 코드 게시 **. –

+0

현재 코드 작성에 대한 지원을 찾지 않고 있으며, 가장 확실한 구현 방법을 선택하기 위해 노력하고있었습니다. 제 생각에는 확실하지 않지만, 아직 코드를 작성하지 않았습니다. – noplace

+2

"나는 excel udf를 썼다", "나는 아직 어떤 코드도 쓰지 않았다"- 응? – YowE3K

답변

0

My Excel-DNA 기반 Addin [1]은 quandl.com 및 tiingo.com에 HTTP GET 요청을하고 실시간 업데이트를 위해 tiingo.com에 웹 소켓을 엽니 다. HTTP GET 요청은 백그라운드 작업자 스레드로 전달되어 동기식으로 처리되며 결과는 캐시됩니다. 간단한 워크 시트 함수는 캐시의 결과를 셀로 가져옵니다. websocket 업데이트는 RTD에 의해 셀에 푸시됩니다. 모든 출처는 github [1]에 있습니다. C#으로 코딩하는 경우 Excel-DNA [2]를 사용하는 것이 좋습니다.

[1] https://github.com/SpreadServe/SSAddin

[2] https://github.com/Excel-DNA/ExcelDna

+0

그래서 올바르게 얻었 으면 백그라운드에서 소스에서 데이터를 검색하는 작업자 스레드가 있으며 UDF는 이미 로컬로 사용할 수있는 데이터로 작업 표를 적시에 갱신합니다. 내가 대신 생각한 것은 UDF가 어떤 데이터를 검색해야하는지에 대한 일종의 목록을 채우는 것이 었습니다. 그리고 모든 UDF가이 목록에 "게시"되었을 때만 데이터를 가져오고 가져올 것입니다. 이 작업을 올바르게 수행하려면 Excel 워크 시트에 사용 된 UDF의 수를 정확히 알아야합니다. 내 아이디어에 대한 의견이 있으십니까? – noplace

0

@noplace : 과거의 I 워크 시트로 UDF 호출을 추적 XLL을 구현 하였다. 워크 시트는 실시간 시장 데이터에 대한 응답으로 옵션 가격을 계산했으며, 다음 시장 데이터가 계산주기를 시작하도록 허용하기 전에 모든 계산이 완료되었는지 확인해야했습니다. 보다 일반적으로 UDF 호출의 타이밍과 순서를 결정하는 Excel의 종속성 그래프 엔진은 블랙 박스입니다. 따라서 타이밍과 순서를 가정 할 수는 없습니다. 그래서 두 세트의 UDF가있는 것이 좋습니다. 첫 번째 집합은 목록을 채우고 배경 데이터 수집을 준비합니다. 데이터 수집 결과는 코드에서 캐시로 이동합니다. UDF의 두 번째 세트는 캐시에서 데이터를 가져옵니다. 이러한 휘발성을 만들거나 트리거 매개 변수를 사용하여 호출을 제어 할 수 있습니다. SSAddin에서 RTD를 사용하여 트리거를 스프레드 시트로 다시 밀어 넣으면 캐시 읽기 UDF가 호출 될 수 있습니다. 이 모든 것은 위에 제공된 SSAddin 링크에 코딩되어 있습니다.

+0

나는 네가 믿는 완벽한 모범이라고 생각한다. 네트워크 통화를 최적화하고 싶다면 요청한 모든 시장 기호에 대해 업데이트 된 데이터를 검색하여 번들로 묶고 싶을 것입니다. (1) 새 UDF 호출 추가 (참조 된 시장 기호가 새 목록이거나 이미 목록에 있는지 여부를 이해하는 것이 필요합니다), (2) UDF 제거 호출 (이것이 목록에서 제거 될 수 있도록 심볼에 대한 마지막 참조인지 이해하는 것이 필요하다), (3) UDF 호출과 함께 저장된 워크 시트 열기. 추가 기능을 살펴 보겠습니다. – noplace

0

내가 중복 된 것을 말하는 경우 그만합니다. 네트워크가 한 번 호출 한 다음 통합 문서의 다른 용도로 결과를 참조 할 수있는 단일 시트가 있어야합니다.

한 번에 하나씩 시트를 계산할 수 있으며이 경우 전체 계산서를 다시 계산하기 전에 먼저 네트워크 API 시트를 다시 계산해야합니다.

+0

그것은 이해가되지 않을 수도 있지만 동일한 시트에서도 중복 될 수 있습니다. 여기서 나의 의도는 네트워크 트래픽을 최적화하는 것이지만 동일한 데이터에 대해 동일한 엑셀 클라이언트에서 오는 여러 요청을 피하면서 서버 측 워크로드를 최적화하는 것입니다. – noplace