2014/03/20

TExcelWorksheet 取值

在開始介紹 ExcelWorksheet 如何取值前,我們要先了解 Excel 的專業術語:



上面的「A、B、C」是 Column,座標軸 X,以下用 COL 表示。
左邊的「1、2、3」是 Row,座標軸 Y,以下用 ROW 表示。

所以我們通常會使用座標方式來指定游標所在的位置,常見用語有使用名稱「C3」或座標值「3, 3」之類的表達方式。

在這邊要注意的是,在Excel中座標的表示法是「ROW, COL」。並不是常見的「COL, ROW」

所以我們得知 ExcelWorksheet 的座標取值方法是:

ExcelWorksheet.Cells.Item[ROW, COL]

要使用名稱定義也可以,以下都是正確的作法

//property Range[Cell1: OleVariant; Cell2: OleVariant]: ExcelRange read Get_Range;
ExcelWorksheet.Cells.Range['A1', EmptyParam].Value;
ExcelWorksheet.Cells.Range['A1',       'A1'].Value;
ExcelWorksheet.Cells.Range['A1', EmptyParam].Value2;
ExcelWorksheet.Cells.Range['A1',       'A1'].Value2;

請注意!參數Cell1, Cell2不能為數字,也不能為 nil,否則會報 「OLE error XXXXXXXX」 的錯誤!


追加補充,如何取得 ExcelWorksheet 的列印範圍:

ExcelWorksheet.UsedRange[_LCID].Columns.Count
ExcelWorksheet.UsedRange[_LCID].Rows.Count

到這邊為止,已經可以處理絕大部分Excel檔案匯入的工作了。

想知道 ExcelWorksheet更多的功能嗎?去找吧,所有功能屬性都寫在 ExcelWorksheet 的元件裡!

2014/03/18

ExcelXP TExcelWorksheet 連結 Worksheet

 前情提要:
1.      使用 Delphi ExcelXP 元件開啟 Excel 和活頁簿(Workbook)
2.      把開啟的 Excel 和活頁簿關閉

這一節我們要聊的是「工作表」(Worksheet) 連結 (是的,不含操作)

ExcelWorksheet 這個元件的連結方式比較特別,它必須:
1.      先指定前一節已開啟的ExcelWorkbook 指向哪一個 Worksheet
語法如下:
ExcelWorkbook.Worksheet[________]

        這邊的填空處可以放兩種類型,一種是文字,另一種就是數字:
        也就是 Worksheet 的「名字」或「排列的序號」
       
        以這個例子來說,我們要開啟「Sheet3」時,程式可以這麼寫:
        ExcelWorkbook.Worksheet[Sheet3]
       
        ExcelWorkbook.Worksheet[2]
        序號是按左至右,從 1 起始。

2.      ExcelWorksheet 元件連結或轉型後立即使用
I.            ExcelWorksheet 元件連結:(經常呼叫時使用)
ExcelWorksheet.ConnectTo(ExcelWorkbook.Worksheet[Sheet3] as _Worksheet);
II.         轉型後立即使用:(臨時呼叫時使用)
(ExcelWorkbook.Worksheet[Sheet3] as _Worksheet).ExcelWorksheet屬性

        例如:
    ExcelWorksheet.ConnectTo(ExcelWorkbook.Worksheet[Sheet3] as _Worksheet);
   _YYYMM := ExcelWorksheet.Cells.Item[y, x];
    _CONNO := ExcelWorksheet.Cells.Item[y1, x1];
   
    _CURID := (ExcelWorkbook.Worksheet[Sheet3] as _Worksheet).Cells.Item[y1, x1]


        不知道 Cells, Item 的屬性也沒有關係,下一節我們會再聊到。

2014/03/12

無狀態的DataSnap寫法參考


由於DCOM可以在網際網路直接傳送 OleVariant,所以有網友提出這個方案,可擴充機能很高。

努力學習中!

※※※ 已經 2014 年 4 月份完成 COM / RESTful 中間層的建置,目前看起來還是 COM 版的 DataSnap 效能要好。 ※※※

資料來源:

2014/03/10

悲劇的版本 Delphi 2009

悲劇的版本 Delphi 2009

就我印象所知,它是第一個支援 Unicode 的版本,也是被駡最慘的一個版本
(當時我以為 Delphi 2006 年版已經是爛中極致)

當我還不信邪的要使用它的時候,才知道這箇中奧秘