簡體   English   中英

從Delphi返回Excel數組

[英]Returning Excel Array from Delphi

我正在嘗試從Excel調用Delphi DLL,並返回一列變量數據值。 我讓dll返回一個短字符串,並且出現在單元格中。 現在,我試圖返回一列變量值。 可以進入我的代碼,但是excel中的數組全為0。

任何想法表示贊賞。

這是Excel中的宏注冊: =REGISTER("c:\\projects\\test\\delphixl.dll","GetPolicyData","KDD","GetPolicyData","Co,Pol",1,"Delphi")

我不確定參數后面的1是什么。 我在任何地方都找不到完整的文檔。

Excel中的范圍包括: {=GetPolicyData(C1,D1)}

下面是D7中的代碼。 根據用於注冊功能的excel文檔,這似乎可以。

K數據類型

K數據類型使用指向可變大小FP結構的指針。 您必須在DLL或代碼資源中定義此結構,如下所示:

typedef struct _FP
{
    unsigned short int rows;
    unsigned short int columns;
    double array[1];        /* Actually, array[rows][columns] */
} FP;


Type    
  pPolicyData = ^tPolicyData;
  tPolicyData = Record
    Rows: word;
    Cols: word;
    data: variant;
  End;

var
 pd: tPolicyData;

Function GetPolicyData(co: pShortString; pol: pShortString): pPolicyData; Stdcall;
Var
  polc: tpolcmst;
Begin
  lpro := tlifepro.create;
  lpro.opendatabases;
  polc := tpolcmst.create(lpro);
  Try
    polc.read(co^, pol^);
    pd.Rows := 2;
    pd.Cols := 1;
    pd.data := VarArrayCreate([0, 1], varVariant);
    pd.data[0] := datetostr(polc.issuedate);
    pd.data[1] := format('%.2f', [polc.modepremium]);
    result := addr(pd);
  Finally
    lpro.closedatabases;
    freeit(lpro);
  End;
End;

您已將FP記錄的數據成員( TPolicyData )聲明為Variant 應該將其聲明為Double ,並且應該是所需尺寸的數組。

在這種情況下,行數= 2且列數= 1:

TPolicyData = record
  Rows: word;
  Cols: word;
  data: array[0..1] of Double;
End;

如果行和列是動態的,那么您將需要計算FP記錄所需的內存並動態分配。 所需的內存將是:

   2 bytes for "Rows" word
+  2 bytes for "Cols" word
+  Rows x Cols x 8 bytes for "data" array of Doubles

使用Delphi 7,您將需要在數據存儲器中使用指針偏移量,以將值分配給“數組”中的各個Double元素。

但是,由於您沒有提到需要解決可變行和列的問題,因此我將不再贅述,因為這可能是多余的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM