如何调用EXCEL中的函数,如求和、线性规划等(100分)

  • 主题发起人 主题发起人 zzx8866
  • 开始时间 开始时间
Z

zzx8866

Unregistered / Unconfirmed
GUEST, unregistred user!
如何提取EXCEL中的函数,如求和、线性规划等。
 
调用Excel的函数,就相当于给结果单元格设置公式,

procedure TForm1.Button1Click(Sender: TObject);
begin
xlapp := CreateOleObject('excel.application');
xlapp.visible := true;
xlApp.DisplayAlerts := False;
xlapp.workbooks.add;
xlSheet := xlapp.workbooks[1].sheets[1];
end;

// set excel cell value
procedure TForm1.Button2Click(Sender: TObject);
begin
xlSheet.Cells(1, 1) := '1';
xlSheet.Cells(1, 2) := '2';
xlSheet.Cells(1, 3) := '=SUM(A1:B1)'; //求和
xlSheet.Cells(1, 4) := '=AVERAGE(A1:B1)';//求平均值
end;
 
bluerain:
你好,具体内容是这样:我想在程序中对几个表的数据通过直接调用EXCEL中的函数
进行线性规划求解,但EXCEL界面不能显现给用户,也就是不在office环境下调用EXCEL
的线性规划函数算出结果。这行得通吗?
上面您给我的代码也给了我很大的启发,望进一步指教.
 
很遗憾,要让你失望了,因为Excel的统计函数并不是以独立的dll形式存在的(或者除了
微软,没有人知道),是整合在一起的.所以如果不使用Excel对象是无法使用的.
如果非要用它的统计函数,也可以生成对象后,设置xlapp.visible := false;这样就隐藏
了Excel窗口,象Average等函数其实也可以不使用单元格地址方式,而直接使用数值:
AVERAGE(1,2,4),结果=2.33333;别的统计函数也几乎一样.
另外,Delphi的Math unit除了较专业的统计方法外,一般的方法也都有.至于线形规划等
较专业的统计手段可以到网上去找找,应该是有的.(我原来有一个dll,不过硬盘坏了,都
丢光了).


 
不知够不够,这是一般的应用.
var aSheet:variant;
begin
EA1.Connect;
EA1.Visible[0]:=False;//EXCEL不可见,看不到你的调用.
EA1.Workbooks.Add(xlWBATWorkSheet,0);//新增一个ASHEET.
aSheet:=EA1.Worksheets.Item[1];
aSheet.Cells[3,3].Value:='=Sum(A1:B1)';//求和,公式就可以照着写
aSheet.Columns[1].HorizontalAlignment:=xlLeft;//设置该栏居左
aSheet.Columns[1].columnWidth:=9.00;//设置宽度
aSheet.Columns[2].columnWidth:=6.88;
aSheet.Columns[2].HorizontalAlignment:=xlCenter;
aSheet.Range['A1','B2'].MergeCells:=True;//设置合并
aSheet.SaveAs(SaveDialog.FileName);//保存
aSheet.Application.Quit;//退出
end;

 
好像线性规划这种东西不能像sum()一样的容易调用
建议自己写线性规划的代码
我们的一个项目就是这么做的
其实好好的看看运筹学的书籍
线性规划的算法还是可以写出来的
good luck to u
still pay more attention to this subject
 
可否用一下runmacro()去调用一个宏过程,我感觉excel一些函数是以宏存储的!
 
zhangkan:
aSheet.Cells[3,3].Value:='=Sum(A1:B1)';
中的'=Sum(A1:B1)'能不能是动态的?
我用VBA向CELLS中定这个公式时一直不能动态生成公式,
就是说A1和B1的具体取值不能在过程中取定。
 
一定要用A1:B1?能不能用数字
 
可以,请指教
 
Can you help me?
 
matlab中有很多库可以调用
 
monarch_1898:
我至今还没解决这个问题,可能是个死胡同,我只能用它方法了
 
Ver:
用数字能解决吗?给个示例吧。谢谢!
 
Sorry,我当时理解错了
 
后退
顶部