|  | 
 
| 
利用MATLAB生成Excel文档0 w* G' r, A( Z4 z3 E
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  
 2 v, F: x4 Q- ]0 e' T1 s
 6 U' b6 o) n" \. ]8 s9 {- t* T7 ?9 O2 Bunction ceshi_Excel1 ~. \" i8 C$ n' T" p. v
 %利用MATLAB生成Excel文档( v  C* [* o9 M
 %   ceshi_Excel  X% M2 ^; O# ~
 %4 G. {+ k2 \5 F( V
 %   Copyright 2009 - 2010 xiezhh.# B# \  p% K, ?  G$ \
 %   $Revision: 1.0.0.0 $  $Date: 2009/12/14 20:40:00 $( K" l- Q% K8 x3 r2 i$ w+ g- L. r% D
 - M" a- M" f9 }3 s" E8 B3 j
 % 设定测试Excel文件名和路径
 8 n; N" _. \" a' P7 q! B& S3 w7 }filespec_user = [pwd '\测试.xls'];2 n2 Q; Q" f9 {! S2 ?
 
 ; p" B3 w/ E( b. l5 d% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel7 u; P4 t8 V0 e# a4 C: e  _
 try1 i% e4 Z( N. ]8 z5 |5 T0 z/ d- M
 % 若Excel服务器已经打开,返回其句柄Excel+ [$ p0 `8 U, I6 l+ J: ?8 ^4 y- V9 N
 Excel = actxGetRunningServer('Excel.Application');' S. s2 _4 m" U6 g4 t
 catch2 S! B1 {/ b3 L! U1 N/ m/ [
 % 创建一个Microsoft Excel服务器,返回句柄Excel5 H" U- ?5 z% C: z
 Excel = actxserver('Excel.Application');, R) H' W/ w9 U0 \! k5 o$ S6 L
 end;
 ! r( }( g8 T% I" m* @$ d8 A1 A; ^7 U: A7 j, k% D
 % 设置Excel服务器为可见状态
 6 E6 E' L8 L+ x5 h; b3 h7 \Excel.Visible = 1;    % set(Excel, 'Visible', 1);% j" @+ \+ d- O; X* q2 ^( z
 
 " o3 Z/ a0 q) b% f4 m% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel2 e9 C' K+ T9 N, _2 S6 n6 V$ h
 if exist(filespec_user,'file');
 9 k& m3 x+ \5 ^' L3 j/ g    Workbook = Excel.Workbooks.Open(filespec_user);
 ! R, u" d+ I8 P5 F    % Workbook = invoke(Excel.Workbooks,'Open',filespec_user);
 6 r# ?7 a" g3 ^4 c& H, Z6 v9 `else
 ' e0 \* V' b6 d- ^% g  L    Workbook = Excel.Workbooks.Add;
 0 V0 {, G# z% x4 j! |" M& b    % Workbook = invoke(Excel.Workbooks, 'Add');9 a& M5 q- t% Q* s! }% J
 Workbook.SaveAs(filespec_user);
 9 ~! Q2 a" ]& u" w& ~end; [1 f; B2 \2 e; ^5 ^2 P! O
 ) K' E' Q2 m" O0 D/ n, j: Q" W
 % 返回当前工作表句柄
 . K7 D; Q! P9 SSheets = Excel.ActiveWorkbook.Sheets;    % Sheets = Workbook.Sheets;# m  y3 ^) G4 r. c5 E+ \! }. H
 Sheet1 = Sheets.Item(1);    % 返回第1个表格句柄( i% }$ G" N4 K3 ^9 j
 Sheet1.Activate;    % 激活第1个表格! k2 H, U2 H5 G  R0 \+ |6 n
 
 . `. ~* O1 M6 v3 _. L! L3 ]% 页面设置& |& D" `2 v8 v5 ^* v
 Sheet1.PageSetup.TopMargin = 60;       % 上边距60磅1 l) j4 G, G6 l! x1 S, b
 Sheet1.PageSetup.BottomMargin = 45;    % 下边距45磅: [" O  C8 {: x7 D2 N
 Sheet1.PageSetup.LeftMargin = 45;      % 左边距45磅3 n4 o) q% Q- A$ E5 a$ ^% R
 Sheet1.PageSetup.RightMargin = 45;     % 右边距45磅& [0 }% _0 s# m2 A* E" m7 ~& O
 
 ( n1 W' J* W; w' d; X% S% 设置行高和列宽
 - M3 V! J3 W/ n, d6 J6 U, Q% 定义行高向量RowHeight- J3 c7 r- o, H8 M
 RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';
 8 E( l6 O; Y2 A2 W" l# p% 设置Range对象(从A1到A16)的行高# S# s+ e1 ^* B" c5 Z/ a2 C; [  E( l
 Sheet1.Range('A1:A16').RowHeight = RowHeight;7 g! W6 l2 ?9 e! G$ I
 % 设置Range对象(从A1到H1)的列宽# O( s( p* U! t( N7 I+ p& Y* }
 Sheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];
 & K# {$ L! X! @" L3 f8 Q- K
 7 f9 `6 `/ h+ h' h2 }" Y/ Z1 t) B% 合并单元格6 f) v( h- v7 [! P
 Sheet1.Range('A1:H1').MergeCells = 1;3 u( ~8 B; E* _& y
 Sheet1.Range('A2:H2').MergeCells = 1;/ I8 g4 @4 ^4 V" l  E
 Sheet1.Range('A8:A9').MergeCells = 1;
 3 k( f7 T5 |5 r. K( r$ d/ rSheet1.Range('B8:H8').MergeCells = 1;
 # d( @3 M- I% _9 h5 @/ dSheet1.Range('E8:H8').MergeCells = 1;/ T/ d3 o" s8 ^, n0 y  p* b
 Sheet1.Range('B9:H9').MergeCells = 1;! N" b# j- C0 c8 ~, T
 Sheet1.Range('E9:H9').MergeCells = 1;9 x# U: t2 r' B
 Sheet1.Range('A10:H10').MergeCells = 1;, C! L5 C! s4 K: V- W
 Sheet1.Range('A11:H11').MergeCells = 1;3 O- d- I0 I* c6 a+ S0 g  ]
 Sheet1.Range('A12:H12').MergeCells = 1;: j7 i% J8 y1 h! l# C$ O
 Sheet1.Range('A13:H13').MergeCells = 1;  `6 Y, b7 ^/ k
 Sheet1.Range('A14:H14').MergeCells = 1;
 + X" O& b4 X# [! d& Q, fSheet1.Range('D16:H16').MergeCells = 1;. G7 m! V* D8 e/ e% K) u1 B( J0 y
 ; K9 M: i1 f% ~' L6 j
 % 设置单元格的边框0 Q2 S5 p8 F" ]* a  {6 G
 Sheet1.Range('A4:H14').Borders.Weight = 3;( R: ^. D3 e! k
 Sheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;
 ; C# N: q" X" z0 ?3 \$ ]/ N- xSheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;. Y2 o4 A# W  {$ t8 q3 @
 Sheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;
 - ~2 u. `+ \& I1 P6 qSheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;
 9 h. b$ z: s6 O8 a4 w
 : N3 \+ ]" O: e2 _; g8 F% 设置单元格对齐方式
 ! e# s1 [: [) \8 x7 @" T  ~Sheet1.Range('A1:H9').HorizontalAlignment = 3;* V- s! i0 C- Z0 s  L
 Sheet1.Range('A4:A9').HorizontalAlignment = 6;" ?9 G& }# U6 Y) k/ y
 Sheet1.Range('C4:C7').HorizontalAlignment = 6;
 / i/ |8 D) z6 {0 B1 m: z1 P( J& b+ pSheet1.Range('E4:E7').HorizontalAlignment = 6;
 9 v# p/ r, k! H" b) |9 L/ dSheet1.Range('G4:G7').HorizontalAlignment = 6;# d! y! m9 u! \# r
 Sheet1.Range('A10:H10').HorizontalAlignment = 6;9 N1 s# S+ ^3 y) p2 s8 S5 Q" y
 Sheet1.Range('A11:H11').HorizontalAlignment = 6;    % -4130
 : q8 D7 q# Y8 ?: G: s- P) C% `Sheet1.Range('A11:H11').VerticalAlignment = 1;
 : }2 h) K7 H  A6 w# c2 }Sheet1.Range('A12:H12').HorizontalAlignment = 4;
 - ?( |4 r1 V2 [Sheet1.Range('A13:H13').VerticalAlignment = 1;( h* W) H$ h' m4 ]9 ^; [+ N! Q
 Sheet1.Range('A14:H14').HorizontalAlignment = 4;
 - {# {. |2 B; B. F: u4 N) eSheet1.Range('D16:H16').HorizontalAlignment = 4;
 2 K! y2 A5 v  g) T* j$ E" g% m( m
 : O. ^% z  J. ^( w$ k# X! R' G" J: c% 写入单元格内容
 5 y) |9 X0 p2 y6 }% ISheet1.Range('A1').Value = '试  卷  分  析';
 # Q& r' w& B6 F( @! CSheet1.Range('A2').Value = '( 2009  —  2010   学年 第一学期)';
 8 w+ y  t1 F0 m% S8 \3 V6 K; Z3 tSheet1.Range('A4:H4').Value = {'课程名称','','课程号',...
 4 R6 n9 \9 U5 B+ H9 R  O$ s( L    '','任课教师学院','','任课教师',''};
 S8 w. P0 p; ~6 H% iSheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...$ K  A1 t7 R  g# K2 n
 '','应考人数','','实考人数',''};. v, X) o5 Y- C
 Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...
 % \$ g6 X+ ?: t% z3 Z  g    '','选用试卷A/B','','考试时间',''};# B) u& X4 w6 k; D1 l4 F& u
 Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',...7 n2 K; b' `7 b  {& F
 '','不及格人数','','及格率',''};
 - x: J, N4 y& \& `9 D* VSheet1.Range('A8').Value = '成绩分布';7 B: _8 d5 W9 v1 D& D5 V
 Sheet1.Range('B8').Value = '90分以上       人占        %';9 u" I: w0 t' ?0 W, @% q. [% D
 Sheet1.Range('E8').Value = '80---89分        人占        %';
 & l4 `: ?; y" {* J- c2 b0 g5 ESheet1.Range('B9').Value = '70---79分      人占        %';
 : D# s# K$ I. U* O! x1 @; M7 BSheet1.Range('E9').Value = '60---69分        人占        %';  i; z& D9 q3 `  ]  H
 Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...! W5 z7 S" ~3 N& o
 '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...
 . P& C: w7 R) T& c    '存在的问题及改进措施等内容)'];
 2 K1 l; K2 \; o# ISheet1.Range('A12').Value = '签字 :                      年     月     日';3 X4 n7 G) G$ u8 p" w+ ], T
 Sheet1.Range('A13').Value = '教研室审阅意见:';6 k) Q, M, n) ^& g7 v4 S
 Sheet1.Range('A14').Value = '教研室主任(签字):             年    月    日';
 ' J+ S. p6 Q3 d/ Z0 ~Sheet1.Range('D16').Value = '主管院长签字:                  年    月    日';
 V: }0 o1 L, w+ l* o1 f$ _5 g, W  u
 % 设置字号
 3 F7 K; s0 B* f3 U2 V; |5 c1 L; z) USheet1.Range('A4:H12').Font.size = 10.5;    % 设置单元格A4至H12的字号为10.5" L- x& r% m; z& ^
 Sheet1.Range('A1').Font.size = 16;          % 设置单元格A1的字号为16
 5 V1 N+ @, P8 _+ J- m. i- JSheet1.Range('A1').Font.bold = 2;           % 单元格A1的字体加粗4 d# B5 Q8 o4 Q3 p9 v% S9 q# P
 3 W( w8 h2 c# I" r8 v! ~  a2 W
 % 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除
 3 q" S2 J" @3 a9 H" Y! S! N: FShapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄
 * ]& w; m4 c2 n0 w7 F- A8 W6 K6 Aif Shapes.Count ~= 0;+ i3 w* J  l- B9 Q  _2 r
 for i = 1 : Shapes.Count;
 # M4 t9 Z7 m0 U4 b  _1 Y        Shapes.Item(1).Delete;    % 删除第1个Shape对象. X# V9 `, Y" T' X3 n8 {. n, u
 end;
 ) q2 q1 p& Z4 P2 o/ Qend;+ N# L( w" w! X9 p# A2 w9 m
 
 * i5 ^. W- F9 S, P2 `7 l+ v( M% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性: l! D* i2 U* u% J3 {' P
 zft = figure('units','normalized','position',...
 1 E! G. u% J. O/ l[0.280469 0.553385 0.428906 0.251302],'visible','off');  % 新建图形窗口,设为不可见4 a# ]4 w5 ^, k9 V' r$ Q/ g0 m
 set(gca,'position',[0.1 0.2 0.85 0.75]);    % 设置坐标系的位置和大小/ Z7 R# g' A4 F2 k) @
 data = normrnd(75,4,1000,1);    % 产生均值为75,标准差为4的正态分布随机数. Q- }& t# |3 Q# V/ m4 M0 ~
 hist(data);    % 绘制正态分布随机数的频数直方图
 " E- ]4 h! o+ U1 K; G& g/ f8 @' A# rgrid on;       % 添加参考网格' Q7 v; N0 y3 I
 xlabel('考试成绩');    % 为X轴加标签
 ( N9 L) Z" P, tylabel('人数');       % 为Y轴加标签$ h7 R0 t9 Y/ O7 J
 hgexport(zft, '-clipboard');    % 将直方图复制到剪贴板
 ^, k9 V3 U+ i# f9 X. c5 S% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图: ?/ f6 S" L' i( o, P9 z
 Sheet1.Range('A11').Select;
 4 Q" Z# @. D, }8 I8 _. ?5 sSheet1.Paste    % Sheet1.PasteSpecial;
 & U% a% S) R+ |. F; M% Y7 u& |; g  a2 A+ D  W7 d; E+ F
 delete(zft);    % 删除图形句柄
 3 x' e% S. |# LWorkbook.Save   % 保存文档# n7 A; W4 H( w% ^1 x& L# v5 e, s
 
 | 
 |