爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3188|回复: 2

收集到在学习资料

[复制链接]

新浪微博达人勋

发表于 2014-7-19 21:31:34 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
MATLAB作为自动化客户端调用Excel服务器编程
    项目中最后的功能——打印报告,最终确定使用ActiveX方式访问office,这个应该称之为OLE(对象链接与嵌入)方法。通过MATLAB调用Excel服务器,可以完成一些非数据对象的交互,比如图片。

    在这里演示一下MATLAB与Excel交互的整体过程,当然这里不是报告的内容,这个属于项目的资料了。这里通过简单的图片来表示,实际要做的时候,步骤和这个基本一致,只是过程麻烦些,每一个图片都要调整,然后数据内容调整,单元格格式等等:

    先看一下示意的效果:
示意.jpg (139.14 KB)
2010-5-23 10:25



1.MATLAB打开自动化方法

使用actxserver函数。如下:
he = actxserver('Excel.Application');

上述语句创建excel服务器,句柄值为he,通过he可以访问excel服务器的属性和方法。
在使用中为了方便存储,可以设置默认路径,使用excel服务器的DefaultFilePath属性:
he.DefaultFilePath = 'E:\';

调试中为了方便观看excel文件内容,可以设置excel服务器的Visible属性,实际调试时可以改为1,调试过后改为0即可:
he.Visible = 1;


2.创建工作簿方法

通过excel服务器的属性Workbooks创建工作簿句柄,通过该句柄的方法Add创建工作簿:
hw = he.Workbooks.Add;

然后,继续通过hw的Worksheets属性建立Sheets类句柄:
hs = hw.Worksheets;

访问某一sheet的方法即用sheets的Item方法:
sheetItem = hs.Item(1);

上面即建立的sheet类句柄,可以通过该句柄访问单一sheet。

3.生成带有图形的Excel,主要是figure位置和格式,粘贴时只能选择单元格,需要精细修饰就要使用下面的方法了。

通过sheet类句柄的Range方法建立Range类句柄,通过其PasteSpecial方法将粘贴板内容粘贴至excel工作簿由Range类句柄选中的单元,比如A1:
sheetItem.Range('A1').PasteSpecial;

然后每一个figure的位置等属性,可以继续修饰:
hshape = sheetItem.Shapes;
hs1 = Item(hshape, 1);
hs1.IncrementLeft(358.5);
hs1.IncrementTop(157.5);
hs1.Placement = 'xlFreeFloating';

上面的语句即完成将figure1右移和下移,并且设置不随单元格大小变化而改变。


4.保存退出

通过Workbooks类的SaveAs方法存储工作簿,通过excel类的quit属性退出COM服务器。
hw.SaveAs([he.DefaultFilePath '\示意.xls']);
he.Quit;



上面就是通过MATLAB访问Excel服务器的整个过程,图片中文件的生成代码如下:
复制内容到剪贴板
代码:
%% A COM Utilization
% $Author:  lskyp
%% Interface between MATLAB & Excel

% Create COM server
he = actxserver('Excel.Application');
he.DefaultFilePath = 'd:\Program Files\MATLAB\R2009a\work\
报告';
he.Visible = 1;

% Create workbook & sheet
hw = he.Workbooks.Add;
hs = hw.Worksheets;
sheetItem = hs.Item(1);

%% Generate figure and copy
% Plot
PlotAFig;
hgexport(gcf, '-clipboard');
sheetItem.Range('A1').PasteSpecial;
PlotAFig;
hgexport(gcf, '-clipboard');
sheetItem.Range('A1').PasteSpecial;
PlotAFig;
hgexport(gcf, '-clipboard');
sheetItem.Range('A1').PasteSpecial;
close all

% Modify the Position of Each Figure
hshape = sheetItem.Shapes;
hs1    = Item(hshape, 1);
hs1.IncrementLeft(100);
hs1.IncrementTop(20);
hs1.Placement = 'xlFreeFloating';
hs1    = Item(hshape, 2);
hs1.IncrementLeft(100);
hs1.IncrementTop(320);
hs1.Placement = 'xlFreeFloating';
hs1    = Item(hshape, 3);
hs1.IncrementLeft(100);
hs1.IncrementTop(620);

%% save workbook
hw.SaveAs([he.DefaultFilePath '\演示
.xlsx']);
he.Quit;
he.delete;
clear all
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2014-7-19 21:35:21 | 显示全部楼层
为什么您不发表到Matlab板块呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2014-7-20 08:15:46 | 显示全部楼层
no picture?
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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