顯示具有 Excel 標籤的文章。 顯示所有文章
顯示具有 Excel 標籤的文章。 顯示所有文章

星期日, 4月 15, 2012

Excel Calculation Performance 計算效能

如何加快EXCEL的計算效能呢?
首先.建議你閱讀如下文章
Excel 2010 Performance: Improving Calculation Performance
將我覺得較有用的列出如下(個人為解決ole automation時的效率問題)



1.改變為手動計算  Excel.Calculation := xlCalculationManual;
   自行呼叫EXCEL.Calculate;
2.改變 Excel.WorkBooks[1].ForceFullCalculation := True
3.關閉"multi-threaded calculation"  Excel.MultiThreadedCalculation.Enabled := False;

關於第3點要特別說明,因為發覺EXCEL預設此選項為開啟的,但在實測卻覺得EXCEL的計算並不快速! 查看原文
"You can manually specify the number of threads to run at the same time. This number can be more than the number of processors on the computer. This is useful if, for example, you have XLL user-defined functions dependent on long-running external calls to a database server. If the database server can process multiple requests in parallel, you can effectively use multithreading even on a single-processor system."
可以得知,在特定的情況下開啟才會加快計算效能,而我個人測試.不論是在文章中的"環境"或是最原始的單一EXCEL環境,關閉此選項均比開啟來得快!

星期五, 1月 06, 2012

另人討厭的OLE error 800AC472!

問題: 由程式透過OLE開啟EXCEL,不定時會出現 OLE error 800AC472!


原因: 由程式開啟的EXCEL,若是使用者有對儲存格進入編輯模式(按下F2),即後續程式若再操作EXCEL即會發生

 

解決方式:

  • 不要將EXCEL的VISIBLE設成TRUE(若EXCEL是為了呈現及時計算的資料,此方式不可行)
  • 由程式測試是否為可更新模式 請參考MSDN討論區, 但此方式我在OFFICE 2007試不出來! 且使用者有可能是按下功能列上的儲存而造成相同錯誤

後記: 不知道為什麼不提供READONLY或ENABLED可供操作! 雖然可以在程式中操作表格是否可以異動,但程式若需寫入時,還是需要將表格變成可異動,只需要在短短的這段時間內,使用者按下F2一樣破功!

星期四, 6月 26, 2008

Excel日期函式應用--計算年資,顯示星期幾

1.計算年資有幾年
DATEDIF(A1,NOW(),"y") 假設A1為2006/7/1,則結果為1年

2.計算年資含月份
IF(DATEDIF(A1,NOW(),"y")>0,
    DATEDIF(A1,NOW(),"y")&"."&DATEDIF(A1,NOW(),"m")-DATEDIF(A1,NOW(),"y")*12,
    "0."&DATEDIF(A1,NOW(),"m")
    )
此時結果為 1.11 代表 1年11個月


3.顯示星期幾,包含英文,系統格式,與數值
TEXT(2008/6/2,"AAAA") = 星期五
TEXT(2008/6/2,"ddd") = Fri
TEXT(2008/6/2,"ddd") = Friday
WEEKDAY(2008/6/2,1) = 6 //1表星期日
WEEKDAY(2008/6/2,2) = 5 //7表星期日,1表星期一