MATLAB生成Word和Excel文档

合集下载

Matlab和Excel混合编程

Matlab和Excel混合编程

Matlab和Excel混合编程2011-07-18 21:26:17| 分类:Excel VBA | 标签:|举报|字号大中小订阅MATLAB与Excel的混合编程有两种方式:(1)利用MATLAB提供的Excel Link插件,实现Excel与MATLAB的数据共享;(2)利用MATLAB提供的Excel生成器,生成dll组件和VBA代码,dll组件可以进行COM生成器组件相似的操作,VBA代码则可以在Excel的Visual Basic编译器中直接使用,可以保存为插件.第一种方法:通过Excel Link实现Excel和MATLAB的数据共享1.Excel Link是一个软件插件,它可将Excel与MATLAB进行集成,通过MATLAB与Excel的链接,用户可以在Excel的工作空间中,利用Excel的宏编程功能,使用MATLAB 的数据处理和图形处理功能进行相关操作,同时Excel保证MATLAB和Excel工作空间数据的交换和同步更新。

使用Excel Link时,不必脱离Excel环境,而直接在Excel的工作区或者宏操作中调用MATLAB函数,Excel提供了11个函数来实现链接和数据操作。

2.Excel Link的安装Excel Link对运行环境没有要求,只要能够同时运行MATLAB和Excel即可,大概要200KB的空间,在Windows平台下要求先安装Excel,再安装MATLAB。

Excel Link 的安装步骤如下:(1)启动Excel,选择菜单栏中的“工具(Tools)”,执行“加载宏”命令;(2)在打开的“加载宏”对话框中单击“浏览”按钮,选择用户自己的\matlab\toolbox\exlink路径下的excellink.xla文件(可能是隐藏文件),然后单击“确定”按钮。

(3)返回“加载宏”窗口,此时已经选中了“Excel link”选项,单击“确定”按钮;(4)重新启动Excel就可以看到多一行“Spreadsheet link EX”工具栏。

利用MATLAB生成Word和Excel文档

利用MATLAB生成Word和Excel文档

二、actxcontrollist函数 查看系统上当前安装的所有COM控件
>> C = actxcontห้องสมุดไป่ตู้ollist % 查看系统上当前安装的所有COM控件
三、actxcontrolselect函数
h = actxcontrolselect [h, info] = actxcontrolselect
二、COM接口 1. IUnknown接口 接口查询 生存期控制
2. IDispatch接口 IDispatch接口接收一个函数名并执行它
第二节 MATLAB中的ActiveX控件接口技术
一、actxcontrol函数
h = actxcontrol('progid') h = actxcontrol('progid','param1',value1,…) h = actxcontrol('progid', position) h = actxcontrol('progid', position, fig_handle) h = actxcontrol('progid',position,fig_handle,event_handler) h = actxcontrol('progid',position,fig_handle,event_handler,'filename')
'interface', 'interfaceName') h = actxserver('progid', machine)
【例2】通过MATLAB控制Windows Media Player 播放歌曲

MATLAB与Office交互使用

MATLAB与Office交互使用

MATLAB与其他软件的交互使用杨文霞matlab提供了与microsoft公司的office系列软件的交互使用和便利的数据传输,使得用户能在word环境、Powerpoint中自如的使用matlab进行计算,为用户营造集文字处理、科学计算和工程设计于一体的工作环境。

本章介绍在数学建模和数学实验中最常用的两个软件Word及Excel与matlab的交互使用和数据传输。

1Word中使用Matlab在Word中使用Matlab主要通过matlab的Notebook功能实现的。

Notebook使得用户能够在word环境中使用matlab,使用户能将文字处理与科学计算放在一个工作环境中,方便用户使用。

Matlab制作的m-book文档不仅拥有ms-word的全部功能,而且具备matlab的数学结算能力。

在word中使用matlab的基本步骤为:(1)notebook的安装在command window中,键入:notebook,运行后,会出现如下界面:Welcome to the utility for setting up the MATLAB Notebookfor interfacing MATLAB to Microsoft WordChoose your version of Microsoft Word:[1] Microsoft Word 97[2] Microsoft Word 2000[3] Microsoft Word 2002 (XP)[4] Exit, making no changes选择适合的matlab版本后,Microsoft Word Version: 3Notebook setup is complete.此后,会打开一个word文档:即表示安装结束。

