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

利用MATLAB生成Excel文档

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
利用MATLAB生成Excel文档! p- `/ m+ ]5 e$ h0 q

1 P4 P3 p6 h1 r, V; B
4 _2 g& s( z$ P+ z5 Q! Nunction ceshi_Excel" A0 w  X& W" H$ f1 Z- z+ E
%利用MATLAB生成Excel文档  D5 ]7 ]; e) i: S3 \6 i
%   ceshi_Excel
1 u0 ^& b& P, o4 ^%. p: f  j0 _9 L/ P- y
%   Copyright 2009 - 2010 xiezhh.5 B$ r* |$ t1 \
%   $Revision: 1.0.0.0 $  $Date: 2009/12/14 20:40:00 $: m2 b$ Z) t0 M

' O  D1 ~: E( Z4 m& z" U% B3 O% 设定测试Excel文件名和路径7 H# ^5 v" ]% V9 q  h  b9 U
filespec_user = [pwd '\测试.xls'];& o% `/ l0 W5 H( Y9 |
6 L& d7 D# K; ]. q5 b' q3 B$ m) @
% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel/ r0 h! t6 v3 @( q9 n0 k8 H
try
- V) D+ e6 L' v( J    % 若Excel服务器已经打开,返回其句柄Excel( L2 A5 p/ T) R
    Excel = actxGetRunningServer('Excel.Application');
9 L/ o! x* ]/ S; K% O+ J; S4 fcatch
  f$ z* f" E6 B7 h2 j2 u    % 创建一个Microsoft Excel服务器,返回句柄Excel  i( @; o* J  L: T3 ^; {
    Excel = actxserver('Excel.Application');
