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

利用MATLAB生成Excel文档

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
利用MATLAB生成Excel文档) _2 ?' w2 ^# b" Y; A' R4 _* N
( Y( h# D' e+ `% d( i
" @0 X: u! [# s
unction ceshi_Excel
# n* Y/ @6 |5 e3 u( R) m/ Z. K' }%利用MATLAB生成Excel文档+ a, f6 v* D, b; A+ B2 Q8 D
%   ceshi_Excel
* l. w; n& D) }& j( A+ Q# q8 u- t%2 k; `8 M9 C& E# T% r. r) ?) [
%   Copyright 2009 - 2010 xiezhh.
- I- m5 A/ a8 l' h1 b1 W+ }2 @%   $Revision: 1.0.0.0 $  $Date: 2009/12/14 20:40:00 $, ~3 J; g5 b+ G
9 I: W, n% T9 P7 ?5 O
% 设定测试Excel文件名和路径. ~" D- X) p) J
filespec_user = [pwd '\测试.xls'];0 e4 D9 ^" g1 h2 {

1 Q( H1 c' I. c0 D: S% u% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel
% Z, k+ v) n" n2 z6 @- N( ntry, [6 b2 F& V4 k' Y. a
    % 若Excel服务器已经打开,返回其句柄Excel9 i! g- B$ w, ]4 g# N" k& t
    Excel = actxGetRunningServer('Excel.Application');
