~excel 是筆者認為 20 世紀以來,人類最偉大的發明之一。~

 

    這句話我說了不下二十次,似乎一直沒人讚同;

    20 世紀另一個更偉大的發明,筆者認為是網路的普及,也是沒人讚同。 

 

我認為它偉大之處不只在於視覺化的處理,而是早覺得它本身就是一個小型資料庫、小型程式語言,

不然現在市面上不會有那麼多書是寫 excel 數值分析、excel 統計分析、excel 資料庫分析 ... etc。

補一下,它拿來做簡易的分析可以,但所有的問題只要規模變大,它會顯得較為耗時,

此時通常會真的用其它的程式語言撰之。

< 另外其實 excel 部份的數值計算有用到 Evolutionary ,被納為規劃求解的一種方法。>

 

言歸正傳,一些專案的進行必須 以 MFC 開發 excel ,除了 節哀 外我不知道還能給予什麼祝福

本身接過四、五個關於 MFC :: Excel 的案 ( 有大有小 ),

再加上以前到現在總總的問題,下面是一些心得。

 

1.  先確定要讀取 / 寫入的 是 .xls 而不是 .csv,一般對工程人員而言,csv 是足夠的。

2.  如果真的是 xls(x) ,先去 協商能不能寫成 csv 做處理

3.  如果不能寫成 csv 做處理,再協商是不是一定要用 MFC 開發?可以的話改用 VBA 開發

4.  如果不能用 VBA 開發,能不能改用 AutoIt、VB、BCB、C#、.Net ... 等其它程式語言開發

 

在接案前我曾認真與洽案人員洽談過,最後只有一位同意不以 MFC 做為開發。

 

對於 Excel 之開發,筆者認為程式語言挑得對不對是件重要的事,

我蠻好奇一點的事情是,若某公司之前所有的專案都是用 MFC 進行,

而這次專案必須與 Excel 做結合,所以就一定要用 MFC 繼續開發嗎?

這件事筆者是持著反對的看法,因 MFC 本身開發 excel 本身較為複雜,

即使我把 source code 無條件釋出,轉由該公司負責 maintain ,

我認為對他們也不是什麼好事。

 

總之我非常不能體諒堅持用某種程式語言,去開發已知是這個程式語言弱項的東西。

當然我只是雇傭,在試著敘述我的立場後得到搏回,我只會「電電」做事,免得惹人怨。

 

若真的要開發 excel 時,以筆者自己的經驗認知,選擇程式語言的優先順序會是

 

VBA  -> AutoIt -> C# ->   VB -> BCB 

 

我沒放 MFC 上去,原因是我主觀認為,大概不會有其他程式語言會比 MFC 做起來還麻煩吧。

< 當然如果硬要說 "組語也可以做 excel 開發" ,那我沒話說 >

個人認為 VBA 是首選的原因不用說,是因它與 M$ excel 結合性較佳,

但 VBA 做有兩項缺點 : 不能轉成執行檔、不能包成 dll (這點可能有誤,目前我沒看過別人包)。

 

AutoIt 這套 script language 算是個人私心,它對於簡易的 excel 操作也有一些 function 存在。

優點是它可以生成執行檔,而且 UI 介面做得也很 OK,缺點是它也不能包成 dll,這點很傷,

因其實 codeproject 裡面本身就有一份 簡易的 excel library,等於間接被淘汰。

至於 C#  /  dot Net 選項不用說,微軟對這方面照顧有佳。

 

若真不得已 要以 MFC 開發 excel ,下面連結為以前所參閱之網頁,

< 也曾在他網 po 過 > ,沒再整理過,顯得有點雜亂,有興趣網友可供參考。

 

1. 如何使用MFC和類型庫創建自動化項目 < 基本初始化 >

2. VC中調用EXECL模板生成報表 < 設定文字、表格控制 >

3. 針對Excel表格文件操作的編程實現 < CSpreadSheet 應用 >

4. 直接通過ODBC讀寫Excel表格文件  < ODBC 讀寫 >

5. 如何將 Excel 自動化,然後知道使用者關閉 Excel < 基本初始化 >

6. 如何使用自動化來修改 Office 功能表 < excel 之 OLE/COM 元件關係 >

7. 如何建立使用 MFC 和型別程式庫的自動化專案 <初始化,與 1 似  > 

