![数理统计及其在数学建模中的实践(使用MATLAB)](https://wfqqreader-1252317822.image.myqcloud.com/cover/996/30762996/b_30762996.jpg)
1.9 利用MATLAB生成Excel文档
1.9.1 调用actxserver函数创建Microsoft Excel服务器
1.创建Microsoft Excel服务器
先判断Excel服务器是否已经打开,若已经打开,就在打开的Excel服务器中写入文档,否则用actxserver函数创建Microsoft Excel服务器.相关命令如下:
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-178.jpg?sign=1738861855-rxglOHH2z75vpl7BRMik9paGvu7YoOCN-0-44e980df1c35319f33b69644a01609fd)
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接口下的所有方法
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-181.jpg?sign=1738861855-Pbk96icGaUvaqLYxyDuVLc7D3vwWnCfC-0-238cf9afb89acd7d7e5e8f88d9634650)
%调用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)作为输入,就可以得到相应工作表对象的句柄,即
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-182.jpg?sign=1738861855-dYVUmzyx0RjsBThVt7hrWcuk73LIHR7q-0-359d62e790d099bbf6030b385396c9f9)
利用工作表对象下的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个标准工作表,命令如下:
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-183.jpg?sign=1738861855-2WRLEjO78RLraAuJptrbXY04wsMXS617-0-6867f9e570c106093a8485c1b28da6b2)
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属性的属性值即可重命名工作表,例如:
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-184.jpg?sign=1738861855-GlpHnWPsPUWYLP0wbqhfuXLWmG1My9ZZ-0-e6f1e1d31be693ff1e64819162ced548)
1.9.5 页面设置
工作表对象下有一个PageSetup接口,通过修改PageSetup属性的属性值,可以进行页面设置,如下命令用来修改工作表页面的上、下、左、右页边距,单位为磅.
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-185.jpg?sign=1738861855-IvAVQ9AnsSaX2cFc24qiCf8vIPKQVSFR-0-0e440230a89c57eae4872191c850385d)
PageSetup的CenterHorizontally和CenterVertically属性用来设置居中方式,CenterHorizon-tally=1表示水平居中,CenterVertically=1表示垂直居中.
PageSetup的Orientation属性用来设置页面方向,它是一个枚举类型的属性,它有两个可能的取值:“xlPortrait”(纵向,这是默认值)和“xlLandscape”(横向).
1.9.6 选取工作表区域
通常用户需要在一个工作表上选取一些区域,然后在这些区域里进行操作.工作表对象下的Range方法用于选取工作表区域,生成Range对象,例如:
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-186.jpg?sign=1738861855-y8NffSmWfSl5PfKVbjkhXmdWTua0Urqw-0-fc94626278fb638d4014c50a529c0023)
1.9.7 设置行高和列宽
行高和列宽的设置分别用到了Range对象的RowHeight和ColumnWidth属性,设置方法如下:
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-187.jpg?sign=1738861855-xVaaq4L3HRKxT4X5HbyoRCa8JJN190Ek-0-3adf720e32ee325ef1c015aafedb5dc6)
所谓的标量就是一个数,若用行高标量和列宽标量进行设置,则Range对象里的行等高,列等宽.若用行高向量和列宽向量进行设置,可以为不同的行设置不同的行高,为不同的列设置不同的列宽,此时行高向量长度应等于或大于Range对象的列数,列宽向量长度应等于或大于Range对象的列数.
1.9.8 合并单元格
这里介绍合并单元格的两种方法.
1.Range对象的MergeCells属性
Range对象的MergeCells属性的默认值为0,若将其改为非零值,则可将Range对象里的所有单元格合并为一个单元格,再改回0,则又回到原先的状态,例如:
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-188.jpg?sign=1738861855-c2lLknv6yrHVaHHAWpwUDkmxKfivyA3T-0-a13451b3a8c7e272eb9c6e859411d521)
2.Range对象的Merge和UnMerge方法
从名字上不难看出Range对象的Merge和UnMerge方法是互逆的两个方法.Merge方法用于合并Range对象的单元格,UnMerge方法用于恢复到合并前状态.它们的调用格式如下:
Range对象句柄.Merge;
Range对象句柄.UnMerge;
例如,调用Range对象的Merge和UnMerge方法合并和解合并单元格.
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-189.jpg?sign=1738861855-ibN6EPmT3hVysutCtbnw6C4iH7E3MB6Q-0-3c69537994edaa72dbe51d008774f2c9)
1.9.9 边框设置
1.Range对象的Borders属性
Range对象的Borders属性用来设置单元格边框.先来看一下只包含一个单元格A1的Range对象的Borders属性下的所有属性.
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-190.jpg?sign=1738861855-91VosAebVNwLd8rARcL1KFuTpfzL0vXK-0-495c7f84881b1704cf8431b23d8c5622)
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的左边框的所有属性
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-193.jpg?sign=1738861855-sqjf7wK13bI7SIM4tEb5VzvYm7Nft8Rs-0-74350b7d79f239f3646b53598111b0e1)
%返回单元格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的边框颜色
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-204.jpg?sign=1738861855-mQcUcLgbt13rUcGDSwm8DVojALzJquI3-0-1376c0e110a4b3e120bfaed06e0d4202)
4.Borders的LineStyle和Weight属性
Borders的LineStyle属性用来标记线条类型,LineStyle属性的取值从0到13.Weight属性用来标记线宽,其属性值从1到4.MATLAB代码如下:
%创建一个MicrosoftExcel服务器,返回句柄Excel
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-205.jpg?sign=1738861855-O1fBqK2MlorAHsCf5Js8SXEnAxqhkpYG-0-6758d92ba9500a49784158e8b1136236)
例1-24 用MATLAB生成普通的Excel文档
function ceshiExcel
%利用MATLAB生成Excel文档
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-206.jpg?sign=1738861855-j27ZSYLVhV3W1tiU8pQekI25fAzXwHhz-0-69e34d44627eb7d1a97b58bc5765921c)
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-207.jpg?sign=1738861855-4lHrb1O2cHkm6eLXkuqaFEFVC6zkhTXy-0-15e2e202360825ca6a48e0bcc2923a3c)
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-208.jpg?sign=1738861855-UO7sOPgI56b7tTPKwtD1CeJcKO460z36-0-69c6150951585fd028c74848347f36d9)
盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中 ...
存在的问题及改进措施等内容)
];
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-212.jpg?sign=1738861855-nLvOLPklHSElJrsxsLOzy0ChKW8FxdmX-0-83f247d7683e9b6bffb6e14eeb504bea)
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-213.jpg?sign=1738861855-iRdjCZeN6UwKWIa7cghSObresxcdEFdn-0-e57e95ec369235f5d9b36e2ce637262d)
例1-25 用MATLAB生成带有图片的Excel文档
将图片自动导入Excel文件中,通过MATLAB生成一个带有图片的Excel文档.
function ceshi Excel
%设定测试Excel文件名和路径
filespecuser=[pwd \测试.xls
];
%判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,
%否则就打开Excel
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-216.jpg?sign=1738861855-uEMpAHkoTpHPE1PxnYewIlSHRXNoPAZo-0-76994db479c85484088db971be10e76f)
%设置Excel属性为可见
set(Excel, Visible
,1);
%返回Excel工作簿句柄
Workbooks=Excel.Workbooks;
%若测试文件存在,则打开该测试文件,否则,新建一个工作簿并保存,文件名为测试.Excel
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-219.jpg?sign=1738861855-RVQV6k5fxKh18RLnM388Hh5KbQQLRdCo-0-fd4bbe63147092e2f9fd6dead7291fd4)
%返回工作表句柄
Sheets=Excel.ActiveWorkBook.Sheets;
%返回第一个表格句柄
sheet1=get(Sheets, Item
,1);
%激活第一个表格
invoke(sheet1, Activate
);
%如果当前工作表中有图形存在,通过循环将图形全部删除
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-224.jpg?sign=1738861855-8hHsb4FVJuUmiYj2hHaS7BJVyWLZmdVu-0-cfc855d5a11d59cc5c9841c34ebecbc2)
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-225.jpg?sign=1738861855-BrNc5bEqE1Fji3cBdpuLfuN9JniJlEuO-0-0f8e1e89d18fd286219e922a6340391e)
%随机产生标准正态分布随机数,绘制直方图,并设置图形属性
![](https://epubservercos.yuewen.com/19D965/16741087904971906/epubprivate/OEBPS/Images/978-7-111-43176-3-Chapter01-226.jpg?sign=1738861855-3fNLEsbetjwKmSQcMRAcT8VRk11k6Jn8-0-09a6a77ef7e8519068478f65a02414de)