1.notebook的启动(1)从word中启动notebook打开一个word空白文档后,在文档的右边将会出现一个新建文档的选项:在模板选项下,选择:本机上的模板,则会出现如下对话框:选择m-book.dot模板。

matlab表达式转换为word公式

matlab表达式转换为word公式

将Matlab 表达式转换为word 公式(1) Matlab 可以把公式表达式转换为Cfortran 格式,也可以转换为Latex 排版格式,由于Latex 公式的控制格式是纯文本的,因此任何表达式要转换为Latex 格式都是很简单的,Maple 、Mathematica 都提供了类似功能。

(2) MathType 6.0版提供了将Latex 转换为Mathtype 公式的功能,这意味着用Matlab/Mathematica/maple 计算出来的公式可以先转换为Latex ,然后再直接转换为MathType 公式。

方法:在MathType 要导入,先复制Latex 表达式,然后直接粘贴进来就可以看到公式了。

(3) MathType 还可以导出和导入为windows 图元文件emf 矢量图片格式gif ,这意味着如果你有一个公式是图片格式的,可以转换为这两种格式,然后用MathType 导入并编辑。

最后来一个Matlab 代码运算结果转换为MathType 公式的例子: syms x y;f=sin(x)*exp(y)+log(y)*cos(x);f=diff(diff(f,x,2),y,2) %输出matlab 公式形式fs=latex(f) %输出latex 公式形式f =-sin(x)*exp(y)+1/y^2*cos(x)fs =-\sin \left( x \right) {e^{y}}+{\frac {\cos \left( x \right) }{{y}^{2}}}在MathType 中选择转换选项后,把上面的代码直接复制进去就可以看到下面的公式了。

最后再做一些小修改,比如括号、下标,MATLAB 里没下标,括号有时也是多余。

()()2cos sin y x fs x e y =-+文章来源/blog/static/29562664200772354258481/。

MATLAB生成Word和Excel文档-PPT精选文档

MATLAB生成Word和Excel文档-PPT精选文档

的静态程序,而是随时可以用新组件取代旧组件而
返老还童的动态程序。
2019/3/17
©
谢中华, 天津科技大学数学系.
论坛报告会
二、COM接口 1. IUnknown接口 接口查询
生存期控制
2. IDispatch接口 IDispatch接口接收一个函数名并执行它
2019/3/17
©谢中华, 天ຫໍສະໝຸດ 科技大学数学系.论坛报告会
利用MATLAB生成Word和Excel文档
天 津 科 技 大 学 数 学 系 谢中华
E-mail:
2019/3/17
©
谢中华, 天津科技大学数学系.
论坛报告会
我的新书
感谢赵社长和陈守平编辑!
感谢rocwoods(吴鹏)!
感谢math! 感谢各位版友的捧场!
论坛报告会
第二节 MATLAB中的ActiveX控件接口技术
一、actxcontrol函数
h = actxcontrol('progid') h = actxcontrol('progid','param1',value1,…) h = actxcontrol('progid', position) h = actxcontrol('progid', position, fig_handle) h = actxcontrol('progid',position,fig_handle,event_handler) h = actxcontrol('progid',position,fig_handle,event_handler,'filename')

利用MATLAB生成WORD和EXCEL文档

利用MATLAB生成WORD和EXCEL文档

