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_Excel2 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, atry9 _, 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 S4 |5 h0 v' d! j% p8 `9 C; P
% 设置Excel服务器为可见状态
# H1 Z  o+ V& T+ h0 ^. BExcel.Visible = 1;    % set(Excel, 'Visible', 1);
2 [  [2 C; j: T2 P; j; V1 f. T" @% z' X, I
% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel5 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 zSheet1 = Sheets.Item(1);    % 返回第1个表格句柄
) A8 K: w) S. i5 A3 `% L/ BSheet1.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 RSheet1.PageSetup.BottomMargin = 45;    % 下边距45磅
8 q6 j% P! f1 o/ y, ?9 e+ V" RSheet1.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! URowHeight = [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/ aSheet1.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 SSheet1.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 SSheet1.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% OSheet1.Range('A11:H11').MergeCells = 1;$ F8 v& x/ r, {' ~. u- O
Sheet1.Range('A12:H12').MergeCells = 1;
/ {6 N3 E, G) H& v& ASheet1.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 NSheet1.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 ySheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;
, K* C0 S0 K7 fSheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;
, L4 V! H9 L6 b+ x4 j. R" N6 ASheet1.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 jSheet1.Range('A1:H9').HorizontalAlignment = 3;
/ l! S8 m. e; ~8 wSheet1.Range('A4:A9').HorizontalAlignment = 6;
* e! m) q. @" G3 z4 vSheet1.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 }, kSheet1.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; lSheet1.Range('A14:H14').HorizontalAlignment = 4;
, Q! x1 _! s$ s4 J) ySheet1.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: ~( bSheet1.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+ cSheet1.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% SSheet1.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  XSheet1.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" GSheet1.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 jShapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄
* u; o& y$ g! _3 M  J% m4 }# eif 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 lzft = 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% ixlabel('考试成绩');    % 为X轴加标签2 |7 W( v& _; j
ylabel('人数');       % 为Y轴加标签
% x, ~* q; @/ l" d7 Ohgexport(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! tSheet1.Paste    % Sheet1.PasteSpecial;: X5 z0 J( x, p% a0 N

1 y! c$ F* H5 [' @) x7 \( J$ W% udelete(zft);    % 删除图形句柄
9 M' ~) w2 O5 I& `. M* HWorkbook.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