对于数据分析来说,很多时候用户希望数据分析的结果可以保存到常用格式的文件中,比如doc或者xls文件。MATLAB有专门的读写Excel文档的函数:xlsread和xlswrite,可以根据用户需要将数据结果保存到Excel文件中指定的工作表或者将Excel文件中的数据读入MATLAB工作空间。

对于图形结果,MATLAB没有提供现成的函数,但是MATLAB完全可以将图形结果输出到Excel工作簿中,甚至可以操作Excel编程,比如控制Excel对某一个区域的数据进行分析,绘制Excel提供的各类统计图表等。这时需要一种称为OLE(Object Linking and Embedding)即对象链接与嵌入技术,它是ActiveX技术的前身,基于COM(Component Object Model)即组件对象模型,是不同的软件环境之间共享程序功能的一种方式。这一节介绍MATLAB控制Excel文件的方式,熟练使用MATLAB操作Excel文件,可以建立符合用户需要的专业报表。

技巧实现

1. MATLAB自动化功能介绍

MATLAB支持组件自动化(COM Automation),这是一个COM协议,该协议允许一个程序或者组件去控制另一个程序或者组件。MATLAB支持的组件技术分为以下3个内容:

(1)在MATLAB下运行其他软件的组件;

(2)在其他程序下运行MATLAB的组件(包括MATLAB本身);

(3)将所需的MATLAB功能(通常有若干m和mex文件构成),利用MATLAB自身的COM Builder编译成组件供其他程序使用。

MATLAB控制Excel文件操作属于第(1)种,也即将MATLAB作为自动化客户端,调用Excel服务器完成一系列功能。MATLAB打开创建COM服务器的函数为actxserver。其基本用法如下:

actxserver('prodid');

其中prodid为COM 服务器的标识号。

使用MATLAB操作COM服务器时,可以使用get函数获得某个COM服务器的属性,使用invoke函数触发某项方法。

2.利用MATLAB建立空白Microsoft Excel文档

下图为使用MATLAB建立的空白excel文档。

对表的任何操作,Excel服务器都提供了可以供MATLAB调用的属性或者方法。

3.表中固定区域的选择方法

比如粘贴板中原有“MATLAB”几个字符,使用MATLAB将其粘贴入D6单元格:

4.将MATLAB图形结果导入Excel

上面演示的内容都是文字结果和Excel之间的互操作,这一类操作完全可以通过MATLAB提供的xlswrite函数完成。下面介绍的是将MATLAB的图形结果导入Excel的方法。COM技术的方便之处就在于通过一种软件可以使用另外一种软件提供的几乎所有功能,大大提高了编程的灵活性。

下面的例子首先在MATLAB中绘制一幅图,然后通过COM技术将该图形导入到Excel中,位置为A1处(导入图形的左上角位于A1单元格)。如下图所示。

由于粘贴位置只能通过单元格位置确定,如果位置与实际有所偏差,可以继续对粘贴到Excel文件中的图形进行修饰,比如移位、旋转操作等,这里不再一一介绍。

5. MATLAB控制Excel绘图

Excel软件之所以被大量用于数据的统计,其中一个很重要的原因在于其有丰富的统计功能,并可以产生多种统计图表。当然,这些图表可以通过调用MATLAB提供的函数来实现。但对于一些简单的图表来说,完全可以交给Excel进行处理,下面一个例子使用Excel中A1-A5中的数据绘制折线图。如下图所示。

%文件操作技巧

%第7节利用MATLAB创建Microsoft Excel文档

%使用MATLAB建立一个空白excel文档

he = actxserver('Excel.Application');

hw = he.Workbooks;% 或者使用hw = get(he,'Workbooks');

hworkbook = hw.Add;% 或者使用hworkbook = Add(hw);

set(he,'Visible',1);

%激活第一个表

hsheets = get(hworkbook,'Sheets');

hsheet  = Item(hsheets,1);

%打开示例链接

%表中固定区域的选择方法

%粘贴系统剪切板中的内容至Excel固定区域

hrange = Range(hsheet,'D6');

hrange.Select;

%假设系统剪切板中已经含有内容,粘贴至D6区域

hsheet.Paste;

%将MATLAB图形结果导入Excel

%首先绘制一幅图

ezplot('x^2- y^2= 1');

%将图形导入到剪切板中

hgexport(gcf,'-clipboard');

%选择粘贴区域

hrange = Range(hsheet,'A1');

hrange.Select;

%粘贴图形

hsheet.PasteSpecial;

% MATLAB控制Excel绘图

%设置绘图数据来源区域

hdata = Range(hsheet,'A1:A5');

%新建图表

hchart = hsheet.Shapes.AddChart.Chart;

%设置绘图数据来源

SetSourceData(hchart, hdata);

%设置图表类型