function ceshi_Word%利用MATLAB生成Word文档%ceshi_Word%%Copyright2009-2010xiezhh.%$Revision:1.0.0.0$$Date:2009/12/1412:37:00$%设定测试Word文件名和路径filespec_user=[pwd'\测试.doc'];%判断Word是否已经打开,若已打开,就在打开的Word中进行操作,否则就打开Word try%若Word服务器已经打开,返回其句柄WordWord=actxGetRunningServer('Word.Application');catch%创建一个Microsoft Word服务器,返回句柄WordWord=actxserver('Word.Application');end;Word.Visible=1;%或set(Word,'Visible',1);%若测试文件存在,打开该测试文件,否则,新建一个文件,并保存,文件名为测试.doc if exist(filespec_user,'file');Document=Word.Documents.Open(filespec_user);%Document=invoke(Word.Documents,'Open',filespec_user);elseDocument=Word.Documents.Add;%Document=invoke(Word.Documents,'Add');Document.SaveAs(filespec_user);endContent=Document.Content;Selection=Word.Selection;Paragraphformat=Selection.ParagraphFormat;Document.PageSetup.TopMargin=60;Document.PageSetup.BottomMargin=45;Document.PageSetup.LeftMargin=45;Document.PageSetup.RightMargin=45;Content.Start=0;title='试卷分析';Content.Text=title;Content.Font.Size=16;Content.Font.Bold=4;Content.Paragraphs.Alignment='wdAlignParagraphCenter';Selection.Start=Content.end;Selection.TypeParagraph;xueqi='(2009—2010学年第一学期)'; Selection.Text=xueqi;Selection.Font.Size=12;Selection.Font.Bold=0;Selection.MoveDown; paragraphformat.Alignment='wdAlignParagraphCenter'; Selection.TypeParagraph;Selection.TypeParagraph;Selection.Font.Size=10.5;Tables=Document.Tables.Add(Selection.Range,12,9);DTI=Document.Tables.Item(1);%或DTI=Tables;DTI.Borders.OutsideLineStyle='wdLineStyleSingle';DTI.Borders.OutsideLineWidth='wdLineWidth150pt';DTI.Borders.InsideLineStyle='wdLineStyleSingle';DTI.Borders.InsideLineWidth='wdLineWidth150pt';DTI.Rows.Alignment='wdAlignRowCenter';DTI.Rows.Item(8).Borders.Item(1).LineStyle='wdLineStyleNone';DTI.Rows.Item(8).Borders.Item(3).LineStyle='wdLineStyleNone';DTI.Rows.Item(11).Borders.Item(1).LineStyle='wdLineStyleNone';DTI.Rows.Item(11).Borders.Item(3).LineStyle='wdLineStyleNone';column_width=[53.7736,85.1434,53.7736,35.0094,...35.0094,76.6981,55.1887,52.9245,54.9057];row_height=[28.5849,28.5849,28.5849,28.5849,25.4717,25.4717,...32.8302,312.1698,17.8302,49.2453,14.1509,18.6792];for i=1:9DTI.Columns.Item(i).Width=column_width(i);endfor i=1:12DTI.Rows.Item(i).Height=row_height(i);endfor i=1:12for j=1:9DTI.Cell(i,j).VerticalAlignment='wdCellAlignVerticalCenter';endendDTI.Cell(1,4).Merge(DTI.Cell(1,5));DTI.Cell(2,4).Merge(DTI.Cell(2,5));DTI.Cell(3,4).Merge(DTI.Cell(3,5));DTI.Cell(4,4).Merge(DTI.Cell(4,5));DTI.Cell(5,2).Merge(DTI.Cell(5,5));DTI.Cell(5,3).Merge(DTI.Cell(5,6));DTI.Cell(6,2).Merge(DTI.Cell(6,5));DTI.Cell(6,3).Merge(DTI.Cell(6,6));DTI.Cell(5,1).Merge(DTI.Cell(6,1));DTI.Cell(7,1).Merge(DTI.Cell(7,9));DTI.Cell(8,1).Merge(DTI.Cell(8,9));DTI.Cell(9,1).Merge(DTI.Cell(9,3));DTI.Cell(9,2).Merge(DTI.Cell(9,3));DTI.Cell(9,3).Merge(DTI.Cell(9,4));DTI.Cell(9,4).Merge(DTI.Cell(9,5));DTI.Cell(10,1).Merge(DTI.Cell(10,9));DTI.Cell(11,5).Merge(DTI.Cell(11,9));DTI.Cell(12,5).Merge(DTI.Cell(12,9));DTI.Cell(11,1).Merge(DTI.Cell(12,4));Selection.Start=Content.end;Selection.TypeParagraph;Selection.Text='主管院长签字:年月日'; Paragraphformat.Alignment='wdAlignParagraphRight';Selection.MoveDown;DTI.Cell(1,1).Range.Text='课程名称';DTI.Cell(1,3).Range.Text='课程号';DTI.Cell(1,5).Range.Text='任课教师学院';DTI.Cell(1,7).Range.Text='任课教师';DTI.Cell(2,1).Range.Text='授课班级';DTI.Cell(2,3).Range.Text='考试日期';DTI.Cell(2,5).Range.Text='应考人数';DTI.Cell(2,7).Range.Text='实考人数';DTI.Cell(3,1).Range.Text='出卷方式';DTI.Cell(3,3).Range.Text='阅卷方式';DTI.Cell(3,5).Range.Text='选用试卷A/B';DTI.Cell(3,7).Range.Text='考试时间';DTI.Cell(4,1).Range.Text='考试方式';DTI.Cell(4,3).Range.Text='平均分';DTI.Cell(4,5).Range.Text='不及格人数';DTI.Cell(4,7).Range.Text='及格率';DTI.Cell(5,1).Range.Text='成绩分布';DTI.Cell(5,2).Range.Text='90分以上人占%';DTI.Cell(5,3).Range.Text='80---89分人占%';DTI.Cell(6,2).Range.Text='70--79分人占%';DTI.Cell(6,3).Range.Text='60---69分人占%';DTI.Cell(7,1).Range.Text=['试卷分析(含是否符合教学大纲、难度、知识覆'...'盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...'存在的问题及改进措施等内容)'];DTI.Cell(7,1).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';DTI.Cell(9,2).Range.Text='签字:';DTI.Cell(9,4).Range.Text='年月日';DTI.Cell(10,1).Range.Text='教研室审阅意见:';DTI.Cell(10,1).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';DTI.Cell(10,1).VerticalAlignment='wdCellAlignVerticalTop';DTI.Cell(11,2).Range.Text='教研室主任(签字):年月日';DTI.Cell(11,2).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';DTI.Cell(8,1).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';DTI.Cell(8,1).VerticalAlignment='wdCellAlignVerticalTop';DTI.Cell(9,2).Borders.Item(2).LineStyle='wdLineStyleNone';DTI.Cell(9,2).Borders.Item(4).LineStyle='wdLineStyleNone';DTI.Cell(9,3).Borders.Item(4).LineStyle='wdLineStyleNone';DTI.Cell(11,1).Borders.Item(4).LineStyle='wdLineStyleNone';Shape=Document.Shapes;ShapeCount=Shape.Count;if ShapeCount~=0;for i=1:ShapeCount;Shape.Item(1).Delete;end;end;%产生标准正态分布随机数,画直方图,并设置图形属性zft=figure('units','normalized','position',...[0.2804690.5533850.4289060.251302],'visible','off');%新建图形窗口,设为不可见set(gca,'position',[0.10.20.850.75]);%设置坐标系的位置和大小data=normrnd(0,1,1000,1);%产生标准正态分布随机数hist(data);%绘制标准正态分布随机数的频数直方图grid on;%添加参考网格xlabel('考试成绩');%为X轴加标签ylabel('人数');%为Y轴加标签%将图形复制到粘贴板hgexport(zft,'-clipboard');%将图形粘贴到当前文档里(表格的第8行第1列的单元格里),并设置图形版式为浮于文字上方%Selection.Range.PasteSpecial;DTI.Cell(8,1).Range.Paragraphs.Item(1).Range.PasteSpecial;Shape.Item(1).WrapFormat.Type=3;Shape.Item(1).ZOrder('msoBringInFrontOfText');%设置图片叠放次序为浮于文字上方delete(zft);%删除图形句柄Document.ActiveWindow.ActivePane.View.Type='wdPrintView';%设置视图方式为页面Document.Save;%保存文档function ceshi_Excel%利用MATLAB生成Excel文档%ceshi_Excel%%Copyright2009-2010xiezhh.%$Revision:1.0.0.0$$Date:2009/12/1420:40:00$filespec_user=[pwd'\测试.xls'];tryExcel=actxGetRunningServer('Excel.Application');catchExcel=actxserver('Excel.Application');end;Excel.Visible=1;%set(Excel,'Visible',1);if exist(filespec_user,'file');Workbook=Excel.Workbooks.Open(filespec_user);%Workbook=invoke(Excel.Workbooks,'Open',filespec_user);elseWorkbook=Excel.Workbooks.Add;%Workbook=invoke(Excel.Workbooks,'Add');Workbook.SaveAs(filespec_user);endSheets=Excel.ActiveWorkbook.Sheets;%Sheets=Workbook.Sheets; Sheet1=Sheets.Item(1);Sheet1.Activate;Sheet1.PageSetup.TopMargin=60;Sheet1.PageSetup.BottomMargin=45;Sheet1.PageSetup.LeftMargin=45;Sheet1.PageSetup.RightMargin=45;RowHeight=[26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]'; Sheet1.Range('A1:A16').RowHeight=RowHeight;Sheet1.Range('A1:H1').ColumnWidth=[9,15,9,9,9,9,9,9];Sheet1.Range('A1:H1').MergeCells=1;Sheet1.Range('A2:H2').MergeCells=1;Sheet1.Range('A8:A9').MergeCells=1;Sheet1.Range('B8:D8').MergeCells=1;Sheet1.Range('E8:H8').MergeCells=1;Sheet1.Range('B9:D9').MergeCells=1;Sheet1.Range('E9:H9').MergeCells=1;Sheet1.Range('A10:H10').MergeCells=1;Sheet1.Range('A11:H11').MergeCells=1;Sheet1.Range('A12:H12').MergeCells=1;Sheet1.Range('A13:H13').MergeCells=1;Sheet1.Range('A14:H14').MergeCells=1;Sheet1.Range('D16:H16').MergeCells=1;Sheet1.Range('A4:H14').Borders.Weight=3;Sheet1.Range('A10:H12').Borders.Item(3).Linestyle=0;Sheet1.Range('A10:H12').Borders.Item(4).Linestyle=0;Sheet1.Range('A13:H13').Borders.Item(4).Linestyle=0;Sheet1.Range('A14:H14').Borders.Item(3).Linestyle=0;Sheet1.Range('A1:H9').HorizontalAlignment=3;Sheet1.Range('A4:A9').HorizontalAlignment=6;Sheet1.Range('C4:C7').HorizontalAlignment=6;Sheet1.Range('E4:E7').HorizontalAlignment=6;Sheet1.Range('G4:G7').HorizontalAlignment=6;Sheet1.Range('A10:H10').HorizontalAlignment=6;Sheet1.Range('A11:H11').HorizontalAlignment=6;%-4130 Sheet1.Range('A11:H11').VerticalAlignment=1;Sheet1.Range('A12:H12').HorizontalAlignment=4;Sheet1.Range('A13:H13').VerticalAlignment=1;Sheet1.Range('A14:H14').HorizontalAlignment=4;Sheet1.Range('D16:H16').HorizontalAlignment=4;Sheet1.Range('A1').Value='试卷分析';Sheet1.Range('A2').Value='(2009—2010学年第一学期)'; Sheet1.Range('A4:H4').Value={'课程名称','','课程号',...'','任课教师学院','','任课教师',''};Sheet1.Range('A5:H5').Value={'授课班级','','考试日期',...'','应考人数','','实考人数',''};Sheet1.Range('A6:H6').Value={'出卷方式','','阅卷方式',...'','选用试卷A/B','','考试时间',''};Sheet1.Range('A7:H7').Value={'考试方式','','平均分',...'','不及格人数','','及格率',''};Sheet1.Range('A8').Value='成绩分布';Sheet1.Range('B8').Value='90分以上人占%';Sheet1.Range('E8').Value='80---89分人占%';Sheet1.Range('B9').Value='70---79分人占%';Sheet1.Range('E9').Value='60---69分人占%';Sheet1.Range('A10').Value=['试卷分析(含是否符合教学大纲、难度、知识覆'...'盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...'存在的问题及改进措施等内容)'];Sheet1.Range('A12').Value='签字:年月日'; Sheet1.Range('A13').Value='教研室审阅意见:';Sheet1.Range('A14').Value='教研室主任(签字):年月日'; Sheet1.Range('D16').Value='主管院长签字:年月日';Sheet1.Range('A4:H12').Font.size=10.5;Sheet1.Range('A1').Font.size=16;Sheet1.Range('A1').Font.bold=2;Shapes=Sheet1.Shapes;if Shapes.Count~=0;for i=1:Shapes.Count;Shapes.Item(1).Delete;end;end;zft=figure('units','normalized','position',...[0.2804690.5533850.4289060.251302],'visible','off');set(gca,'position',[0.10.20.850.75]);data=normrnd(75,4,1000,1);hist(data);grid on;xlabel('考试成绩');ylabel('人数');hgexport(zft,'-clipboard');Sheet1.Range('A11').Select;Sheet1.Paste%Sheet1.PasteSpecial;delete(zft);Workbook.Save%保存文档。

