找回密码
 注册
关于网站域名变更的通知
查看: 528|回复: 3
打印 上一主题 下一主题

利用MATLAB生成Excel文档

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-12-18 13:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
利用MATLAB生成Excel文档
+ W* z5 y' @% C% S/ h8 I0 v8 v% `6 j2 u4 T) _# s

) ~2 ^. R' h* X$ _5 p2 m! H3 function ceshi_Excel
# h* i* G! r6 E6 z%利用MATLAB生成Excel文档
# c* C1 c3 w0 O%   ceshi_Excel! M6 U9 f9 Z1 @1 U9 |; a( }# D
%
1 J' o# e3 C' C# n7 H. h%   Copyright 2009 - 2010 xiezhh.
: Q* r* \3 q; g# g9 u7 [7 d%   $Revision: 1.0.0.0 $  $Date: 2009/12/14 20:40:00 $( l; m& Q. B. W4 f+ C: u1 M
% N, p5 u: D. |0 N4 n& O9 {9 Z
% 设定测试Excel文件名和路径
: _, ]' u0 a. kfilespec_user = [pwd '\测试.xls'];
3 T: ~8 C) j! x' S) H4 }2 G: i
& W8 v+ V0 h' t4 H% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel/ ?  O1 K' i9 q7 r
try; D7 Q, w% c% y3 C' ~$ I% Y
    % 若Excel服务器已经打开,返回其句柄Excel
* U8 z, [8 J4 R" I* w; s    Excel = actxGetRunningServer('Excel.Application');
" m0 P7 D" ]  S5 |6 F$ _; b$ ?1 }; qcatch1 I6 s* z; @4 H
    % 创建一个Microsoft Excel服务器,返回句柄Excel
9 m4 I# N& C3 B" |    Excel = actxserver('Excel.Application');
9 k( W% c4 J. Fend;3 x0 J0 d+ g, h4 x! b
) l8 P- n4 O; o# I/ h6 F- X
% 设置Excel服务器为可见状态
) e5 ^: L/ d2 v* ?0 l4 VExcel.Visible = 1;    % set(Excel, 'Visible', 1);
( _. q4 P( r/ ^5 W% d3 Z. O. c: H) D$ `% ]. N3 K. o/ J: d. l
% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel8 u( A4 ^5 i& k8 q5 I! M
if exist(filespec_user,'file');* ]3 Y- x; Y0 Q0 L$ J8 f! c
    Workbook = Excel.Workbooks.Open(filespec_user);
) J3 b1 ]6 i  a8 e8 ~    % Workbook = invoke(Excel.Workbooks,'Open',filespec_user);3 ^6 p. I) x1 h4 x9 L
else9 a% h* B. z( g7 F
    Workbook = Excel.Workbooks.Add;
; G8 x0 R! z  u4 r    % Workbook = invoke(Excel.Workbooks, 'Add');
8 S! ^& d, V, o$ F& C4 F: n    Workbook.SaveAs(filespec_user);* d4 f/ U, y& Y# P
end
, q; g" G$ K3 Y, Y0 D/ x- X
$ k/ V- D% R( N( K. b/ m# z/ o$ O; Z% 返回当前工作表句柄
' d1 r+ m# u" M1 z% YSheets = Excel.ActiveWorkbook.Sheets;    % Sheets = Workbook.Sheets;
' ~: H# l* y8 a5 J* TSheet1 = Sheets.Item(1);    % 返回第1个表格句柄1 R% E" @( I0 B+ C- c% J
Sheet1.Activate;    % 激活第1个表格
9 D  Q* l- z7 z8 ?/ U  ?4 y4 T+ B" k+ |* [" W9 V" }% j
% 页面设置
4 p! ]3 q. |9 c. ESheet1.PageSetup.TopMargin = 60;       % 上边距60磅/ ~" T5 M' C) r4 V
Sheet1.PageSetup.BottomMargin = 45;    % 下边距45磅4 q1 c/ t; ?% T/ x0 }! B# s+ f
Sheet1.PageSetup.LeftMargin = 45;      % 左边距45磅+ r9 `; D. G% U8 n. G* S* h
Sheet1.PageSetup.RightMargin = 45;     % 右边距45磅" r2 r9 I' `  S0 O
8 {, D9 r  }) R9 @8 I9 N# t/ C
% 设置行高和列宽1 Q: z/ i( ^2 K' \+ D
% 定义行高向量RowHeight; l; i" V" Y9 P' {" l* b
RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';% [: ^5 K- c2 s9 o# Y1 T
% 设置Range对象(从A1到A16)的行高7 \2 u2 j+ k6 U+ k7 f+ h
Sheet1.Range('A1:A16').RowHeight = RowHeight;! n; [& n2 u1 e& z. K0 @; \0 q
% 设置Range对象(从A1到H1)的列宽
9 M9 I4 U. W* d  G8 d, TSheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];% c9 ?: g- J# p8 B% w
  O; z5 C1 X7 g5 f5 t3 i9 B$ R2 k  p
% 合并单元格4 d4 ?0 }  {8 a# L- H& {$ B5 |) x
Sheet1.Range('A1:H1').MergeCells = 1;
1 D; z1 U8 Z. n3 p; S0 b, D; p( }Sheet1.Range('A2:H2').MergeCells = 1;, F4 Y$ I" _5 C) l" R& u
Sheet1.Range('A8:A9').MergeCells = 1;
, ~. t5 g. N5 {, Z: v6 ISheet1.Range('B8:H8').MergeCells = 1;
. ]9 B! x  y* MSheet1.Range('E8:H8').MergeCells = 1;
  t7 g; X3 B4 ?0 \! g. n% `4 _7 ?Sheet1.Range('B9:H9').MergeCells = 1;
: z! q) Q7 ]9 D5 z/ |/ fSheet1.Range('E9:H9').MergeCells = 1;1 m3 e2 o+ h  @/ o5 _1 J
Sheet1.Range('A10:H10').MergeCells = 1;
% _# @, n8 i$ @: z# w/ ySheet1.Range('A11:H11').MergeCells = 1;
. B0 Y: d2 [- C% JSheet1.Range('A12:H12').MergeCells = 1;5 a: `+ O! {. ]$ D1 {9 w
Sheet1.Range('A13:H13').MergeCells = 1;" r. b+ U8 S( k+ ?
Sheet1.Range('A14:H14').MergeCells = 1;7 ?# N! X1 T4 R3 @* [& Q3 E
Sheet1.Range('D16:H16').MergeCells = 1;) y2 n, ]& P% B9 _0 S: p

