2014/04/16

Excel Group command with ExcelXP Component

 ExcelWorksheet1.Range[_RangeBeg+':'+_RangeEnd,EmptyParam].Rows.Group(EmptyParam,EmptyParam,EmptyParam,EmptyParam);

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 年版已經是爛中極致)

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

2014/02/21

DsnDBCst.dcu 找不到的問題

DsnDBCst 是 DSDesign 元件中的檔案之一。

但在 Delphi 7 之後就找不到這個檔案了,所以在編譯舊元件時可能會出錯。
而且也找不到這個神奇元件在哪邊。

所幸,萬能的 Google 大神引領我,找到了替代品
 「VclDesigner」

將原有的 uses DsnDBCst 拿掉,並且引入 VclDesigner 到 Package 的 Requires 區,如此一來就可以了。

但可能編譯時,還是會失敗。

實際看過網路上流傳的 DsnDBCst.pas 後,才發現原來這個檔案的功用,有一半的功能是做 ResourceString 映射功能,如果有需要也可以自己補在需要出現的地方。

See Also:
[Pascal Fatal Error] DSDesign.pas(18): F1026 File not found: 'DsnDBCst.dcu'
kbmMemTable missing DSDesign.dcu
DsnDBCst为何物?