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

利用MATLAB生成Excel文档

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
利用MATLAB生成Excel文档, C% b  j& `4 i3 E

5 [/ ?9 r( c+ j; `+ n9 e, R$ G# ?! ~: [
unction ceshi_Excel. g& P; L" ?2 w: b: y% G& l
%利用MATLAB生成Excel文档
9 |: V1 @$ k* j9 [%   ceshi_Excel
$ ?3 Z: }8 j0 s$ K7 q4 p! L%
& g- X( e! m+ M. f# C( Y, k%   Copyright 2009 - 2010 xiezhh.
, ^; ]: a8 o) |8 t% r) D%   $Revision: 1.0.0.0 $  $Date: 2009/12/14 20:40:00 $
% I: l2 ^; X& _; V4 n, g) x3 S5 ]
% 设定测试Excel文件名和路径
0 C% R2 v. z5 }% Z' \$ ~filespec_user = [pwd '\测试.xls'];
1 R; S) g. M# e. z1 u& V4 P; J! b# }: s  F% G
% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel2 E& `% g% z% s, p+ U
try
4 {4 P8 _2 x" a8 J    % 若Excel服务器已经打开,返回其句柄Excel# Z, z( H" @+ C* R; W0 g; M, V
    Excel = actxGetRunningServer('Excel.Application');
' t/ f& \# B+ N% H# o- ~" e$ ucatch
: Q) V3 g" B6 }( z4 u% N    % 创建一个Microsoft Excel服务器,返回句柄Excel8 ^" s: u: O3 P" W7 W( C
    Excel = actxserver('Excel.Application');; o, b1 G0 e/ M) [1 k
end;8 n/ G* u' X% V
$ ?6 @/ \, k& E2 g+ y4 {; U
% 设置Excel服务器为可见状态& `# x; i& e2 A- v9 q
Excel.Visible = 1;    % set(Excel, 'Visible', 1);
. D$ g) b  @  i
- P) }! y/ g7 z4 N9 w  z% z% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel1 _. f% I1 l& q& Q
if exist(filespec_user,'file');8 X) r/ ]: m4 E. g4 T1 x- c$ P8 b4 e
    Workbook = Excel.Workbooks.Open(filespec_user);
+ U, T$ v0 |% J/ r    % Workbook = invoke(Excel.Workbooks,'Open',filespec_user);
2 x/ @6 P$ d: ~7 M9 Z# M) r! jelse
4 S3 K9 F; r6 G! A$ x, T2 r8 M    Workbook = Excel.Workbooks.Add;
3 V4 R! D$ g6 s; i    % Workbook = invoke(Excel.Workbooks, 'Add');
* O: _8 ^1 K8 E, Y    Workbook.SaveAs(filespec_user);4 m" `  `$ X7 y9 W" J2 b
end) k# F. J' O, r