一种基于MATLAB的Word报告自动生成方法

一种基于MATLAB的Word报告自动生成方法

Ke y wor d s: MATL AB; Wo r d R e p o t; r Re p o t r Te mp l a t e ; Co n t r o l Cu r s o r
0 引 言
时, 其 自动生 成功 能就 显得 十分 必要 了。 在 Wo r d文 档生 成研 究 方 面 , 文献[ 1 . 4 ] 分 别 介 绍了 V BA、 De l p h i 、 V i s u a l C 叶 _ 卜 、 C } ≠ . n e t 等编程 T具 实 现 Wo r d文 档 自动 生成 的方 法 。 当在 报告 中不 仅
总第 1 8Βιβλιοθήκη 2期 一种基于 MA T L A B的Wo r d 报告自 动生成方法
孙 剑
( 信 阳农林学 院, 河南 信 阳 4 6 4 0 0 0 )
摘要: 自动生成 Wo r d文档报告功能是办公 自动化系统 中的重要组成部分。为高效的完成数据处理任务 , 减少
MAT L AB 数 据 处 理 工 作 中 W o r d报 告 编 制 的 工 作 量 , 可 采 用 Wo r d的 编 程 接 口技 术利 用 MA T L A B 调 用 其
C OM 组件 生成需要 的标 准文档 Wo r d报告。本文提 出了一种基于 Wo r d模版技 术控 制光标 的位置来插入相 应
的文件 内容并指 定格 式的方法 , 从而生成最终报告, 并且在文档的处理 上更加灵活和多样 。 应用结果表 明, 该方
法 能提高 MAT L AB数据处理 中 Wo r d报告编制的效率。 关键词 : MA T L AB; Wo r d报告 ; 报告模板 ; 控 制光标 中图分类号 : T P 3 1 1 . 5 2 文献标识码 : A 文章编号 : t 6 7 1 . 4 7 9 2 ( 2 0 1 7 ) 1 。 0 0 3 2 . 0 4