( Q( N' U' @3 R/ v6 Q* Xend;
: V2 \& R1 }% f$ _4 O2 ~" k
1 f: q7 V/ U7 I# }% 设置Excel服务器为可见状态) e" ~$ \4 j+ j8 u; X
Excel.Visible = 1;    % set(Excel, 'Visible', 1);% T$ {, f, A3 a  o3 J8 E2 W# A* R

; E5 T+ c7 ^' G$ H; E7 e. K) U% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel
8 {  }& D3 N* Xif exist(filespec_user,'file');! s: ~6 j6 w# l- n: R+ Y* ?' s$ I
    Workbook = Excel.Workbooks.Open(filespec_user);: P3 B5 f+ |6 D- @' g
    % Workbook = invoke(Excel.Workbooks,'Open',filespec_user);
  b! u! g3 f% I0 O3 C  helse5 w6 W# i& h0 `8 p! N4 K
    Workbook = Excel.Workbooks.Add;
; W5 W. O8 Q6 s' h* v" F    % Workbook = invoke(Excel.Workbooks, 'Add');7 E# l2 q% ~( w1 m! ?! O
    Workbook.SaveAs(filespec_user);: O( _( s  J7 m0 l
end9 b" V! }8 K& w6 \2 q) h
2 N5 Y9 {* }3 J2 ~7 M7 f) w* \
% 返回当前工作表句柄5 G) a$ G# q. F( J
Sheets = Excel.ActiveWorkbook.Sheets;    % Sheets = Workbook.Sheets;
* K" C3 P) m7 r  e( |Sheet1 = Sheets.Item(1);    % 返回第1个表格句柄
: W& j- D& P4 K. U/ w7 k- [Sheet1.Activate;    % 激活第1个表格' A$ @5 @) T) k+ q6 t
/ E0 c: w' N) T
% 页面设置
/ ?/ {- }( }1 V2 t! o3 a6 v- ]Sheet1.PageSetup.TopMargin = 60;       % 上边距60磅
' L0 B' D' O% G( ESheet1.PageSetup.BottomMargin = 45;    % 下边距45磅
+ U; S) V+ L: e3 u& |. [Sheet1.PageSetup.LeftMargin = 45;      % 左边距45磅
9 D9 f! j1 q/ aSheet1.PageSetup.RightMargin = 45;     % 右边距45磅
  v/ H0 {* _9 D& l7 N) g7 Q
# k; v! ~+ ~: O; ]' p# X% 设置行高和列宽: x4 }8 u( S: X7 x% F6 c# B
% 定义行高向量RowHeight1 O/ X7 }* N# Q
RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';
& ?+ w  J) O4 j, {, @  Q2 d! w% 设置Range对象(从A1到A16)的行高
/ g- X: R# u+ c5 C; ZSheet1.Range('A1:A16').RowHeight = RowHeight;9 B" O$ Y8 {9 \8 q4 m% [( ~  y
% 设置Range对象(从A1到H1)的列宽
- F: }: V2 |: J5 @7 R  NSheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];
7 W/ C* g3 R1 d/ J$ D( P  f
, v. A% R& O5 B% 合并单元格
3 O, C/ K+ y$ E& _" Y8 k: iSheet1.Range('A1:H1').MergeCells = 1;; d6 q- Y3 l: b2 l
Sheet1.Range('A2:H2').MergeCells = 1;
# J. M& |3 k- N9 K, Y$ {: LSheet1.Range('A8:A9').MergeCells = 1;
3 F% o, ^9 f1 J4 L3 o% D3 O/ ]$ ]+ x+ jSheet1.Range('B8:H8').MergeCells = 1;
6 p* L3 z3 N' k: rSheet1.Range('E8:H8').MergeCells = 1;9 T: V. C3 W# G* {; q, y
Sheet1.Range('B9:H9').MergeCells = 1;/ f5 A1 K" I$ F- t% R! h  ]( W
Sheet1.Range('E9:H9').MergeCells = 1;6 S0 ?  E5 S' y5 }
Sheet1.Range('A10:H10').MergeCells = 1;
* I# K: M* I( E' f; s! USheet1.Range('A11:H11').MergeCells = 1;
" \% ~. m" P' [3 J7 w& @Sheet1.Range('A12:H12').MergeCells = 1;& u6 Z0 B8 G! ]2 I5 ]
Sheet1.Range('A13:H13').MergeCells = 1;, t4 |8 S, w5 v3 T" H6 q
Sheet1.Range('A14:H14').MergeCells = 1;
2 r+ e3 b8 W2 C! U3 N) [Sheet1.Range('D16:H16').MergeCells = 1;/ c, H4 i! y. W2 K+ ?6 J
$ S' J3 x& D: {( m8 s! i! S0 U# V1 e
% 设置单元格的边框4 Y! h' w1 s2 U& g: l2 Q
Sheet1.Range('A4:H14').Borders.Weight = 3;
8 e0 i; p! Z! _2 tSheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;5 H1 ~! h" A" V/ Z! U+ Z7 F6 Z
Sheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;) w, i( t6 R: Y* \# g% @" \
Sheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;, K- ^" e( q. }# I; J$ Z
Sheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;2 p: d0 h/ Q1 R" O( ?
7 S# X. d1 H: Q! n, ^2 ]4 ?" t
% 设置单元格对齐方式! L  _7 s6 K% H& b$ N+ O0 ~
Sheet1.Range('A1:H9').HorizontalAlignment = 3;* n1 X6 _' J) ]" E
Sheet1.Range('A4:A9').HorizontalAlignment = 6;- b, A8 X) ]: G0 a# N
Sheet1.Range('C4:C7').HorizontalAlignment = 6;9 V/ H! {7 l) I- x
Sheet1.Range('E4:E7').HorizontalAlignment = 6;8 i2 _2 [0 N# _1 o
Sheet1.Range('G4:G7').HorizontalAlignment = 6;; a# e* O* ^8 Q8 @
Sheet1.Range('A10:H10').HorizontalAlignment = 6;
8 G, A0 q4 l/ A4 a, sSheet1.Range('A11:H11').HorizontalAlignment = 6;    % -4130$ I1 S/ B1 `" M4 D% i. a
Sheet1.Range('A11:H11').VerticalAlignment = 1;6 H! f- w( g" n7 T/ W
Sheet1.Range('A12:H12').HorizontalAlignment = 4;
8 _. n1 ]  _. u0 PSheet1.Range('A13:H13').VerticalAlignment = 1;
/ M1 w6 H7 B% ^! k" k, m- o5 ZSheet1.Range('A14:H14').HorizontalAlignment = 4;1 ^& C2 B7 X: o9 k' ~3 n+ D( H6 t
Sheet1.Range('D16:H16').HorizontalAlignment = 4;
% [1 A$ g8 Q8 l  |- h8 C7 R+ ]' [& f' }: }) m; ?; W4 {5 j3 _
% 写入单元格内容
% |5 l. X; B. X' e% jSheet1.Range('A1').Value = '试  卷  分  析';2 V8 g7 a' x5 z$ W. n$ q* F8 {; N
Sheet1.Range('A2').Value = '( 2009  —  2010   学年 第一学期)';  J# q0 W  N1 p# ^9 D# _7 |3 i3 s
Sheet1.Range('A4:H4').Value = {'课程名称','','课程号',...
) O) R( h& q% {! V& w" D" D' {, h    '','任课教师学院','','任课教师',''};' j# V% l3 c5 ]: C1 J: o
Sheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...
0 _" S; x1 J1 m+ @- F4 i    '','应考人数','','实考人数',''};: f8 g9 N2 s& E+ h4 r1 y
Sheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...
  {9 p. m& ^( v! s    '','选用试卷A/B','','考试时间',''};: Q7 ~8 J, V* Q; [: N0 n& q
Sheet1.Range('A7:H7').Value = {'考试方式','','平均分',...- L8 U9 G( H8 z' ^. d% j% I
    '','不及格人数','','及格率',''};! T, T" D; _# D  }9 y4 ]6 T* k
Sheet1.Range('A8').Value = '成绩分布';
* n% `) M/ |9 o- f" y  y7 p+ B: U, n5 q' QSheet1.Range('B8').Value = '90分以上       人占        %';
. p3 f3 K* E$ B$ LSheet1.Range('E8').Value = '80---89分        人占        %';
8 Y! V# {; X5 e+ O5 [Sheet1.Range('B9').Value = '70---79分      人占        %';
+ k6 n8 w; @, P, T) y( sSheet1.Range('E9').Value = '60---69分        人占        %';
2 M; `$ ?: G$ y, u! u: |; r6 s; cSheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...+ W6 A+ H& c% j* p. J0 P
    '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...+ V. F1 ?: Q+ S2 A/ m% `
    '存在的问题及改进措施等内容)'];