4 `1 {  x* d7 {, y; ^  k% 设置单元格的边框
/ D0 x" t" h* C4 w2 K" KSheet1.Range('A4:H14').Borders.Weight = 3;
' e% ], I7 x2 U: Y3 `6 }+ }Sheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;! l. V% F5 ?/ a5 D2 K4 o+ V
Sheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;
7 U7 }3 r9 a" y" }/ M6 _1 bSheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;  k% B, G( B/ f" Z  M! R7 Y5 |8 G6 e
Sheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;5 Z# x2 p0 `+ k' s+ q/ p' l% q

# r- q( U) x* m% 设置单元格对齐方式
, o! g4 T# |  aSheet1.Range('A1:H9').HorizontalAlignment = 3;$ A. C) E# |9 \7 i. p
Sheet1.Range('A4:A9').HorizontalAlignment = 6;7 i- z9 Q4 u6 i$ o
Sheet1.Range('C4:C7').HorizontalAlignment = 6;
. [: Z! K/ c4 N6 E+ B: D# ^Sheet1.Range('E4:E7').HorizontalAlignment = 6;
. m) [. H& Q5 g0 sSheet1.Range('G4:G7').HorizontalAlignment = 6;
- o. @2 \$ d6 A  F5 y# ASheet1.Range('A10:H10').HorizontalAlignment = 6;9 ?: m" P2 I! E4 n
Sheet1.Range('A11:H11').HorizontalAlignment = 6;    % -4130
4 o4 E8 [5 g7 B2 f' v4 h% \Sheet1.Range('A11:H11').VerticalAlignment = 1;
* F+ M% o! j4 k- _' ZSheet1.Range('A12:H12').HorizontalAlignment = 4;' h& i0 [% O0 ~7 A
Sheet1.Range('A13:H13').VerticalAlignment = 1;
; u, P9 b6 m: J! a) H1 }1 U: [Sheet1.Range('A14:H14').HorizontalAlignment = 4;: r* D& l  _" I8 x5 d
Sheet1.Range('D16:H16').HorizontalAlignment = 4;% Y6 T! W( j' f+ L* l. J2 ^6 F
6 d1 B: x: i# D, }4 F5 Q  @7 p
% 写入单元格内容' e% e) o" N8 W* X6 Q# \
Sheet1.Range('A1').Value = '试  卷  分  析';4 [* Z/ m2 K7 J- A0 M9 v3 C" f
Sheet1.Range('A2').Value = '( 2009  —  2010   学年 第一学期)';
; x0 h& b" ^) N+ J& }( [! cSheet1.Range('A4:H4').Value = {'课程名称','','课程号',...
. K$ \' ]$ K" P. x0 C  f    '','任课教师学院','','任课教师',''};
+ o, g. x! q6 _" `/ j* nSheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...
1 {* q( ?  s- B    '','应考人数','','实考人数',''};* T2 I2 g6 D7 B
Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...5 c  \6 Z$ t+ f5 x/ Y5 ?$ H+ s
    '','选用试卷A/B','','考试时间',''};+ S: T+ J9 e2 g2 I4 J, R8 p: H
Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',...
) `& x' J' a, W. f0 K    '','不及格人数','','及格率',''};
- q7 W7 R. Z6 j+ n9 K% YSheet1.Range('A8').Value = '成绩分布';, v4 v% u1 k$ g; d6 |, I
Sheet1.Range('B8').Value = '90分以上       人占        %';
8 z, v3 E) y8 `1 F) |Sheet1.Range('E8').Value = '80---89分        人占        %';
% z/ J$ E4 a( W, M$ PSheet1.Range('B9').Value = '70---79分      人占        %';! P& b. n% S  I) m9 ^- d, i8 |
Sheet1.Range('E9').Value = '60---69分        人占        %';
: Q3 z/ F/ d- @Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...
" a& Z, Y6 V5 M1 ~8 I- K    '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...+ ^- N4 ^1 R# d( G8 x
    '存在的问题及改进措施等内容)'];" q" w( k( P  j
Sheet1.Range('A12').Value = '签字 :                      年     月     日';1 J& B6 R4 T5 e1 [# t3 @6 G5 {9 c
Sheet1.Range('A13').Value = '教研室审阅意见:';
4 }- J7 Z8 w9 ?; V4 m3 n/ W* D; ISheet1.Range('A14').Value = '教研室主任(签字):             年    月    日';
- ?6 P! @& I, `: c2 a/ ISheet1.Range('D16').Value = '主管院长签字:                  年    月    日';$ w8 `6 W2 R1 v! B8 x

- J( r) r3 G+ W2 R- S% 设置字号5 m: h& h2 n, G; u# H
Sheet1.Range('A4:H12').Font.size = 10.5;    % 设置单元格A4至H12的字号为10.51 K! u# C. \5 A- n0 K/ v
Sheet1.Range('A1').Font.size = 16;          % 设置单元格A1的字号为16
- ]$ }' ~0 d  L5 aSheet1.Range('A1').Font.bold = 2;           % 单元格A1的字体加粗8 s+ {0 r4 b8 I( c4 c

; Z% H4 }/ o+ D6 ]" p9 L3 G8 V% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除
& h2 w4 w) i5 N' y. b" wShapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄2 l/ i  o2 |7 S# j, c
if Shapes.Count ~= 0;7 y  ]& h6 t' \$ t
    for i = 1 : Shapes.Count;