调用Matlab函数制作Excel插件

调用Matlab函数制作Excel插件

说明:实现Matlab帮助文件中的例子,打开help/Matlab Build EX/Microsoft Excel Add‐In Integration/Building and Integrating a COM Component Using Microsoft Visual Basic: the Spectral Analysis Example如下图:主要步骤:1.从Matlab代码中创建一个独立的COM组件。

2.实现必要的VBA代码来完成输入和对代码的调用3.创建图形用户界面4.创建一个Excel插件并对所有必要的组件进行打包第一步:创建组件:从Matlab中复制computefft.m和plotfft.m到当前的工作目录。

按照下列步骤创建组件:1.输入mbuild –setup,选择VC的编译器2.输入deploytool,按照一下提示输入Note:有时候在自己的工作目录下编译不成功,可以把工程文件和所需的m文件copy到默认的matlab的目录下试试可能的工作:第二步:将组件集成到VBA中1.启动Excel2.点击开发工具/Visual Basic3.点击:工具/引用4.选择“Fourier 1.0 Type Library”和“MWComUtil 7.15 Type Library”创建VBA主模块1.右键单击VBAProject,点击插入/模块2.在模块的属性页修改“名称”属性为“FourierMain”3.在模块中输入一下代码:'' FourierMain ‐ Main module stores global state of controls' and provides initialization code'Public theFourier As Fourier.Fourier 'Global instance of Fourier objectPublic theFFTData As MWComplex 'Global instance of MWComplex to accept FFTPublic InputData As Range 'Input data rangePublic Interval As Double 'Sampling intervalPublic Frequency As Range 'Output frequency data rangePublic PowerSpect As Range 'Output power spectral density rangePublic bPlot As Boolean 'Holds the state of plot flagPublic theUtil As MWUtil 'Global instance of MWUtil objectPublic bInitialized As Boolean 'Module‐is‐initialized flagPrivate Sub LoadFourier()'Initializes globals and Loads the Spectral Analysis formDim MainForm As frmFourierOn Error GoTo Handle_ErrorCall InitAppSet MainForm = New frmFourierCall MainForm.ShowExit SubHandle_Error:MsgBox (Err.Description)End SubPrivate Sub InitApp()'Initializes classes and libraries. Executes once'for a given session of ExcelIf bInitialized Then Exit SubOn Error GoTo Handle_ErrorIf theUtil Is Nothing ThenSet theUtil = New MWUtilCall theUtil.MWInitApplication(Application)End IfIf theFourier Is Nothing ThenSet theFourier = New Fourier.FourierEnd IfIf theFFTData Is Nothing ThenSet theFFTData = New MWComplexEnd IfbInitialized = TrueExit SubHandle_Error:MsgBox (Err.Description)End Sub(注:帮助文件中有个地方有错)第三步:创建图形用户界面:1.右键单击VBAProject,点击插入/用户窗体2.在窗体的属性页:名称:frmFourier,Caption: Spectral Analysis3.给空白的窗体添加控件,属性设置如下:如下:右键单击窗体,查看代码:出入以下代码:第四步:添加Excel菜单1.右键单击This Workbook,查看代码,添加如下代码:Private Sub Workbook_AddinInstall()'Called when Addin is installedCall AddFourierMenuItemEnd SubPrivate Sub Workbook_AddinUninstall()'Called when Addin is uninstalledCall RemoveFourierMenuItemEnd SubPrivate Sub AddFourierMenuItem()Dim ToolsMenu As CommandBarPopupDim NewMenuItem As CommandBarButton'Remove if already existsCall RemoveFourierMenuItem'Find Tools menuSet ToolsMenu = mandBars(1).FindControl(ID:=30007) If ToolsMenu Is Nothing Then Exit Sub'Add Spectral Analysis menu itemSet NewMenuItem = ToolsMenu.Controls.Add(Type:=msoControlButton) NewMenuItem.Caption = "Spectral Analysis..."NewMenuItem.OnAction = "LoadFourier"End SubPrivate Sub RemoveFourierMenuItem()Dim CmdBar As CommandBarDim Ctrl As CommandBarControlOn Error Resume Next'Find tools menu and remove Spectral Analysis menu itemSet CmdBar = mandBars(1)Set Ctrl = CmdBar.FindControl(ID:=30007)Call Ctrl.Controls("Spectral Analysis...").DeleteEnd Sub保存插件:1.点击Excel,准备/文档属性2.选择:信息摘要,输入:Spectral Analysis3.另存为:Fourier.xlam第五步:测试1.启动一个新的Excel2.加载项,找到Fourier.xlam3.加载数据:点击Spectral Analysis输入数据:结果显示:如下第六步:打包点击Fourier.prj选择Package,加载一些必要的或者你想要的文件,可以添加MCR点击编译后面的打包(如何某个文件不存在,可以在相应的位置创建一个,保证打包程序运行)打包完成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2016/11/18
©
谢中华, 天津科技大学数学系.
论坛报告会
一、什么是COM
组件对象模型(Component Object Model,
简称COM),它是微软公司为了使软件开发更加
符合人类的行为方式而提出的一种规范。在这种规
范下,单个应用程序被分隔成多个独立的部分,也 即组件(Component),这种做法的好处是可以 随着技术的发展而用新的组件取代已有的组件,此 时的应用程序不再是一个一出生就命中注定要过时
2016/11/18
©
谢中华, 天津科技大学数学系.
论坛报告会
第三节 利用MATLAB生成Word文档
创建Microsoft Word服务器
建立Word文本文档
插入表格
插入图片
插入页眉、页码 插入公式 保存文档 完整案例
2016/11/18
©
谢中华, 天津科技大学数学系.
2016/11/18
©
谢中华, 天津科技大学数学系.
论坛报告会
2. 页面设置 查看PageSetup接口的所有属性
>> Document.PageSetup.get
页面设置
>> Document.PageSetup.TopMargin = 60; % 上边距60磅 >> Document.PageSetup.BottomMargin = 45; % 下边距45磅 >> Document.PageSetup.LeftMargin = 45; % 左边距45磅 >> Document.PageSetup.RightMargin = 45; % 右边距45磅
判断对象是否是 COM 对象或 ActiveX 控件, 这里 h 是对象句 柄,若对象是 COM 对象或 ActiveX 控件,返回值 tf 是 1,否 则,tf 为 0 判断句柄 h 是否是一个 COM 接口,若是,tf 为 1,否则为 0
2016/11/18
©
谢中华, 天津科技大学数学系.
论坛报告会
2016/11/18
©
谢中华, 天津科技大学数学系.
Selection接口
个区域,并对所选区域进行相关操作。
论坛报告会
利用Word服务器的Selection接口可以在文档中选定一
% 返回Word服务器的Selection接口的句柄 >> Selection = Word. Selection; % 设置选定区域的起始位置为文档内容的末尾 >> Selection.Start = Content.end; >> Selection.TypeParagraph; % 回车,另起一段 >> xueqi = '( 2009 — 2010 学年 第一学期)'; >> Selection.Text = xueqi; % 在选定区域输入文字内容 >> Selection.Font.Size = 12; % 设置字号为12 >> Selection.Font.Bold = 0; % 字体不加粗 >> Selection.paragraphformat.Alignment = 'wdAlignParagraphCenter'; % 居中对齐 >> Selection.MoveDown; % 光标移到所选区域的最后 >> Selection.TypeParagraph; % 回车,另起一段 >> Selection.TypeParagraph; % 回车,另起一段 >> Selection.Font.Size=10.5; % 设置字号为10.5 2016/11/18 © 谢中华, 天津科技大学数学系.
入一段文字。Content接口有很多属性和方法,读者可通过
Content.get和Content.methodsview命令查看。其中Start属 性用来获取或设定文字内容的起始位置,End属性用来获取 或设定文字内容的终止位置,Text属性用来写入文字内容, Font属性用于字体设置,Paragraphs属性用于段落设置。
论坛报告会
第二节 MATLAB中的ActiveX控件接口技术
一、actxcontrol函数
h = actxcontrol('progid') h = actxcontrol('progid','param1',value1,…) h = actxcontrol('progid', position) h = actxcontrol('progid', position, fig_handle) h = actxcontrol('progid',position,fig_handle,event_handler) h = actxcontrol('progid',position,fig_handle,event_handler,'filename')
h = actxcontrolselect [h, info] = actxcontrolselect
2016/11/18
©
谢中华, 天津科技大学数学系.
论坛报告会
四、actxserver函数
h = actxserver('progid') h = actxserver('progid', 'machine', 'machineName') h = actxserver('progid', 'interface', 'interfaceName') h = actxserver('progid', 'machine', 'machineName', 'interface', 'interfaceName') h = actxserver('progid', machine)
2016/11/18
©
谢中华, 天津科技大学数学系.
论坛报告会
本次报告的提纲
※ 组件对象模型(COM) ※ MATLAB中的ActiveX控件接口技术 ※ 利用MATLAB生成Word文档 ※ 利用MATLAB生成Excel文档
2016/11/18
©
谢中华, 天津科技大学数学系.
论坛报告会
第一节 组件对象模型(COM)
【例1】创建日历控件
% 新建一个图形窗口,指定图形窗口大小,返回图形窗口句柄f >> f = figure('position', [360 278 535 410]); % 在新建的图形窗口中创建一个日历控件,并设置控件的大小 >> cal = actxcontrol('mscal.calendar', [0 0 535 410], f) cal = COM.mscal_calendar 2016/11/18 © 谢中华, 天津科技大学数学系.
论坛报告会
S = h.invoke('methodname', arg1, arg2,…)
V = h.methodname
V = h.methodname(arg1, arg2,…)
【例3】创建一个日历控件,在一个循环里调用NextDay 方法,将时间后推1000天,并返回当时的时间
>> cal = actxcontrol('mscal.calendar',[10 10 540 400]); >> for i=1:1000 cal.NextDay; end >> cal.Value % 返回修改后的时间
论坛报告会
一、创建Microsoft Word服务器 1. 创建Microsoft Word服务器
try % 若Word服务器已经打开,返回其句柄Word Word = actxGetRunningServer('Word.Application'); catch % 创建一个Microsoft Word服务器,返回句柄Word Word = actxserver('Word.Application'); end
% 返回Document的Content接口的句柄 >> Content = Document.Content; >> Content.Start = 0; % 设置文档内容的起始位置 >> title = '试 卷 分 析'; >> Content.Text = title; % 输入文字内容 >> Content.Font.Size = 16 ; % 设置字号为16
2016/11/18
©
谢中华, 天津科技大学数学系.
九、注册或注销事件 registerevent方法
论坛报告会
unregisterevent方法
unregisave方法
十一、释放COM接口和对象
delete方法
release方法
七、查询和设置COM对象(或接口)的属性 get方法
inspect方法
set方法 addproperty方法 deleteproperty方法
2016/11/18
©
谢中华, 天津科技大学数学系.
八、调用COM对象和接口下的方法 S = h.invoke('methodname')
相关文档
最新文档