找回密码
 注册
Simdroid-非首页
查看: 134|回复: 6

[基础概念] 如何从 excel vba 调用 mathematica 呢?

[复制链接]
发表于 2011-8-9 23:46:41 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
请问: 如何从 excel vba 调用 mathematica 呢?

比如: 要在 excel 中 调用 mathematica 计算 Sin[1.0]
发表于 2011-8-10 00:27:12 | 显示全部楼层 来自 上海
Simdroid开发平台
有个叫Mathematica Link for Excel(ExcelLink)的 package可以做到,但要购买。应该还没有PuoJie的。
回复 不支持

使用道具 举报

发表于 2011-8-10 00:35:11 | 显示全部楼层 来自 上海
本帖最后由 eigen 于 2011-8-10 00:52 编辑

间接的方法是先在Mathematica中计算出结果,然后用NETLink传送到Excel文件中。Norbert Marxer给出了很好的例子,你可以搜索:“Norbert Marxer Excel”
一个比较好例子如下:


  1. Needs["NETLink`"];
  2. InstallNET[];
  3. excel=CreateCOMObject["Excel.Application"];
  4. excel@Visible=True;
  5. excel@Workbooks@Add[];
  6. excel@Workbooks@Item[1]@Sheets@Add[];
  7. excel@Workbooks[]@Item[1]@Sheets@Item[1]@Name="正弦计算";
  8. excel@Workbooks[]@Item[1]@Sheets@Item[1]@Range["A4:B5"]@Value2={{"命令","结果"},{"Sin[1.0]",Sin[1.0]}};
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-8-10 00:39:52 | 显示全部楼层 来自 上海
本帖最后由 eigen 于 2011-8-10 00:45 编辑

还可以画数据的饼图。代码如下:


  1. wb = excel@Workbooks@Item[1];
  2. ws = wb@Worksheets@Item[1];
  3. ws@Range["A1"]@Value = "北方";
  4. ws@Range["A2"]@Value = "南方";
  5. ws@Range["A3"]@Value = "东方";
  6. ws@Range["A4"]@Value = "西方";
  7. ws@Range["B1"]@Value = 5.2;
  8. ws@Range["B2"]@Value = 10;
  9. ws@Range["B3"]@Value = 8;
  10. ws@Range["B4"]@Value = 20;
  11. srcRange = ws@Range["A1:B4"];
  12. chrt = wb@Charts@Add;
  13. chrt@ChartWizard[srcRange, -4102, 7, 2,
  14.      1, 0, 2, "销售百分比"];
复制代码

评分

2

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-10 10:05:34 | 显示全部楼层 来自 黑龙江哈尔滨
非常感谢,怎么用 mathematica 调用 某个 excel vba 宏 呢?

比如 这个存在于 某个 excel 文档宏:
Sub thanks()
   MsgBox "thanks eigen"
End Sub

好像是 用 run ?
回复 不支持

使用道具 举报

发表于 2011-8-12 13:53:26 | 显示全部楼层 来自 上海
本帖最后由 eigen 于 2011-8-12 14:03 编辑

别客气!也谢谢 你和 guocong89版主给我加分。
    我也不会用 Mathematica 调用excel vba 宏。不过,可以用它生成含有excel函数的表格值。如果 vba 宏能够在表格中调用的话,就可以用 Mathematica 调用excel vba 宏了。
生成含有excel函数的表格值的例子如下:

  1. data = {{Range[1, 3],
  2.    "sin(" <> # <> ")" & /@ CharacterRange["1", "3"]}}
  3. formulas = {{Table[Null, {3}], Table[Null, {3}],
  4.     "SIN(" <> # <> "1)" & /@ CharacterRange["A", "C"]}};
  5. Export["c:\\sinTable.xls", {data, formulas}, {{"Data", "Formulas"}}]
复制代码
回复 不支持

使用道具 举报

发表于 2011-8-22 11:35:08 | 显示全部楼层 来自 浙江金华
调用matlab的notebook调用实现与excel的互动,我只在word中执行matlab的代码画图什么的用过,而那些matlab代码再调用mathkernel.exe:lol
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 19:55 , Processed in 0.039860 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表