EDA365电子论坛网
标题:
利用MATLAB生成Excel文档
[打印本页]
作者:
Demyar
时间:
2020-12-18 13:57
标题:
利用MATLAB生成Excel文档
利用MATLAB生成Excel文档
$ |5 E; w; I2 y. D5 C2 C* O
& `7 A I. t @4 j
& y" ], q: w4 m7 g& _
unction ceshi_Excel
2 g! A* T) _' a/ D! l
%利用MATLAB生成Excel文档
, u, q; m' v: }/ N& o8 l1 ^
% ceshi_Excel
" W8 y9 S$ k* ?
%
- k( ?# ~8 E! D- |! ?8 X
% Copyright 2009 - 2010 xiezhh.
9 U& x0 |/ D8 E# ?
% $Revision: 1.0.0.0 $ $Date: 2009/12/14 20:40:00 $
! A2 n& w! H* |' B# T3 A
$ i! b8 I+ ^7 i0 Z) ?
% 设定测试Excel文件名和路径
9 P: q M. h5 C* ~
filespec_user = [pwd '\测试.xls'];
2 {8 v+ V' k1 X$ R" G) h |
, ^: B0 ?& {/ N8 [8 i5 E
% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel
; E2 A, b8 g, a
try
9 _, e: P. t% l0 {4 o" l
% 若Excel服务器已经打开,返回其句柄Excel
9 n% L+ ~2 O3 m$ @5 }' L( K
Excel = actxGetRunningServer('Excel.Application');
* i) F7 o2 \: ?6 `9 N4 i
catch
: t E3 y; @3 J0 E0 O! _
% 创建一个Microsoft Excel服务器,返回句柄Excel
( V" o& B1 n: |& m+ r
Excel = actxserver('Excel.Application');
) y* U0 Z9 w3 @: o
end;
( F, q! t4 T }8 S
4 |5 h0 v' d! j% p8 `9 C; P
% 设置Excel服务器为可见状态
# H1 Z o+ V& T+ h0 ^. B
Excel.Visible = 1; % set(Excel, 'Visible', 1);
2 [ [2 C; j: T
2 P; j; V1 f. T" @% z' X, I
% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel
5 B" |+ i, x8 d5 O& }
if exist(filespec_user,'file');
7 ^$ J! p S" X" v9 Y) D
Workbook = Excel.Workbooks.Open(filespec_user);
0 e0 W' j w- l4 N
% Workbook = invoke(Excel.Workbooks,'Open',filespec_user);
& |- E4 \* W/ I% a, F7 c% g
else
9 X1 R, {3 [# z! a% |7 | W" P+ n5 N
Workbook = Excel.Workbooks.Add;
: F0 I6 M' ?, v1 V1 W
% Workbook = invoke(Excel.Workbooks, 'Add');
9 `2 L! L/ W5 N7 r" R& y
Workbook.SaveAs(filespec_user);
7 a& n( P! M: g, ]
end
: r5 H( w* h1 z9 R
. ]0 A9 }- g4 x m
% 返回当前工作表句柄
' C2 l) d- } ]0 j6 K$ A6 L
Sheets = Excel.ActiveWorkbook.Sheets; % Sheets = Workbook.Sheets;
; }9 m& s( W+ o4 z
Sheet1 = Sheets.Item(1); % 返回第1个表格句柄
) A8 K: w) S. i5 A3 `% L/ B
Sheet1.Activate; % 激活第1个表格
/ d$ _8 T) L" G, C
% N8 ^, ]5 H' d
% 页面设置
1 l' g) `4 v3 E8 Y( j
Sheet1.PageSetup.TopMargin = 60; % 上边距60磅
: g$ u2 @7 l1 R
Sheet1.PageSetup.BottomMargin = 45; % 下边距45磅
8 q6 j% P! f1 o/ y, ?9 e+ V" R
Sheet1.PageSetup.LeftMargin = 45; % 左边距45磅
, Y& E* I# E8 B+ i. G# [
Sheet1.PageSetup.RightMargin = 45; % 右边距45磅
: U5 m A$ z$ p4 e
" Y" q( c. Q6 k7 \2 [
% 设置行高和列宽
* r' E4 i4 B( |' K" L
% 定义行高向量RowHeight
7 |3 g; i0 Y! U
RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';
; ?8 e/ N T+ _6 C3 {% O
% 设置Range对象(从A1到A16)的行高
! l0 \* v' R' {; ~
Sheet1.Range('A1:A16').RowHeight = RowHeight;
( h+ y6 W# j2 d! r% j5 h b, d
% 设置Range对象(从A1到H1)的列宽
p" c6 P! F7 R7 P/ a
Sheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];
& ~9 M4 A- C" t: A/ L9 { D
4 D9 E3 O* A/ T- K; P" c6 e
% 合并单元格
1 q5 J) X: e2 Z3 ]1 U9 I
Sheet1.Range('A1:H1').MergeCells = 1;
& F& G- p1 {" L; v4 t- T& ~1 p9 ^
Sheet1.Range('A2:H2').MergeCells = 1;
* ?# H3 a! H2 w) k6 U; L
Sheet1.Range('A8:A9').MergeCells = 1;
$ R2 ]% L* p/ z: t- P2 L) E( M4 S
Sheet1.Range('B8:H8').MergeCells = 1;
0 x# c. _2 \6 g; x
Sheet1.Range('E8:H8').MergeCells = 1;
1 V: n2 Q4 [2 d& I$ | ]8 S
Sheet1.Range('B9:H9').MergeCells = 1;
7 l. V5 k/ R+ X7 O% _) v! N
Sheet1.Range('E9:H9').MergeCells = 1;
7 h) g# P9 K% x3 v" g$ H$ Y
Sheet1.Range('A10:H10').MergeCells = 1;
# G9 ?' ]: U% O
Sheet1.Range('A11:H11').MergeCells = 1;
$ F8 v& x/ r, {' ~. u- O
Sheet1.Range('A12:H12').MergeCells = 1;
/ {6 N3 E, G) H& v& A
Sheet1.Range('A13:H13').MergeCells = 1;
, x- k+ Z" Z2 ?5 R
Sheet1.Range('A14:H14').MergeCells = 1;
$ m3 W) Q2 F0 n8 @
Sheet1.Range('D16:H16').MergeCells = 1;
6 z7 u% M, d2 X* M/ E4 x8 ~
) X7 P+ h# a$ g# B: q: C) ^
% 设置单元格的边框
6 A' a9 ?8 E' @$ I; C0 N
Sheet1.Range('A4:H14').Borders.Weight = 3;
1 K7 X1 ]7 L3 q2 k* K/ m
Sheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;
! I% b3 U2 e5 y
Sheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;
, K* C0 S0 K7 f
Sheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;
, L4 V! H9 L6 b+ x4 j. R" N6 A
Sheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;
9 g; n6 [0 j: I& z- f- i
: p/ O6 T9 r7 { Q( I' `1 H# u
% 设置单元格对齐方式
) A' O* i6 z: ^3 R# ^' t0 r' H6 j
Sheet1.Range('A1:H9').HorizontalAlignment = 3;
/ l! S8 m. e; ~8 w
Sheet1.Range('A4:A9').HorizontalAlignment = 6;
* e! m) q. @" G3 z4 v
Sheet1.Range('C4:C7').HorizontalAlignment = 6;
4 C6 {# j8 _8 K- U( P8 X& ?
Sheet1.Range('E4:E7').HorizontalAlignment = 6;
& H1 L" {) f* J8 K# R
Sheet1.Range('G4:G7').HorizontalAlignment = 6;
; n' X& y9 ?* p- E7 \$ V2 }, k
Sheet1.Range('A10:H10').HorizontalAlignment = 6;
( x K8 g# }; E- `) ~
Sheet1.Range('A11:H11').HorizontalAlignment = 6; % -4130
& n d% ]* y: s- R
Sheet1.Range('A11:H11').VerticalAlignment = 1;
( g/ J# c- Z/ S, }- W) x
Sheet1.Range('A12:H12').HorizontalAlignment = 4;
! ]! b+ Z& `8 m% \+ _- j
Sheet1.Range('A13:H13').VerticalAlignment = 1;
# n1 B5 w& o% j5 C1 M0 X; l
Sheet1.Range('A14:H14').HorizontalAlignment = 4;
, Q! x1 _! s$ s4 J) y
Sheet1.Range('D16:H16').HorizontalAlignment = 4;
0 {8 f0 h* q6 R: r+ r7 c1 ~; W
1 w2 c( F8 n. N% z
% 写入单元格内容
3 g. |# ]# K/ v" M) P. f
Sheet1.Range('A1').Value = '试 卷 分 析';
1 a( A* q7 ~ c: ~( b
Sheet1.Range('A2').Value = '( 2009 — 2010 学年 第一学期)';
# ]8 P5 P3 b6 s- y- W- a
Sheet1.Range('A4:H4').Value = {'课程名称','','课程号',...
8 f( g+ f$ d! J) ^& `: ~ B
'','任课教师学院','','任课教师',''};
8 o) s/ C! O( U' U9 G2 Y3 z& q
Sheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...
! |! z9 h. J& D2 w
'','应考人数','','实考人数',''};
+ l& p( Q5 V4 ]1 x+ c
Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...
& A& w( r% V# w7 R0 P
'','选用试卷A/B','','考试时间',''};
. m$ L* C* s3 `/ I6 v4 f
Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',...
# q( H. e. X. W7 Z" b& A6 z) x
'','不及格人数','','及格率',''};
8 K2 y9 e; P& z( G
Sheet1.Range('A8').Value = '成绩分布';
5 x! D/ Z0 }" k; P/ R% S
Sheet1.Range('B8').Value = '90分以上 人占 %';
$ m/ E# }% |+ X1 F/ i
Sheet1.Range('E8').Value = '80---89分 人占 %';
8 r: h1 w* C; {; O' Z; d, {3 y
Sheet1.Range('B9').Value = '70---79分 人占 %';
" Q9 {. O# F- G6 O+ d0 N" p: t
Sheet1.Range('E9').Value = '60---69分 人占 %';
4 N" e* K7 U- Y, Z X
Sheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...
! r( t* H. E W/ {
'盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...
/ `! j' E8 h1 q3 O1 P. S6 N
'存在的问题及改进措施等内容)'];
$ A! m: F1 u6 k8 l F; p2 n
Sheet1.Range('A12').Value = '签字 : 年 月 日';
/ H0 V7 i$ O7 ]" ]2 w- V& q
Sheet1.Range('A13').Value = '教研室审阅意见:';
1 {1 ?" z3 {$ k5 |
Sheet1.Range('A14').Value = '教研室主任(签字): 年 月 日';
3 b& q: p: [' [4 g" c% P& b: z7 {
Sheet1.Range('D16').Value = '主管院长签字: 年 月 日';
( r# x, |, U) g8 K) x
+ H/ @8 o8 v: y
% 设置字号
5 Z; [4 y; q8 A' ^9 \9 W
Sheet1.Range('A4:H12').Font.size = 10.5; % 设置单元格A4至H12的字号为10.5
- Z0 Q+ D4 k% V; Y9 H2 L( b" G
Sheet1.Range('A1').Font.size = 16; % 设置单元格A1的字号为16
3 v8 Z- X1 M0 |
Sheet1.Range('A1').Font.bold = 2; % 单元格A1的字体加粗
+ b8 }6 Q% v4 a
/ `6 i' K% \% m5 h8 I) {
% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除
0 ]0 l. x' \% k2 j
Shapes = Sheet1.Shapes; % 返回第1个工作表的Shapes接口的句柄
* u; o& y$ g! _3 M J% m4 }# e
if Shapes.Count ~= 0;
4 U* L n1 _* B! ^* S" ?9 F6 M
for i = 1 : Shapes.Count;
+ S$ w2 B8 H* M; O1 _) [
Shapes.Item(1).Delete; % 删除第1个Shape对象
% Q( [; x- X" K! f& ^& e! x# h
end;
; d- w$ t: Q) B4 f4 x
end;
3 u* i4 r5 n3 d; r- \
- U. F8 z- D0 S: p }
% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性
+ c7 a# H9 o8 l
zft = figure('units','normalized','position',...
& V! K" H$ @3 c( C
[0.280469 0.553385 0.428906 0.251302],'visible','off'); % 新建图形窗口,设为不可见
% _/ Q# _, _+ ]
set(gca,'position',[0.1 0.2 0.85 0.75]); % 设置坐标系的位置和大小
* l$ F, L2 u% P0 M$ w! }
data = normrnd(75,4,1000,1); % 产生均值为75,标准差为4的正态分布随机数
( C& `+ b* a3 P R& j* P
hist(data); % 绘制正态分布随机数的频数直方图
3 G# d9 v- Q m# s$ f! P6 B
grid on; % 添加参考网格
3 h& A# K8 V+ u S% k% i
xlabel('考试成绩'); % 为X轴加标签
2 |7 W( v& _; j
ylabel('人数'); % 为Y轴加标签
% x, ~* q; @/ l" d7 O
hgexport(zft, '-clipboard'); % 将直方图复制到剪贴板
8 }6 L2 z: u3 `2 B1 g; T
% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图
3 J3 k4 [9 {9 V8 t
Sheet1.Range('A11').Select;
1 v' m# S6 H b' u1 c3 N! t
Sheet1.Paste % Sheet1.PasteSpecial;
: X5 z0 J( x, p% a0 N
1 y! c$ F* H5 [' @) x7 \( J$ W% u
delete(zft); % 删除图形句柄
9 M' ~) w2 O5 I& `. M* H
Workbook.Save % 保存文档
& M1 _! {. L- o7 G) N' c
作者:
panphp
时间:
2020-12-18 14:35
看看楼主分享的代码。
作者:
vrunst
时间:
2020-12-18 16:12
学习了 谢谢
作者:
vrunst
时间:
2020-12-18 16:13
谢谢!!!!!!
- a+ D7 o; \ t& m; h H. p! [
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2