8. (轉貼整理)VC讀取Excel文件內容(Excel自動化編程) < 基礎介紹 >

9. VC++中實現Excel自動化編程 <線上 pdf, 6 頁, 主要做資料讀寫>

10. 自動化excel,如何選中一列,並將該列的數據格式設置為時間 < excel 資料設定 >

11. VC:數據輸出在多個Excel工作表中 < 使用 ADO 技巧 >

12. 純 C++ 代碼創建並保存 EXCEL 文件 < 會 init 後可先看這個 >

13. vc 如何操作 excel2003(注意一定是2003) 編程 < 這篇對於儲存格格式有介紹怎麼寫 >

14. 如何將C語言的輸出倒入Excel工作表 < 裡面有幫你包一些 function 出來 >

15. 怎麼用VC++對EXCEL表格進行讀取、排序、輸出 < 排序功能較為罕見,但這篇有提到 >

16. VC操作Excel-Automation版 < 基本操作  >

17. VC操作Excel(轉載)< 基本操作,建議這篇要看 >

18. 自動產生Excel檔 < 這篇是很重要的參考資料 !!>

       C程式語言 -> C語言大學-> MFC實例 -> 自動產生Excel檔

19. CSpreadSheet - A Class to Read and Write to Excel and Text Delimited Spreadsheet

      < 目前提供免費操作 excel 之 class>

20. BasicExcel - A Class to Read and Write to Microsoft Excel < 提供包好的 excel class 函數, 包含 AddSheet >

21.  Use Visual Studio 2008 C++/CLI to Automate Excel < 用 CLI 去畫 excel 的圖 >

22.  How to use Managed C++ to Automate Excel < .Net/CLI 去畫 excel 圖 >

23. ????????????? (看不懂日文..)  < 個人認為這個寫得最全,無奈不會日文。建議配合 dr.eye 用日譯繁功能 >

 

 

最後包的 class 大概的功能是

 

1. Sheet 操作部份

a. long GetSheetNum();
b. BOOL InsertSheet(long nIndex, CString SheetName); // 插入 sheet
c. BOOL DelSheetIndex(long nIndex); // start from 1 // 刪除
d. BOOL SetActiveSheet(long nIndex); // 設定當前 Sheet

2. 儲存格部份

void ClearRange(CString StartCell, CString EndCell);
-- 清除一個 range 不要逐一 cell 去清, 速度會慢很多

3. 儲存格讀取部份

CString ReadAsString(CString Cell); // as string read
CString ReadAsInteger(CString Cell, int &value);
CString ReadAsDouble(CString Cell, double &value); // as double read
CString ReadAsDate(CString Cell, SYSTEMTIME& Date);
CString ReadAsTime(CString Cell, SYSTEMTIME& Time);
CString ReadAsDateTime(CString Cell, SYSTEMTIME& DateTime);

4. 排序功能

void Sort1(CString StartCell, CString EndCell,
CString IndexCell, long DeCrement);
-- excel 排序,可以有很多鍵值,我只寫到三種鍵值排序

5. 圖表功能

// 畫圖表, ChartType 記得有近 50 個數值,可以畫不同圖表
void DrawChart(UINT StartX, UINT StartY, UINT EndX, UINT EndY,
long ChartType, short PlotBy, short StartFrom,
CString TitleString, CString X_String, CString Y_String,
UINT ChartStartX, UINT ChartStartY, UINT width, UINT height);

void SaveChart(CString FullBmpPathName); // 將畫出來的圖表存成一張圖片

 

SetCeil 之類簡易的也有,就沒再放上了。

後來真的念了 C++ 後,才知道原來自己包得很差,不過當時至少「還可以用」就是了。

另外後半段還有一些 Merge Ceil 之類的功能沒再加進去,

這份 class 隨著 論文牛奶事件 消失在這世界上。

 

提醒一下,一些 componment 在匯入的時候可能會發生

warnning messagebox:EXCEL.exe 自我登錄失敗

這時候就..  隨 「機」 而安   吧 Orz

後來我重灌後還是必須待在 VC6 開發,沒用較新版的 vs 做開發。

< 言下之意作業系統也是 XP,而且移除新注音 > 

edisonx 發表在 痞客邦 PIXNET 留言(0) 人氣()