2012-06-29 2 views
2

데이터베이스에서 수식과 데이터가 몇 가지 있습니다. ExcelDna를 통해 프로그래밍 방식으로 모든 수식을 새로 고치고 싶습니다. 이러한 모든 수식은 ExcelFunctions이며 ExcelCommand name = "새로 고침"을 실행하여 시트를 Excel로 다시 계산하려고합니다.Excel Dna - 모든 데이터 소스 및 수식 계산 새로 고침

저는 다음을 사용하지만 네이티브 엑셀 함수 만 새로 고칩니다. NOW(), SUM() 등 ExcelDna 함수에서 새로 고침을 호출하지 않습니다? 사전에

[ExcelCommand(MenuName="Refresh", MenuText="Refresh" )] 
     public static void GetPositionCommand() 
     { 
      XlCall.Excel(XlCall.xlcCalculateNow); 
     } 

감사합니다 ... xlcCalculateNow은 Excel에서 다시 계산해야 할 알고 수식을 계산합니다

+0

Excel 2007을 사용하고 있습니다. Office 2007 – Ocean

답변

5

. Excel 함수를 '휘발성 (Volatile)'으로 표시하면 매번 다시 계산되는 Excel의 NOW() 함수처럼 동작합니다.

[ExcelFunction(IsVolatile=true)] 
public static string MyVolatileNow() 
{ 
    return DateTime.Now.ToString("HH:mm:ss.fff"); 
} 

을 기본 비 휘발성 경우와 비교 : 엑셀 DNA하면이 작업을 수행 할 수 있습니다 엑셀은 RTD 서버를 만들거나 새를 사용하는 것입니다에

[ExcelFunction] 
public static string MyNow() 
{ 
    return DateTime.Now.ToString("HH:mm:ss.fff"); 
} 

데이터를 푸시하는 또 다른 방법 Excel 용 Reactive Extensions (RxExcel)은 최신 Excel-DNA 체크인 기능을 지원합니다. 여기에 일부 정보 - http://exceldna.codeplex.com/wikipage?title=Reactive%20Extensions%20for%20Excel.

+0

감사합니다. 이런 종류의 일을했습니다. 그러나 나는 다음을 선호한다. 저는 모든 ExcelFunction을 새로 고침하는 Ctrl + Shift + F9를 사용하여 NonVolatile 함수를 만듭니다. 내가 휘발성이된다면; 그것은 Ctrl + Shift + F9를 치면 업데이 트의 무한 루프에 간다. .. 확실하지 유장 ... – Ocean

+0

휘발성으로 표시된 기능은 사용자가 열 크기 조정과 같은 동작을 취할 때마다 새로 고쳐집니다. 프로그래밍 방식으로 선택한 기능을 새로 고칠 수 있습니까 (사용자 정의 명령이 실행될 때만 가능합니까?)? –

2

Ctrl + Alt + F9 (Excel 2013 이상)를 눌러야 세포를 새로 고칠 수 있습니다!

2

이 (2013 Excel에서 적어도) 작동 : (당신은 Ctrl + Alt + F9를 누르면 같은 유사),

Excel.Application excelApp = ExcelDnaUtil.Application as Excel.Application; 
excelApp.CalculateFull(); 

또는

Excel.Application excelApp = ExcelDnaUtil.Application as Excel.Application; 
excelApp.CalculateFullRebuild(); 

첫 번째는 모든 통합 문서를 다시 계산 두 번째를 모든 수식을 다시 입력하는 것과 비슷합니다. ExcelDNA 기능에 대한 속성에 IsVolatile=false을 설정

+0

이것은 Excel 2010에서 나에게 적합하지만 IsVolatile = false UDF로 작동합니다. –

0

시도 :이 간단한 변화가 극적으로 CPU 사용량을 삭제

[ExcelFunction(Description = "Subscribe to real time data.", IsVolatile = false, Category = UDF_CATEGORY)] 
public static object XSub(  
    string param1) 
{ 
    // Implementation here. 
} 

. 하나의 큰 스프레드 시트에서 CPU 사용률이 100 % (즉, 지속적으로 다시 계산되고 따라 잡을 수 없음)에서 20 %로 떨어졌습니다.

IsVolatile=true을 사용하면 입력 내용이 변경되지 않은 경우에도 Excel에서 함수의 출력 값을 정기적으로 다시 계산합니다.

IsVolatile=false으로 Excel은 입력이 변경된 경우에만 함수의 출력 값을 다시 계산합니다.

IsVolatile=false을 사용하면 Excel이 대부분의 시간 동안 스프레드 시트의 90 %를 다시 계산하지 않아도되기 때문에 모든 것이 더 효율적입니다.

이 말처럼, 일부 기능은 IsVolatile=true (예 : 현재 시간을 반환하는 함수)을 필요로 할 수 있습니다.