2 E' N' B- |! u. {' zcatch7 A) z/ K0 b7 R- R. p. A
    % 创建一个Microsoft Excel服务器,返回句柄Excel
/ g9 W6 H. D" F; O& `" O5 e    Excel = actxserver('Excel.Application');
5 x; s1 x  ?6 Zend;: Y# Z( m. T* U: h
* ?& J- L+ r! A8 g. T
% 设置Excel服务器为可见状态7 ~# S0 ]# r* \% q7 v# P7 V
Excel.Visible = 1;    % set(Excel, 'Visible', 1);
4 p1 C% g, s. |! C3 R/ h! r# t! P5 p* T: _
% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel! ?# W) K# w' ^/ ?, h
if exist(filespec_user,'file');
: w: k% b5 e' P' F; c0 D! T    Workbook = Excel.Workbooks.Open(filespec_user);, g6 Y; l/ q2 I5 o( J) L/ a0 ?
    % Workbook = invoke(Excel.Workbooks,'Open',filespec_user);
: Z' W# T; n" z' q7 o3 v, melse
0 ^8 v  C4 S+ q    Workbook = Excel.Workbooks.Add;  e$ j5 {6 D/ a8 i5 x4 N0 j/ I
    % Workbook = invoke(Excel.Workbooks, 'Add');* H& L* t: V! H% T
    Workbook.SaveAs(filespec_user);6 |0 e+ V. J; @# L+ }& U
end
9 f) O3 @( X% T1 l( ?* ]
  p1 T6 J' H% S7 O. o% 返回当前工作表句柄+ h5 W8 N+ _2 ?- o3 @
Sheets = Excel.ActiveWorkbook.Sheets;    % Sheets = Workbook.Sheets;
8 N% f5 S% h7 p6 E1 d+ f* W+ [9 }$ }Sheet1 = Sheets.Item(1);    % 返回第1个表格句柄8 L' {) J1 w2 r  m
Sheet1.Activate;    % 激活第1个表格
" N( j4 r# h* O
8 K9 W  V5 Y( g8 x% 页面设置% j$ b; s+ Y  Q, Z* I9 C% p! {) O
Sheet1.PageSetup.TopMargin = 60;       % 上边距60磅
1 b) }9 |! g2 T" hSheet1.PageSetup.BottomMargin = 45;    % 下边距45磅
/ k; O+ h5 q# I" u, j/ [Sheet1.PageSetup.LeftMargin = 45;      % 左边距45磅
7 f" w' d; O# L+ ~Sheet1.PageSetup.RightMargin = 45;     % 右边距45磅
/ y' M3 L# I6 k) i
* o/ f9 F; M1 B9 u* C7 i! k! T9 a% 设置行高和列宽8 K) K% }5 V  z
% 定义行高向量RowHeight
; X' G; [9 o  q8 E0 L9 V1 \+ v3 GRowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';- @( x( c3 g8 v- a
% 设置Range对象(从A1到A16)的行高
5 @. D3 \! ?$ V. H% `7 o- `Sheet1.Range('A1:A16').RowHeight = RowHeight;1 l, w2 k" F" q% |. H$ i# q# D
% 设置Range对象(从A1到H1)的列宽
' L* g1 k* U% v% O! S( L4 WSheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];
5 B6 C. y. n5 m" Q* x1 ~: W9 a
0 n# Z* b! q5 q% 合并单元格4 n5 d0 l. a8 M: h& w
Sheet1.Range('A1:H1').MergeCells = 1;, s" f" ~4 b# g$ Y. Z
Sheet1.Range('A2:H2').MergeCells = 1;
: N. W4 q0 A) O! F2 }Sheet1.Range('A8:A9').MergeCells = 1;; {6 Z4 f, @( m" x
Sheet1.Range('B8:H8').MergeCells = 1;
5 F. X" E0 C' O* lSheet1.Range('E8:H8').MergeCells = 1;
; t3 V& ]# p# X. n4 G& ySheet1.Range('B9:H9').MergeCells = 1;& ~. \( M  N6 V' H5 ~& ^
Sheet1.Range('E9:H9').MergeCells = 1;
, a" z! N" Q/ M* @8 ?Sheet1.Range('A10:H10').MergeCells = 1;
' s7 `' j2 _" X) z& g4 a1 X* l+ _Sheet1.Range('A11:H11').MergeCells = 1;
; E6 p% Z/ u. i6 t) |; ySheet1.Range('A12:H12').MergeCells = 1;# ^8 q0 D/ i$ P/ q' s
Sheet1.Range('A13:H13').MergeCells = 1;
! t- s0 z. L: gSheet1.Range('A14:H14').MergeCells = 1;' g& ^5 N$ ]  [/ o6 V, t+ O" Q
Sheet1.Range('D16:H16').MergeCells = 1;
! e/ v* T- S6 r7 d! W, R
8 t( o2 k# r8 J( ]  }0 H5 y, I% 设置单元格的边框
4 T( u1 W1 D4 ^  F+ |+ ]Sheet1.Range('A4:H14').Borders.Weight = 3;( ?  W1 w; Z7 E3 @# @/ ~) i8 Y1 }
Sheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;
/ O) O' x( f/ n$ v% S5 x" ESheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;! d" G  C8 y( [) |' `6 z6 f  K" p
Sheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;
8 [0 \  q+ B' uSheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;. Z/ R$ t( A- Y& L/ E

- Y/ C  t. ?: ]0 Y% 设置单元格对齐方式; R: A# J9 D4 s$ M  Q5 \- x
Sheet1.Range('A1:H9').HorizontalAlignment = 3;
) p' ]1 m* d1 u0 E. {Sheet1.Range('A4:A9').HorizontalAlignment = 6;* k7 b. K0 d: Y  N5 d4 }
Sheet1.Range('C4:C7').HorizontalAlignment = 6;
" V% k  C/ i1 a6 u, ISheet1.Range('E4:E7').HorizontalAlignment = 6;" u) c* }& K+ x2 M
Sheet1.Range('G4:G7').HorizontalAlignment = 6;
; p/ x# J0 ^) ?: CSheet1.Range('A10:H10').HorizontalAlignment = 6;) I4 J1 }" r( e8 `' [
Sheet1.Range('A11:H11').HorizontalAlignment = 6;    % -41302 C) [% ?( D7 k( J+ R/ W8 S
Sheet1.Range('A11:H11').VerticalAlignment = 1;9 s/ ?% _1 n$ {5 w$ ^- i2 `
Sheet1.Range('A12:H12').HorizontalAlignment = 4;
+ V! ]3 L1 s7 f5 ^Sheet1.Range('A13:H13').VerticalAlignment = 1;
$ U# Z+ h) u. a' W/ mSheet1.Range('A14:H14').HorizontalAlignment = 4;: _- e$ Q8 W; M% I7 m! Y* N
Sheet1.Range('D16:H16').HorizontalAlignment = 4;
) G8 o# i( B5 C) r# Q$ C3 |/ B1 A7 s  L: g* g  C$ E, [% |' l3 W
% 写入单元格内容1 m9 R' H" L" A% p( e  W
Sheet1.Range('A1').Value = '试  卷  分  析';- N7 q  d1 G$ {: g/ j! }5 `9 h7 T+ {
Sheet1.Range('A2').Value = '( 2009  —  2010   学年 第一学期)';
6 t, e* v2 {8 W6 NSheet1.Range('A4:H4').Value = {'课程名称','','课程号',...; t/ U4 C, ?6 P6 x" g: |- [( R
    '','任课教师学院','','任课教师',''};/ h7 e$ l4 ^1 K  Z' l
Sheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...
0 L) P8 X' X0 h1 x' n7 y1 R& y+ Z    '','应考人数','','实考人数',''};
* y7 {9 s6 Z, z4 S! I! MSheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...
$ a/ e' n6 n% i4 s7 n. G    '','选用试卷A/B','','考试时间',''};- n/ t) `' j* D( y% z( U/ R
Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',...
  |8 p/ t! b& X3 Z. [: p    '','不及格人数','','及格率',''};
% I/ z" H. ~3 k( [- {Sheet1.Range('A8').Value = '成绩分布';# j8 w: o& y8 _1 d
Sheet1.Range('B8').Value = '90分以上       人占        %';! p: U9 s; D: D9 R
Sheet1.Range('E8').Value = '80---89分        人占        %';
7 b- a; y+ B. I6 L7 O& fSheet1.Range('B9').Value = '70---79分      人占        %';
. c9 y+ \3 d2 h, i; \Sheet1.Range('E9').Value = '60---69分        人占        %';& h1 o9 J" P* v3 B  _
Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...
% N3 c" s  F+ f+ ~  }/ c+ t! y    '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...0 b1 b6 b* h1 S* R
    '存在的问题及改进措施等内容)'];
# N  B! M6 n3 }0 h1 uSheet1.Range('A12').Value = '签字 :                      年     月     日';
3 b4 i9 U* A6 z/ J4 GSheet1.Range('A13').Value = '教研室审阅意见:';9 v+ f: A1 W; K9 Y3 Q' P5 l9 ?
Sheet1.Range('A14').Value = '教研室主任(签字):             年    月    日';2 X1 b& v/ j' F8 p: v7 u( N
Sheet1.Range('D16').Value = '主管院长签字:                  年    月    日';
/ a, q" h: e  R) b1 i
' F  B( x: f# x3 t1 H' s3 I% 设置字号
1 y/ ~6 t1 I$ K' F+ B# ]+ o+ zSheet1.Range('A4:H12').Font.size = 10.5;    % 设置单元格A4至H12的字号为10.5
) v- x( e, H8 W4 y; q3 [Sheet1.Range('A1').Font.size = 16;          % 设置单元格A1的字号为16
8 l6 Y+ m! k" uSheet1.Range('A1').Font.bold = 2;           % 单元格A1的字体加粗. b) ?2 s4 c8 b5 w1 u  Y9 [, {' L
: n0 S# ^: Y7 w  L
% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除  x2 m: b& ^$ K. X: T- L( K" }: Z
Shapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄
8 I1 o: B- U' B9 qif Shapes.Count ~= 0;
% }) Y( j. T9 ]    for i = 1 : Shapes.Count;
% C- R) q1 X7 U0 V2 i0 A/ r) L        Shapes.Item(1).Delete;    % 删除第1个Shape对象
' v# P  Z) X8 ~, a/ }    end;( w- r" r2 S& ~1 L! E- s9 O
end;2 f; e/ @7 g4 }2 l3 M' |5 ]
  I! d& T6 k/ {8 j* P- v5 |
% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性
# H3 L$ m' s: t0 o) ozft = figure('units','normalized','position',...& \- W( M/ ?* E* r* U5 w3 g/ d3 Z( |
[0.280469 0.553385 0.428906 0.251302],'visible','off');  % 新建图形窗口,设为不可见6 X8 u8 d; l( ]
set(gca,'position',[0.1 0.2 0.85 0.75]);    % 设置坐标系的位置和大小
  ?' n* W/ d+ {! ~0 H3 c6 Gdata = normrnd(75,4,1000,1);    % 产生均值为75,标准差为4的正态分布随机数' ^2 k4 e. t1 m+ [& c9 Y  E+ r1 Q
hist(data);    % 绘制正态分布随机数的频数直方图
3 x. v$ _" C; u& r' S( L  {. Tgrid on;       % 添加参考网格! o. O9 K" `2 a; b2 f- y
xlabel('考试成绩');    % 为X轴加标签, w# o4 _: h5 J' a0 q: J' ?
ylabel('人数');       % 为Y轴加标签
. j" z) h% e$ w: S3 Ghgexport(zft, '-clipboard');    % 将直方图复制到剪贴板2 Z/ v$ A2 ]1 u0 j# ^. R
% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图
6 d5 I3 c  w3 f/ O4 VSheet1.Range('A11').Select;
2 {: K* ]0 ~' ZSheet1.Paste    % Sheet1.PasteSpecial;
, M' g1 I6 A2 }$ G
1 P0 m+ E3 O, w) K/ d# _* y5 R: D' Wdelete(zft);    % 删除图形句柄; [& s1 e7 ^, Q. Z4 x6 \, s% Y
Workbook.Save   % 保存文档0 v6 t3 A9 N; k! G

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 12:51 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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