1.9 利用MATLAB生成Excel文档
1.9.1 调用actxserver函数创建Microsoft Excel服务器
1.创建Microsoft Excel服务器
先判断Excel服务器是否已经打开,若已经打开,就在打开的Excel服务器中写入文档,否则用actxserver函数创建Microsoft Excel服务器.相关命令如下:
2.设置对象属性
建立Excel服务器后,通过Excel.get命令可以查看对象的所有属性,然后进行相关属性的设置.如果此时还没有看到服务器界面,只需将Excel的Visible属性的属性值重新设置为1,服务器界面即变为可见状态.默认情况Excel的Visible属性的属性值为0,服务器界面为不可见状态.
%设置Excel服务器为可见状态
>>Excel.Visible=1;
%set(Excel, Visible ,1);
Excel的StandardFont属性用来设置标准字体,默认字体为宋体;StandardFontSize属性用来设置标准字号,默认字号为12;DefaultFilePath属性用来设置文档的默认保存路径.如果不想让别人改动自己的Excel文档,可以将Interactive属性的属性值设为0,此时Excel处于不可交互状态,自然也就不可编辑,重新将Interactive属性的属性值设为1,则恢复正常.Excel还有很多属性可以根据用户的需要重新设置,这里不再一一介绍.
1.9.2 新建Excel工作簿
1.新建工作簿
Excel界面已经打开,但是还没有可编辑的工作簿,应先新建工作簿.Excel的Work-books接口提供了Add方法,可以用来建立新的工作簿,这点类似于Word服务器的Docu-ments接口.
%查看Workbooks接口下的所有方法
%调用Workbooks接口的Add方法建立新的工作簿,并返回其句柄Workbook
>>Workbook=Excel.Workbooks.Add;
2.获取工作簿句柄
如果已经建立了多个工作簿并且它们都处于打开状态,可以通过下面两种方式获取其中的某个工作簿的句柄.
(1)在创建工作簿的时候,将该工作簿的句柄赋值给某个变量,例如:
>>Workbooki=Excel.Workbooks.Add;
将不同工作簿的句柄赋值给不同的变量,以保证句柄的唯一性.
(2)Excel.Workbooks接口的方法Item方法用于获取工作簿的句柄,可如下调用:
Workbooki=Excel.Workbooks.Item(i)
这里的输入参数i为正整数,表示工作簿的序号.
1.9.3 获取工作表对象句柄
通常情况下,一个工作簿下包含3个工作表(Worksheets),编辑Excel文档都是在工作表中完成的.在默认情况下,3个工作表的名字分别为Sheet1,Sheet2和Sheet3,通过工作簿的句柄可以找到它们的句柄.这里还用Workbook表示刚刚新建的工作簿的句柄(后面如无特别说明,也这样表示),Workbook下有一个Sheets接口,Sheets接口下有一个Item方法,和别的接口的Item方法一样,用一个表示工作表序号的正整数i(i=1,2,3)作为输入,就可以得到相应工作表对象的句柄,即
利用工作表对象下的Activate方法可将某个工作表激活,使之处于当前工作表状态.
1.9.4 插入、复制、删除、移动和重命名工作表
1.插入工作表
当需要处理的事情比较多时,3个工作表往往不能满足需要,这时候就需要在工作簿中插入一些新的工作表,这要用到Workbook.Sheets接口下的Add方法,该方法的调用格式如下:
Workbook.Sheets.Add(Before,After,Count,Type)
其中,参数Before是一个工作表的句柄,新增的工作表将放置在该工作表之前.参数After也是一个工作表句柄,新增的工作表将放置在该工作表之后.注意,这两个参数不能同时为空,也就是说若其中一个设定为工作表句柄,另一个就要为空.若两个参数都为空,则新增的工作表会放置在当前工作表之前.参数Count是新增加的工作表数目,默认值为1.参数Type用来指定新增的工作表类型,其可能的取值为1,2,3,4,分别对应xlWorkshe-et、xlChart、xlExcel4MacroSheet和xlExcel4IntlMacroSheet4种类型的工作表.默认情况下,新增工作表为标准工作表(xlWorkSheet).
这里举一个例子,在工作表Sheet2后插入2个标准工作表,命令如下:
2.复制工作表
工作表对象下有一个Copy方法,用来复制工作表,调用格式如下:
工作表对象句柄.Copy(Before,After)
其中,参数Before和After均为工作表对象句柄,用来指定所复制的工作表放置的位置,需要注意的是,这两个参数不能同时使用,即它们不能同时非空.使用参数Before将所复制的工作表放置在该参数指定的工作表之前,而使用参数After将所复制的工作表放置在该参数指定的工作表之后.
例如,复制当前工作表,并把它放置到所有工作表之后,命令如下:
>>SheetNum=Workbook.Sheets.Count; %返回工作表的总数
%复制当前工作表,并把它放到所有工作表之后
>>Workbook.ActiveSheet.Copy([],Workbook.Sheets.Item(SheetNum));
3.删除工作表
调用工作表对象下的Delete方法,可删除某个工作表.例如,删除工作簿中的第2个工作表,命令如下:
>>Workbook.Sheets.Item(2).Delete %删除工作簿中的第2个工作表
4.移动工作表
通过移动工作表可以改变工作簿中的工作表的顺序,从而可以将工作表随意排列.工作表对象下的Move方法可用来移动工作表,调用格式为
工作表对象句柄.Move(Before,After)
其中,Before和After参数的说明同Copy方法.例如,将Sheet1移到Sheet2后,命令如下:
>>Sheet1=Workbook.Sheets.Item(1); %返回第1个工作表的句柄
>>Sheet2=Workbook.Sheets.Item(2); %返回第2个工作表的句柄
>>Sheet1.Move([],Sheet2); %将Sheet1移动到Sheet2后
5.重命名工作表
默认情况下,工作表的命名方式是在Sheet单词后加数字编号,修改工作表对象下的Name属性的属性值即可重命名工作表,例如:
1.9.5 页面设置
工作表对象下有一个PageSetup接口,通过修改PageSetup属性的属性值,可以进行页面设置,如下命令用来修改工作表页面的上、下、左、右页边距,单位为磅.
PageSetup的CenterHorizontally和CenterVertically属性用来设置居中方式,CenterHorizon-tally=1表示水平居中,CenterVertically=1表示垂直居中.
PageSetup的Orientation属性用来设置页面方向,它是一个枚举类型的属性,它有两个可能的取值:“xlPortrait”(纵向,这是默认值)和“xlLandscape”(横向).
1.9.6 选取工作表区域
通常用户需要在一个工作表上选取一些区域,然后在这些区域里进行操作.工作表对象下的Range方法用于选取工作表区域,生成Range对象,例如:
1.9.7 设置行高和列宽
行高和列宽的设置分别用到了Range对象的RowHeight和ColumnWidth属性,设置方法如下:
所谓的标量就是一个数,若用行高标量和列宽标量进行设置,则Range对象里的行等高,列等宽.若用行高向量和列宽向量进行设置,可以为不同的行设置不同的行高,为不同的列设置不同的列宽,此时行高向量长度应等于或大于Range对象的列数,列宽向量长度应等于或大于Range对象的列数.
1.9.8 合并单元格
这里介绍合并单元格的两种方法.
1.Range对象的MergeCells属性
Range对象的MergeCells属性的默认值为0,若将其改为非零值,则可将Range对象里的所有单元格合并为一个单元格,再改回0,则又回到原先的状态,例如:
2.Range对象的Merge和UnMerge方法
从名字上不难看出Range对象的Merge和UnMerge方法是互逆的两个方法.Merge方法用于合并Range对象的单元格,UnMerge方法用于恢复到合并前状态.它们的调用格式如下:
Range对象句柄.Merge;
Range对象句柄.UnMerge;
例如,调用Range对象的Merge和UnMerge方法合并和解合并单元格.
1.9.9 边框设置
1.Range对象的Borders属性
Range对象的Borders属性用来设置单元格边框.先来看一下只包含一个单元格A1的Range对象的Borders属性下的所有属性.
Value:-4142
Weight:2
2.Borders的Count属性
Borders的Count属性的属性值为6,说明一个单元格对应6条线,分别为左边框、右边框、上边框、下边框、左上至右下内斜线和左下至右上内斜线.由Borders的Item方法可得到各条线的句柄,例如:
%返回单元格A1的左边框的句柄LeftlLine
>>LeftLine=Sheets.Range( A1 ).Borders.Item(1)
LeftLine=Interface.MicrosoftExcel5.0对象程序库.Border
%查看单元格A1的左边框的所有属性
%返回单元格A1的右边框的句柄RightLine
>>RightLine=Sheet1.Range( A1 ).Borders.Item(2);
%返回单元格A1的上边框的句柄ToptLine
>>TopLine=Sheet1.Range( A1 ).Borders.Item(3);
%返回单元格A1的下边框的句柄BottomLine
>>BottomLine=Sheet1.Range( A1 ).Borders.Item(4);
%返回单元格A1的左上至右下内斜线的句柄ObliqueLine1
>>ObliqueLine1=Sheet1.Range( A1 ).Borders.Item(5);
%返回单元格A1的左下至右上内斜线的句柄ObliqueLine2
>>ObliqueLine2=Sheet1.Range( A1 ).Borders.Item(6);
3.Borders的ColorIndex属性
Borders的ColorIndex属性用来标记线条颜色,默认属性值为-4142,表示颜色为自动.
ColorIndex属性的取值从0到56,对应56种颜色(0和1对应黑色).
%通过循环改变单元格A1的边框颜色
4.Borders的LineStyle和Weight属性
Borders的LineStyle属性用来标记线条类型,LineStyle属性的取值从0到13.Weight属性用来标记线宽,其属性值从1到4.MATLAB代码如下:
%创建一个MicrosoftExcel服务器,返回句柄Excel
例1-24 用MATLAB生成普通的Excel文档
function ceshiExcel
%利用MATLAB生成Excel文档
盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中 ...
存在的问题及改进措施等内容) ];
例1-25 用MATLAB生成带有图片的Excel文档
将图片自动导入Excel文件中,通过MATLAB生成一个带有图片的Excel文档.
function ceshi Excel
%设定测试Excel文件名和路径
filespecuser=[pwd \测试.xls ];
%判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,
%否则就打开Excel
%设置Excel属性为可见
set(Excel, Visible ,1);
%返回Excel工作簿句柄
Workbooks=Excel.Workbooks;
%若测试文件存在,则打开该测试文件,否则,新建一个工作簿并保存,文件名为测试.Excel
%返回工作表句柄
Sheets=Excel.ActiveWorkBook.Sheets;
%返回第一个表格句柄
sheet1=get(Sheets, Item ,1);
%激活第一个表格
invoke(sheet1, Activate );
%如果当前工作表中有图形存在,通过循环将图形全部删除
%随机产生标准正态分布随机数,绘制直方图,并设置图形属性