cell .or. excel 的外部函数(60分)

  • 主题发起人 主题发起人 饿饱鹅
  • 开始时间 开始时间
饿

饿饱鹅

Unregistered / Unconfirmed
GUEST, unregistred user!

我想用 CELL 或者 EXCEL 做报表。主要利用它们的制随意的中国式表(要使
用封闭的表,单元周围要有线,单元能计算)。
但要求,自编一个外部函数,来向 xBase 取数(比如参数是数据库名,字段名等条件)。
此函数在表单的单元中使用,返回值直接进入此单元。
我觉得CELL组件挺好,可惜太贵了。不适合我们这些计算机爱好者使用。
要是提供能实现上述功能的控件,最好。

 
F1Book1是可以为每个单元设置公式, 并可以编程为CELL赋值
 
可是F1BOOK1 不能向 CELL 那样向用户(应用程序使用者)提供
画中国式报表,
首先要求 构件能象( EXCEL 或 国产的CELL组件 )那样提供用户
丰富的制表功能。
其次要求 编程取数。

 
HI:
迫切希望能有位高手帮助小弟。
现在加分了--- +60 (因系统出错同一问题发了两次,
另外的一题也加给您,乐于助人的高手。
 
编程取数的事情作一段程序方上去就是了, 中国式的列表可以事先作一些模板.
 
对不起!
麻烦能给我一个 CELL 。OR。 EXCEL 。OR。 Formula One
的外部取数函数简单的例子吗?指导俺。
谢谢!
 
Here is a example:
1. create a new app
2. put a F1Book on Form1
3. Add a button1 captioned 'Format Cells'
4. Add a PopupMenu with a menuitem called 'PopupMenuItem1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AxCtrls, OleCtrls, vcf1, Menus;
type
TForm1 = class(TForm)
F1Book1: TF1Book;
Button1: TButton;
PopupMenu1: TPopupMenu;
PopupMenuItem1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure F1Book1RClick(Sender: TObject;
nRow, nCol: Integer);
procedure PopupMenuItem1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Row, Col: integer;
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
//Format the Selected range
procedure TForm1.Button1Click(Sender: TObject);
var
pLeft, pRight, pTop, pBottom: SmallInt;
{ 0 No Border
1 Thin Line
2 Medium Line
3 Dashed Line
4 Dotted Line
5 Thick Line
6 Double Line
7 Hairline}
pShade: SmallInt;
pcrLeft, pcrRight,
pcrTop, pcrBottom: TCOLOR;
begin
with F1Book1do
begin
EntryRC[1,2] := '这是一个表格测试';
SetSelection(2,2,4,6);
GetBorder(pLeft, pRight, pTop, pBottom, pShade, pcrLeft, pcrRight, pcrTop, pcrBottom);
SetBorder( 2, 1,1,1,1, pShade, clRed, pcrLeft, pcrRight, pcrTop, pcrBottom);
EntryRC[2,2] := '1';
EntryRC[2,3] := '2';
FormulaRC[2,4] := 'B2+C2';
end;
end;

//Show PopupMenu on a cell
procedure TForm1.F1Book1RClick(Sender: TObject;
nRow, nCol: Integer);
var p: TPoint;
begin
Row := nRow;
Col := nCol;
GetCursorPos(p);
PopupMenu1.Popup( P.X, P.y );
end;

//After click the PopupMenu, get your data from any where
//and assign the value to the cell
procedure TForm1.PupupMenuItem1Click(Sender: TObject);
begin
F1Book1.EntryRC[Row, Col] := 'Data can be calculated from a database, and put it here!';
end;

end.
 
谢谢您的例子。
对于我这样的一个DELPHI新手,从您的例子中学到了用F1BOOK的基本技巧。
procedure TForm1.F1Book1RClick(Sender: TObject;
nRow, nCol: Integer);
^这个“R”我在试的时候好象没有。会不会笔误?
(程序我已运行,很能说明问题.)
不过,我问题的原意是:提供给程序使用者 一个象 CELL 。OR。 EXCEL 这样的
界面,提供给用户一些如同 EXCEL 内部函数 一样的 附加功能.能使用户通过不
同的参数,执行相应的取数功能.
希望能再次得到您的不吝指教.
 
呜……! 为什么三天多了还不回答俺,
俺望眼欲穿!!!
这题已经加到 “120”分了!
 
对不起了兄弟,这两天重装了98,忙着恢复Delphi4。
F1Book1的Shell本身不支持函数但是可以通过OnEndEdit事件获得用户输入的字符串
进行分析, 然后重新赋值. 如果输入的是一个函数, 可以自己做一个函数解码程序计
算其值.
 
刚刚看了一下F1BOOK的帮助,他声称支持150多个函数,试了一下如ABS,ACOS,ASIN。。。SQRT等等,还真不错。
至于界面吗,F1BOOK自带的WORKSHEET DESIGNER界面还是不错的,可惜是英文的,
你或者将他翻译成中文,或者模仿EXCEL自己设计一个。
 
提供一条思路:
1.用OLE调用EXCEL
2.通过OLEOBJECT属性可以调用EXCEL内部提供的大多数方法
具体方法请参见EXCEL VBA HELP
3.为用户编写单元格的输入函数,输入参数包括数据库名称、
表名、字段名、大小、位置等。
4.上述函数向用户提供参数设置界面(初始化),
通过ODBC、DAO等通用引擎访问数据库,取数。
实现起来很麻烦,恐怕不是几百行程序就能实现的,
做得好可以当做产品卖了。
 
huizhang:
昨天,又仔细的看了F1BOOK,但是发现:F1BOOK没有象EXCEL那样的合并单元功能,那么就是说----F1BOOK 难以制出中国式的复杂表格,是不是?
> F1Book1的Shell本身不支持函数但是可以通过OnEndEdit事件获得>用户输入的字符串进行分析, 然后重新赋值. 如果输入的是一个函>数, 可以自己做一个函数解码程序计算其值.
能否给个简单例子。

谢谢您的热情回答。

 
last_hero 您好:
用OLE调用EXCEL,我也想过、试过,可是有几个问题难以解决。
首先的问题是,1、EXCEL的菜单要破坏整体应用程序的界面(菜单的隐藏问题)。
2、这个单元格函数在EXECL的什么事件中插入。就是说我提问的本意,这个函数怎么写?
函数的内容,如连接数据库、计算等等,这我想大家都没问题。

先行谢过!


> 做得好可以当做产品卖了。
^^^^^^^没想过这个问题! :)

 
合并单元格是有的, 在FormatCell里面有一个AccrossCells.
检索一下已答问题, 我曾经回答过.
 
huizhang您好:
没有吧,accrosscells 的属性您肯定没有对我讲过。
能否给一个关于 OnEndEdit事件的简单例子。
谢谢!
 
谢谢,
大富翁太慢了。
我有一个月未能进入了。
直到看见:202。10。11。2:80
问题还没解决太长时间了还是谢谢大家。
 
后退
顶部