如何将Matlab的运行结果通过程序自动导入Excel中?

如何将Matlab的运行结果通过程序自动导入Excel中?,第1张

通过一个简单知伏的例子来说明,excel的数据送到MATLAB中,“%”后面的内容是对程序设置方法的解析。

function ceshi_Excel

%利用MATLAB生成Excel文档

% ceshi_Excel

%

% Copyright 2009 - 2010 xiezhh.

% Revision:1.0.0.0 Date:2009/12/1420:40:00

% 设定测试Excel文件名和路径

filespec_user = [pwd '\测试.xls']

% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行 *** 作,否则就打开Excel

try

% 若Excel服务器已经打开,返回其句柄Excel

Excel = actxGetRunningServer('Excel.Application')

catch

% 创建一个Microsoft Excel服务器,返回句柄Excel

Excel = actxserver('Excel.Application')

end

% 设置Excel服务器为可见状搭举携态

Excel.Visible = 1 % set(Excel, 'Visible', 1)

% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel

if exist(filespec_user,'file')

Workbook = Excel.Workbooks.Open(filespec_user)

% Workbook = invoke(Excel.Workbooks,'Open',filespec_user)

else

Workbook = Excel.Workbooks.Add

% Workbook = invoke(Excel.Workbooks, 'Add')

Workbook.SaveAs(filespec_user)

end

% 返回当前工作表句柄

Sheets = Excel.ActiveWorkbook.Sheets % Sheets = Workbook.Sheets

Sheet1 = Sheets.Item(1) % 返回第1个表格句柄

Sheet1.Activate % 激活第1个表格

% 页面设置

Sheet1.PageSetup.TopMargin = 60 % 上边距60磅

Sheet1.PageSetup.BottomMargin = 45 % 下边距45磅

Sheet1.PageSetup.LeftMargin = 45 % 左边距45磅

Sheet1.PageSetup.RightMargin = 45% 右边距45磅

% 设置行高和列宽

% 定义行高向量RowHeight

RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]'

% 设置Range对象(从A1到A16)的行高

Sheet1.Range('A1:A16').RowHeight = RowHeight

% 设置Range对象(从A1到H1)的列宽

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 % 设置单元格A4至H12的字号为10.5

Sheet1.Range('A1').Font.size = 16 % 设置单元格A1的字号为16

Sheet1.Range('A1').Font.bold = 2 % 单元格A1的字体加粗

% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除

Shapes = Sheet1.Shapes % 返回第1个工作表的Shapes接口的句柄

if Shapes.Count ~= 0

for i = 1 : Shapes.Count

Shapes.Item(1).Delete % 删除第1个Shape对象

end

end

% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性

zft = figure('units','normalized','position',...

[0.280469 0.553385 0.428906 0.251302],'visible','off') % 新建图形窗口,设为不可见

set(gca,'position',[0.1 0.2 0.85 0.75]) % 设置坐标系的位置和大小

data = normrnd(75,4,1000,1) % 产生均值为75,标准差为4的正态分布随机数

hist(data) % 绘制正态分布随机数的频数直方图

grid on % 添加参考网格

xlabel('考试成绩') % 为X轴加标签

ylabel('人数') % 为Y轴加标签

hgexport(zft, '-clipboard') % 将直方图复制到剪贴板

% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图

Sheet1.Range('A11').Select

Sheet1.Paste% Sheet1.PasteSpecial

delete(zft) % 删除图形句柄

Workbook.Save % 保存文档

你的代码肯定存在问题,但应该不至于导致MATLAB崩溃,如果如你所说每次运行MATLAB都会自动退出,那应该是其他原因导致。

1、首先应该明确:你的代码分成两部分,clear之前誉滑塌那部分是函数,应该保存成一个文件;从clear开始的后面那部分可以直接在命令行运行,也可庆圆以保存成为一个脚本文件来使用。当然,更可取的做法是把两部分都写成函数,这样就可以保存到一个文件中了。

2、函数部分的写法存在问题:

(1)odefun的前两个输入参让高数固定为t和y(其中y是向量),不是你随便写的x、y、z;

(2)你的这一行:

x=-20y=3z=0.5

相当于把所有输入参数的值都给覆盖了,肯定是不对的(看你的本意似乎是赋初始条件)。

我给改了一下,供参考:

function zd587340768

t0=0tm=2

x0=-20y0=3z0=0.5

[T,Y] = ode45(@myequ,[t0 tm],[x0 y0 z0])

plot(T,Y(:,1),'-')

function dy = myequ(t,Y)

dy = zeros(3,1)

x=Y(1)y=Y(2)z=Y(3)

dy(1) = 3*x*y+y^2+z

dy(2) = x+y*z+3

dy(3)=x*y+y*z

得到的结果:

假如是循环的话迅禅缺,其实很简单,用if进行一个判断在你的停止的回调函数里面改变if要判断的量是否为停止的信息就行给你举个例子ifflag==1breakend你亩辩的flag初始化时1,在停止按钮里面设袭猛置为0即可flag作为一个全局变量即可!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12526944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存