# t" ~- o. J& t+ P/ h% 返回当前工作表句柄
/ c7 X0 W, _- l8 ^Sheets = Excel.ActiveWorkbook.Sheets;    % Sheets = Workbook.Sheets;0 ~, Y7 j. a/ g. c2 {6 C2 h
Sheet1 = Sheets.Item(1);    % 返回第1个表格句柄2 ?' ^6 v3 I0 M6 y* l
Sheet1.Activate;    % 激活第1个表格" {& M5 Z8 y9 g  C+ h  V
2 V) h( |7 m" c) g: `( B; Q
% 页面设置
; e8 M# o  G$ q" ^Sheet1.PageSetup.TopMargin = 60;       % 上边距60磅1 ?2 R9 m' E9 q+ ^) w
Sheet1.PageSetup.BottomMargin = 45;    % 下边距45磅
1 @. h7 t8 {' G) [5 Y3 WSheet1.PageSetup.LeftMargin = 45;      % 左边距45磅
; b( E3 m/ @  p4 }Sheet1.PageSetup.RightMargin = 45;     % 右边距45磅5 R  \8 |( ^' T$ U1 u& r
- Q- E7 ?$ ?/ d+ e% r6 N
% 设置行高和列宽
2 T$ O& i5 X9 `8 Z" G" v% 定义行高向量RowHeight' Q# J7 m) j' t5 D6 G
RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';
. a& m, M+ q0 p* M4 |1 s% 设置Range对象(从A1到A16)的行高
* R  h8 x2 z  F, zSheet1.Range('A1:A16').RowHeight = RowHeight;% d1 e5 \( x* C/ C2 k! r
% 设置Range对象(从A1到H1)的列宽
# y8 s6 E  N. S8 e2 u( e: m" eSheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];1 g0 c* r0 v; r

& i: [3 I8 P5 c/ t! F' M% 合并单元格+ }/ Q# y# b3 X. A4 ?7 l# i
Sheet1.Range('A1:H1').MergeCells = 1;' m: `; J9 c3 `8 [5 S: L$ K/ a5 }
Sheet1.Range('A2:H2').MergeCells = 1;
0 h- n6 |  U2 f" m7 u5 P7 G+ @% qSheet1.Range('A8:A9').MergeCells = 1;2 V$ s* Y( v+ d+ S; H2 i: v
Sheet1.Range('B8:H8').MergeCells = 1;  E" r% q! i' T
Sheet1.Range('E8:H8').MergeCells = 1;
+ Q% k2 Q* q4 ?) B: m3 y5 N" R/ ASheet1.Range('B9:H9').MergeCells = 1;
4 f% [0 i6 {6 M( [/ R0 z! Q6 ^Sheet1.Range('E9:H9').MergeCells = 1;* k) p' U. K5 G
Sheet1.Range('A10:H10').MergeCells = 1;3 c. y0 q' [# w) {7 G: K
Sheet1.Range('A11:H11').MergeCells = 1;
- x. `4 ^" y' N$ a& oSheet1.Range('A12:H12').MergeCells = 1;
2 V$ I( U, ]. a( e% U  bSheet1.Range('A13:H13').MergeCells = 1;
5 H4 E. H9 K6 t/ l2 ?! x( c' J* |Sheet1.Range('A14:H14').MergeCells = 1;
6 @0 _, ^" k6 h+ Z/ i1 h8 L+ i8 iSheet1.Range('D16:H16').MergeCells = 1;  C7 \1 b4 Z! O/ s

% G$ h: f& u) m3 S5 G% 设置单元格的边框
0 z2 y# z  w, G) R* k7 OSheet1.Range('A4:H14').Borders.Weight = 3;, N" _$ Q3 b2 S" R
Sheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;" U# h( y  T1 Y5 W
Sheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;
* r: R6 |7 e2 P4 e3 E" E. GSheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;- {: _4 u. G6 \( h3 N+ A( n8 m
Sheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;2 t/ H' ]- y$ |( z1 Q- ^& j; L
; z+ j& y6 s+ P* ]# h, `
% 设置单元格对齐方式# X& P) s) V+ q+ k7 C
Sheet1.Range('A1:H9').HorizontalAlignment = 3;
2 ^* b) ]% C6 g% z5 eSheet1.Range('A4:A9').HorizontalAlignment = 6;
' w& M! |& m$ v, `* z- J: F  P( M& lSheet1.Range('C4:C7').HorizontalAlignment = 6;% m+ ~8 g2 l% x: n, x5 w9 |( c
Sheet1.Range('E4:E7').HorizontalAlignment = 6;
8 ^! E9 d% x# f$ h( ~0 ]Sheet1.Range('G4:G7').HorizontalAlignment = 6;
/ O& l: p$ v' r3 d$ l* `5 x1 NSheet1.Range('A10:H10').HorizontalAlignment = 6;$ y) u$ a5 e# v  Q
Sheet1.Range('A11:H11').HorizontalAlignment = 6;    % -4130
2 |. x+ C. g  `) X( [% OSheet1.Range('A11:H11').VerticalAlignment = 1;" Y% w2 h2 ^% B" g
Sheet1.Range('A12:H12').HorizontalAlignment = 4;& g6 ?" r: N6 _2 m
Sheet1.Range('A13:H13').VerticalAlignment = 1;
$ j6 Y% X# s$ r( a9 YSheet1.Range('A14:H14').HorizontalAlignment = 4;
8 z7 ~9 R$ {6 _( z  A0 [Sheet1.Range('D16:H16').HorizontalAlignment = 4;- z# h  e) @/ t; E- D$ |8 g& D$ }
! z; i$ n7 C; k- h. b  c; M
% 写入单元格内容- u/ U8 ]1 S9 W# U5 v
Sheet1.Range('A1').Value = '试  卷  分  析';
7 [8 ^2 i" K: \% Q/ K! WSheet1.Range('A2').Value = '( 2009  —  2010   学年 第一学期)';
9 y; p& S* Z  S6 E, ]. `( g1 XSheet1.Range('A4:H4').Value = {'课程名称','','课程号',...# B, K% L1 D( h( ?5 G  ~& M0 R
    '','任课教师学院','','任课教师',''};
3 a- v' w: N# X& z* r; }8 M. TSheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...
* @9 C" W5 L" U4 y: ?( H  G, j: N    '','应考人数','','实考人数',''};, U  n; o) f. @
Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...8 F3 }: X) T4 e4 k/ ]
    '','选用试卷A/B','','考试时间',''};( J5 A1 v! \$ i. q: @
Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',...! n1 O6 \  x8 Q2 }# Z- ~9 E% i
    '','不及格人数','','及格率',''};6 V" c' J) [( V: [- e$ J& W
