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

利用MATLAB生成Excel文档

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
利用MATLAB生成Excel文档
- H5 g) M: R' o( E7 _
5 p5 K' r; z0 h6 l' ^4 u+ b: ]- \# j# ]& G: a% v
unction ceshi_Excel% [1 l9 S2 o+ ]5 e# `
%利用MATLAB生成Excel文档
: T# ~* \* O. }3 n2 B8 E%   ceshi_Excel% K% V& @2 b  N; j" E- [
%3 z' l4 w9 x0 Z, X8 @/ Z+ }
%   Copyright 2009 - 2010 xiezhh.. A2 F* p: f: c4 z7 p
%   $Revision: 1.0.0.0 $  $Date: 2009/12/14 20:40:00 $' I+ E3 x0 ?/ G4 w$ q& x. T; h% Z- y

$ k% Z2 f7 |! R) X% 设定测试Excel文件名和路径
1 C# D! k/ b& ^" U# g8 _8 K; U* Lfilespec_user = [pwd '\测试.xls'];4 c/ ~1 R' S( Y" ]
$ ^4 I! h8 }& O# ?2 `
% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel
7 i/ E3 O3 @1 _& j+ U4 btry: O9 c3 J3 B- r( {: R5 f
    % 若Excel服务器已经打开,返回其句柄Excel: I# q# A) {9 I: W
    Excel = actxGetRunningServer('Excel.Application');
% c- l; `5 b; X& Z' g" D9 acatch
* Y. v, H3 Z5 ^" R. v, n! T    % 创建一个Microsoft Excel服务器,返回句柄Excel) b+ T! _$ J& ^* x. Q  I( {
    Excel = actxserver('Excel.Application');
& Z6 B* H: ~4 v1 y5 @( n! cend;
! H1 ^/ c" z- f( `2 V$ w
; a+ J: N, G# M# h1 }% 设置Excel服务器为可见状态
3 W0 B6 y5 D. |8 B) ~& \) jExcel.Visible = 1;    % set(Excel, 'Visible', 1);2 g( r4 z3 X- w6 ]
& O, j; ~. a9 J7 T) R; R4 H
% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel
8 [0 O9 [: [' |/ W: `$ Eif exist(filespec_user,'file');1 ~! j& v) |3 V
    Workbook = Excel.Workbooks.Open(filespec_user);
+ g* J, I) _, f8 R, y5 D- A, b% V8 b    % Workbook = invoke(Excel.Workbooks,'Open',filespec_user);1 T# G" S2 C. f7 |/ i/ [1 [+ R
else4 F9 f8 V5 P0 e. z: U. T
    Workbook = Excel.Workbooks.Add;8 J* }; W: y/ ?" c( b! M- S
    % Workbook = invoke(Excel.Workbooks, 'Add');
4 L3 `# L9 ]8 t- h' G) |$ p    Workbook.SaveAs(filespec_user);
" v* s% C2 @' A+ B/ z" X, send
$ @$ O, F- i  {  C
. g: B7 O) U0 U$ |& e* _' [) z* @. Y' S% 返回当前工作表句柄
0 ?7 r0 L9 C9 Q5 L( e9 N5 wSheets = Excel.ActiveWorkbook.Sheets;    % Sheets = Workbook.Sheets;
/ J8 d4 }$ Z2 @6 E/ j$ VSheet1 = Sheets.Item(1);    % 返回第1个表格句柄( y9 Y% T- g7 s2 M
Sheet1.Activate;    % 激活第1个表格
2 z7 J! b" u- b' n' }& W. X, K" t7 P
% 页面设置
9 n" I3 Q4 {; ~1 M: ASheet1.PageSetup.TopMargin = 60;       % 上边距60磅- \! \# H, J* M
Sheet1.PageSetup.BottomMargin = 45;    % 下边距45磅
  F  I, j, u( W9 M0 A, fSheet1.PageSetup.LeftMargin = 45;      % 左边距45磅! S, Z; K% o5 c" w$ [* m0 ?
Sheet1.PageSetup.RightMargin = 45;     % 右边距45磅' D7 Z. T2 o) Z9 M
% G. M/ v% m7 T3 `/ P: N
% 设置行高和列宽
7 D; R  o3 ?& ?) l7 b8 p% 定义行高向量RowHeight
* a% ]  R+ v) a5 T0 |7 Y* t4 C( P; B/ RRowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';, v; ^" f# ~" c) o, `, G1 M; j
% 设置Range对象(从A1到A16)的行高
  _+ ?5 L/ W1 c9 q, t0 `" s$ c0 K/ {Sheet1.Range('A1:A16').RowHeight = RowHeight;
! a) D$ Y  a; A) s6 t. Q# Q- j% 设置Range对象(从A1到H1)的列宽9 \: t3 K& S4 v% Z0 X1 l
Sheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];; @. q* \' O0 Z1 z# e1 I
! z/ ?+ K& H9 y+ i% ~0 o7 z5 j
% 合并单元格
. g7 J4 M) \3 B% O" m+ kSheet1.Range('A1:H1').MergeCells = 1;2 Q& G4 T( P* \9 z8 ^1 C# m8 p
Sheet1.Range('A2:H2').MergeCells = 1;
8 k3 o$ A- i8 N+ I5 u% @5 hSheet1.Range('A8:A9').MergeCells = 1;
7 H: t7 |/ W6 F  a* ?' d& t! m) KSheet1.Range('B8:H8').MergeCells = 1;2 z" N% c  y3 o! ?
Sheet1.Range('E8:H8').MergeCells = 1;
. d0 g3 I* [2 i5 B, a3 u% z# w' vSheet1.Range('B9:H9').MergeCells = 1;
' \7 o  o1 K0 S/ rSheet1.Range('E9:H9').MergeCells = 1;5 i3 U" j. K4 L9 D1 S3 `
Sheet1.Range('A10:H10').MergeCells = 1;% i8 ~7 ?/ D4 `1 J( a
Sheet1.Range('A11:H11').MergeCells = 1;
# N: v9 l- E3 @: LSheet1.Range('A12:H12').MergeCells = 1;. k; a" s+ d4 y; x) ^- P9 E
Sheet1.Range('A13:H13').MergeCells = 1;
4 H+ c' t: N4 r% P' Z9 U3 l* \Sheet1.Range('A14:H14').MergeCells = 1;6 u  E' o9 t. L2 h
Sheet1.Range('D16:H16').MergeCells = 1;/ x$ R/ }! t2 N) }" I
- v% z1 j, _1 O5 \
% 设置单元格的边框# ]* A' B5 s" Z# I+ U. I2 g% C
Sheet1.Range('A4:H14').Borders.Weight = 3;
+ l. b2 Q& ]3 \0 A9 CSheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;
8 S. n2 @% w4 h: J+ c% ^  aSheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;
$ c9 u2 v4 N8 ]Sheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;
' v0 V+ {. i- L! F, KSheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;
8 M+ ^1 K$ |% f. f8 {+ W6 \6 N: l) q  Z% a" u
% 设置单元格对齐方式) J1 |6 r* h4 [8 K* u& y3 n
Sheet1.Range('A1:H9').HorizontalAlignment = 3;
  h4 H- b* B. Y% s" V* ^" DSheet1.Range('A4:A9').HorizontalAlignment = 6;
% K+ `7 T! f8 u/ v) kSheet1.Range('C4:C7').HorizontalAlignment = 6;( u- I9 D. d$ \0 k+ N" _; d& |
Sheet1.Range('E4:E7').HorizontalAlignment = 6;( ~4 Q6 l5 {, R" o4 M
Sheet1.Range('G4:G7').HorizontalAlignment = 6;7 I* l+ m! j& I1 m
Sheet1.Range('A10:H10').HorizontalAlignment = 6;9 J. M- T2 V5 o4 [' z
Sheet1.Range('A11:H11').HorizontalAlignment = 6;    % -4130
4 f1 N1 B& ]3 x! NSheet1.Range('A11:H11').VerticalAlignment = 1;7 P6 N# A" x0 `( R, F
Sheet1.Range('A12:H12').HorizontalAlignment = 4;
  s/ G/ }0 S1 L& D; P, USheet1.Range('A13:H13').VerticalAlignment = 1;% h! z; X0 n: L
Sheet1.Range('A14:H14').HorizontalAlignment = 4;
; j( ^6 b; C# i. J/ M! @6 G- GSheet1.Range('D16:H16').HorizontalAlignment = 4;
; j5 v$ O5 n9 ]9 i
% y' f  N$ S7 P% 写入单元格内容
- ^! v: _8 @! n% c& W% t) jSheet1.Range('A1').Value = '试  卷  分  析';+ m0 Q1 J+ R* g% s7 @' a2 R; n% G7 W
Sheet1.Range('A2').Value = '( 2009  —  2010   学年 第一学期)';
5 ^- l6 ?3 U$ l* wSheet1.Range('A4:H4').Value = {'课程名称','','课程号',...
$ {+ D6 P& D6 P3 S0 a- F: T' j7 h    '','任课教师学院','','任课教师',''};$ a/ r6 `! t6 I2 c+ s
Sheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...* _, F% \4 L- F0 r  Y" ?' B
    '','应考人数','','实考人数',''};) Z  [1 L3 k! W7 {5 `9 k, x% A3 Q
Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...* c9 U7 H, P. u+ N, f6 G" E
    '','选用试卷A/B','','考试时间',''};
' _* E+ A' l' T7 I4 VSheet1.Range('A7:H7').Value = {'考试方式','','平均分',...
; y2 k! a( v- u; p( K    '','不及格人数','','及格率',''};
* Y# r8 {+ y% M# h; YSheet1.Range('A8').Value = '成绩分布';
0 ]. R( [3 t# E5 d$ TSheet1.Range('B8').Value = '90分以上       人占        %';
* |- y" Y- p7 B, Z4 wSheet1.Range('E8').Value = '80---89分        人占        %';
; o  ?6 {0 |1 t8 @Sheet1.Range('B9').Value = '70---79分      人占        %';1 U  r' S7 l7 R/ o+ \3 f* b, g
Sheet1.Range('E9').Value = '60---69分        人占        %';. P/ `1 f, Z% S& x
Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...
/ B1 b( e3 h4 U3 U' K5 M    '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...  ^) o2 g6 X/ K( m
    '存在的问题及改进措施等内容)'];
* j7 x# W" s1 T( X8 g7 ]: k5 [Sheet1.Range('A12').Value = '签字 :                      年     月     日';
# p, R+ {  ^5 \  A0 [8 a& NSheet1.Range('A13').Value = '教研室审阅意见:';
9 `2 J4 ~- O1 zSheet1.Range('A14').Value = '教研室主任(签字):             年    月    日';. D9 M7 J/ d! m6 F4 |
Sheet1.Range('D16').Value = '主管院长签字:                  年    月    日';
! l5 Q; h  P4 @0 e
: B; J$ o' v4 v5 J( P% 设置字号1 p6 O. |& o% q; v& k* l
Sheet1.Range('A4:H12').Font.size = 10.5;    % 设置单元格A4至H12的字号为10.5+ T# @: E9 g( j% ]
Sheet1.Range('A1').Font.size = 16;          % 设置单元格A1的字号为16) m! A: N9 ~1 [- A
Sheet1.Range('A1').Font.bold = 2;           % 单元格A1的字体加粗
) d4 J& X: [2 F+ R/ E; a: y; S7 z( w
. u  ]% I, p9 y8 U% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除
; `& T, ?) ]) U1 H: jShapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄  h9 d" P  j7 w0 Q" c% C# O
if Shapes.Count ~= 0;
4 }& M8 Q7 p. Q+ y* S0 ~4 q    for i = 1 : Shapes.Count;
* ]0 }3 q# U0 {* ^2 z- z* m+ x9 ?        Shapes.Item(1).Delete;    % 删除第1个Shape对象
" s2 \* [$ G8 U) T& ^3 a4 d/ g    end;6 P2 |' O  ?; w' t! Y# Z/ `
end;# i8 m. w& y$ t) v6 e( S
" I$ p- V, M* \& S2 E, l! @) V
% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性
4 _2 `! o6 J8 L$ `4 xzft = figure('units','normalized','position',...1 t5 P$ b( K  U1 J" h1 E
[0.280469 0.553385 0.428906 0.251302],'visible','off');  % 新建图形窗口,设为不可见
$ k. e2 f$ C: M/ Z" o8 Oset(gca,'position',[0.1 0.2 0.85 0.75]);    % 设置坐标系的位置和大小: {. n# _  S: ?& w' P6 z  v
data = normrnd(75,4,1000,1);    % 产生均值为75,标准差为4的正态分布随机数+ B1 e3 Z. H+ H
hist(data);    % 绘制正态分布随机数的频数直方图  d! Q6 v( N) l; {/ f
grid on;       % 添加参考网格' c) d4 }. @: V' S
xlabel('考试成绩');    % 为X轴加标签
" ]  J6 Q4 y  `% f$ Z, z7 v' Fylabel('人数');       % 为Y轴加标签
8 m; l7 F2 c3 {* g* Z( Ghgexport(zft, '-clipboard');    % 将直方图复制到剪贴板. k% k. w5 f8 t* ?
% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图* t1 Z( ?' j* v1 H7 v! r- W
Sheet1.Range('A11').Select;5 K( y( i: ?) |% e3 C
Sheet1.Paste    % Sheet1.PasteSpecial;, r" n8 n% M) r% T& R' v

: l! G* v) \0 L$ ?/ k: Ldelete(zft);    % 删除图形句柄
& O& l3 d, r$ ~2 j/ Z0 c. MWorkbook.Save   % 保存文档
  a8 ?% \# n' K1 K! }

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 05:44 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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