登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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 |