Sheet1.Range('A8').Value = '成绩分布';( A# o7 B' k2 I0 r0 F
Sheet1.Range('B8').Value = '90分以上       人占        %';
* g- Z2 U6 ?: f/ |* OSheet1.Range('E8').Value = '80---89分        人占        %';
6 M/ o( Q4 q& C+ i8 S$ RSheet1.Range('B9').Value = '70---79分      人占        %';
& [5 `) U  b3 \7 N; C: T1 \) }Sheet1.Range('E9').Value = '60---69分        人占        %';1 h- V/ P% {* ~( ~8 ~
Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...  B8 k$ e% S" a: \0 T1 Z% {
    '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...
6 W" P/ M, j( k& g7 c. c9 {    '存在的问题及改进措施等内容)'];
; @. }" J1 P8 J) \, DSheet1.Range('A12').Value = '签字 :                      年     月     日';
3 ]' u5 M7 M% j. ]# V+ L7 ]Sheet1.Range('A13').Value = '教研室审阅意见:';
! u2 L- l; c7 D, p9 ?% S% wSheet1.Range('A14').Value = '教研室主任(签字):             年    月    日';
- D3 P# T- s* PSheet1.Range('D16').Value = '主管院长签字:                  年    月    日';
. v& S; X9 N3 @
2 P% k0 K" y9 o) T6 ]% 设置字号3 J$ H) d2 p5 r0 o1 f; w% r. j, Q# g( ]6 K
Sheet1.Range('A4:H12').Font.size = 10.5;    % 设置单元格A4至H12的字号为10.5
9 c. w8 a1 E% cSheet1.Range('A1').Font.size = 16;          % 设置单元格A1的字号为16/ `7 C; {7 H, j% ^# h
Sheet1.Range('A1').Font.bold = 2;           % 单元格A1的字体加粗
7 q# Y% f) ?3 W! z5 c6 s& B7 o( b* z2 L8 ]; u/ b" S
% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除
/ f7 N& B6 I' |( P( ]. eShapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄
5 r( c' X' s- D5 `. P! mif Shapes.Count ~= 0;
* z& f6 ^# C/ z0 `# F8 {    for i = 1 : Shapes.Count;
1 r1 z: W( f9 w; O/ P- j        Shapes.Item(1).Delete;    % 删除第1个Shape对象
( ~( Y1 j$ K2 I, Z& \    end;
- @9 C- r+ O  f0 Cend;
; S+ P% x0 W5 V) K) O$ e0 R, }% |
5 g5 ]: K6 e# h: k, C- E% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性
) e5 T  {; K% b& e+ e' l3 \zft = figure('units','normalized','position',...
4 q+ u, p9 `  f[0.280469 0.553385 0.428906 0.251302],'visible','off');  % 新建图形窗口,设为不可见
7 l4 O& {" Y9 h4 X$ c- _5 S  O2 U! e; Hset(gca,'position',[0.1 0.2 0.85 0.75]);    % 设置坐标系的位置和大小
* Z$ Z$ C# `6 T3 R+ A% ?2 }data = normrnd(75,4,1000,1);    % 产生均值为75,标准差为4的正态分布随机数9 X9 @% L, k, H9 {
hist(data);    % 绘制正态分布随机数的频数直方图3 z7 F- S! Z1 ~# I. e
grid on;       % 添加参考网格( v2 n; b7 b5 Z( K( O2 Z- B. x" n
xlabel('考试成绩');    % 为X轴加标签
, O8 Z/ f* m! z& Y1 Kylabel('人数');       % 为Y轴加标签+ U5 Q9 c4 Q, K/ g" O: V" @
hgexport(zft, '-clipboard');    % 将直方图复制到剪贴板
4 V* G7 W+ |8 k. P8 W9 P% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图
/ h% e6 y" ]0 r, V( DSheet1.Range('A11').Select;3 b2 T# j" e1 p$ R: P9 b
Sheet1.Paste    % Sheet1.PasteSpecial;( A6 G# u! A$ B

  k# A! l! [9 T$ m/ i3 Q$ f6 w: Odelete(zft);    % 删除图形句柄% _, a" H* l+ ^
Workbook.Save   % 保存文档2 i5 V6 @4 _/ D( o0 k) Q3 o

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-21 01:06 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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