" U! n% ?+ O7 j+ |8 ~6 [/ V4 e        Shapes.Item(1).Delete;    % 删除第1个Shape对象' Y3 J# x9 B: J  |3 L4 a
    end;
, p8 o' A- l1 r4 Oend;
0 i" B8 l3 t2 ?, F0 W
6 @, D# N2 g5 M1 z8 @8 d! M% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性0 w4 R3 e9 r# {7 A' U6 R5 W
zft = figure('units','normalized','position',...
0 l5 S+ _4 I  i" a( H2 w5 K. F[0.280469 0.553385 0.428906 0.251302],'visible','off');  % 新建图形窗口,设为不可见( @3 x) l- b3 N# [/ y0 G8 u% T
set(gca,'position',[0.1 0.2 0.85 0.75]);    % 设置坐标系的位置和大小
' ]% B% h$ w8 e7 h7 p" d" h( t/ cdata = normrnd(75,4,1000,1);    % 产生均值为75,标准差为4的正态分布随机数9 t6 i( l+ _  _3 ~8 ]) N- H
hist(data);    % 绘制正态分布随机数的频数直方图
- x# k0 X7 B3 z1 E0 tgrid on;       % 添加参考网格
' n* v( z1 ]- V* @/ O+ Xxlabel('考试成绩');    % 为X轴加标签
' T* f8 L" h$ [- U9 `3 o) f7 J) yylabel('人数');       % 为Y轴加标签
- W6 `8 K9 }7 khgexport(zft, '-clipboard');    % 将直方图复制到剪贴板0 P7 i+ a' c) n  {# L1 i! N
% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图% D" v, f0 F; y8 R3 {8 }0 @# u7 X
Sheet1.Range('A11').Select;
( Q" [' L- N+ R1 RSheet1.Paste    % Sheet1.PasteSpecial;
% z  _3 B+ U1 G7 `+ T5 u" [" h
' J  F4 ~3 ~: w( rdelete(zft);    % 删除图形句柄
4 u2 `1 W: l: k& [7 S) g0 ?; F- jWorkbook.Save   % 保存文档
: _$ v! ]0 C* T5 _- k! w* p

该用户从未签到

2#
发表于 2020-12-18 14:35 | 只看该作者
看看楼主分享的代码。

该用户从未签到

3#
发表于 2020-12-18 16:12 | 只看该作者
学习了 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 04:16 , Processed in 0.171875 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表