- C* j7 g! i2 y# ~- j: qSheet1.Range('A12').Value = '签字 :                      年     月     日';
& O, v0 i# N# Y/ v1 ^3 `; c6 o, ~Sheet1.Range('A13').Value = '教研室审阅意见:';3 a% V; [; X& Z6 l9 P# w
Sheet1.Range('A14').Value = '教研室主任(签字):             年    月    日';
0 g. }7 W6 ^* {& d7 FSheet1.Range('D16').Value = '主管院长签字:                  年    月    日';
/ {/ D5 a( N+ _# H5 c8 M6 W5 y
3 {9 [, n: D5 J/ ]: Z% 设置字号
! d" T, o/ I" h# f$ e, x5 a$ wSheet1.Range('A4:H12').Font.size = 10.5;    % 设置单元格A4至H12的字号为10.50 y1 x4 j' O( i- `7 q
Sheet1.Range('A1').Font.size = 16;          % 设置单元格A1的字号为16
% Z$ @* I% \" g& C# v. K9 _8 rSheet1.Range('A1').Font.bold = 2;           % 单元格A1的字体加粗
4 k- j4 Q" G8 c9 r8 ]" u2 }0 D8 i+ v
% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除
) h  x) k6 K: p; lShapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄
( G$ X8 ^) J, a$ Xif Shapes.Count ~= 0;; k& ]2 C9 Z: [# Y# m
    for i = 1 : Shapes.Count;" B! |" D! ?' p* w, z. t' x: j& @
        Shapes.Item(1).Delete;    % 删除第1个Shape对象) h% I9 n7 \  ?* L5 l- W+ K# `; T
    end;
& E; ~1 U) r! z9 E" J" @  ~end;1 W$ O# u5 w8 ]1 L3 }: S6 v

. h9 U& P) K! N% |7 e* r2 F; ^1 E. y( F% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性8 m  o: w1 r' b6 ~
zft = figure('units','normalized','position',..., O6 n4 m. Q  M1 z/ ]$ m4 F# k
[0.280469 0.553385 0.428906 0.251302],'visible','off');  % 新建图形窗口,设为不可见
" [/ q/ G7 {! E% nset(gca,'position',[0.1 0.2 0.85 0.75]);    % 设置坐标系的位置和大小
% r+ _( s: [# ]+ c8 y$ `data = normrnd(75,4,1000,1);    % 产生均值为75,标准差为4的正态分布随机数
0 |' x5 q3 o+ @, x, khist(data);    % 绘制正态分布随机数的频数直方图
2 v1 m" T* Z2 o6 _, jgrid on;       % 添加参考网格
) T5 g* u$ j# I# F- [; M/ P' Fxlabel('考试成绩');    % 为X轴加标签$ z8 I/ E4 |  X* t# O' t
ylabel('人数');       % 为Y轴加标签# @! V" \$ f1 `% A/ K3 O5 }: n
hgexport(zft, '-clipboard');    % 将直方图复制到剪贴板
( B4 c& X& \# J6 q2 y" O% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图3 ~' i! |: \" ?! \7 c
Sheet1.Range('A11').Select;
, e  U% Q1 E! G8 _8 W& XSheet1.Paste    % Sheet1.PasteSpecial;! J# E% M. d* \* f) T6 |+ r

7 W: D0 b0 G: E; Z8 @  Kdelete(zft);    % 删除图形句柄( Z" I' ^( G& V9 e
Workbook.Save   % 保存文档
0 s# [# l1 E5 O3 t# J( c

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-11 16:50 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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