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

利用MATLAB生成Excel文档

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
利用MATLAB生成Excel文档* O# ]" {4 R: W+ o1 [# p! M8 m
% k9 K: c6 ~( r+ ?( N
! I$ x+ w' R  H/ t& b
unction ceshi_Excel
! v% c& l, Q# @%利用MATLAB生成Excel文档
! Y8 y$ b3 {' t%   ceshi_Excel: r  N+ V8 A& w1 V
%# i7 \$ W: I) g( M0 c, ?3 V9 W! e
%   Copyright 2009 - 2010 xiezhh.* q# ]  o% p* p8 y2 u: W
%   $Revision: 1.0.0.0 $  $Date: 2009/12/14 20:40:00 $
  t$ A) i) y' d7 K2 B: B2 u! Y3 Q" x. w$ X4 S, k: w
% 设定测试Excel文件名和路径
, ^. w; A! d* d# Ffilespec_user = [pwd '\测试.xls'];  S* a5 r" U/ Q$ w

- X% O  J) y9 A/ B* Z8 R% 判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,否则就打开Excel
/ i$ y/ T" `  a8 E0 s5 Y8 d% Jtry
' o- i0 z! c  _    % 若Excel服务器已经打开,返回其句柄Excel! i  C4 t$ y9 T3 {4 y/ v  Q% U: t
    Excel = actxGetRunningServer('Excel.Application');7 J, z5 p2 E! W5 f# d1 N
catch
, G  z6 K# u0 ?5 t    % 创建一个Microsoft Excel服务器,返回句柄Excel
4 K( Q- u" T2 U* W0 y* _8 d, W6 g    Excel = actxserver('Excel.Application');5 d% V* A5 X" h8 a/ I6 V
end;" y7 a; R  t1 D7 B7 l9 K

# E9 h% j( @" o' _! g% 设置Excel服务器为可见状态
/ P( `3 }. r" T9 JExcel.Visible = 1;    % set(Excel, 'Visible', 1);) N  S$ b  u& h& y1 a) Y' R7 P% j

" {/ i9 }. v9 w4 L% X% 若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel$ J& y# z; @$ D9 O6 f
if exist(filespec_user,'file');9 }5 ]5 V4 V) Q- f- G$ ~
    Workbook = Excel.Workbooks.Open(filespec_user);' S, ^, B- o5 `
    % Workbook = invoke(Excel.Workbooks,'Open',filespec_user);" D) \6 G. C" H2 D0 @) k
else+ }, r' N# G% F
    Workbook = Excel.Workbooks.Add;
" q$ o8 d& e( @# U5 z% H    % Workbook = invoke(Excel.Workbooks, 'Add');% C1 @( ^+ Y/ `0 j8 q
    Workbook.SaveAs(filespec_user);
+ J: T4 r  C* d) L& d% dend
: l- I% f% {. Q1 z8 \$ \6 J8 D& I* _9 Y
% 返回当前工作表句柄, l1 U! S9 p' n* ~+ e# D- O
Sheets = Excel.ActiveWorkbook.Sheets;    % Sheets = Workbook.Sheets;. W, m/ c5 p0 E& R" I4 i
Sheet1 = Sheets.Item(1);    % 返回第1个表格句柄( [, e- p* o/ z2 \
Sheet1.Activate;    % 激活第1个表格
' C9 G3 t# D, _# W: ^4 P! H
6 K8 s8 G, D( Z+ B- Z/ f4 u- K% 页面设置' e0 q. k8 f% b6 _4 t& ~% W
Sheet1.PageSetup.TopMargin = 60;       % 上边距60磅) y6 y9 S5 K9 G
Sheet1.PageSetup.BottomMargin = 45;    % 下边距45磅
. Y1 Q  ~" Y; {) L+ a9 u1 ISheet1.PageSetup.LeftMargin = 45;      % 左边距45磅$ a+ T7 A$ b: Q9 K  c$ @
Sheet1.PageSetup.RightMargin = 45;     % 右边距45磅3 i; R8 H1 Z) }# s+ V
9 ?% q: M% K; F: R$ A
% 设置行高和列宽
& v: k5 f* ~6 h; U" C' w% 定义行高向量RowHeight; Y5 z5 h" h' C' S  C( ]
RowHeight = [26,22,15,29,37,29,29,25,25,36,280,31,40,29,15,24]';* }% U0 U7 w5 `) U, P$ m) u
% 设置Range对象(从A1到A16)的行高
0 l9 T' `. U. ?$ KSheet1.Range('A1:A16').RowHeight = RowHeight;0 Y# N1 g! r, u" W! K1 M; Q3 z
% 设置Range对象(从A1到H1)的列宽1 j# k% c. C0 ~+ t5 t
Sheet1.Range('A1:H1').ColumnWidth = [9,15,9,9,9,9,9,9];' ~5 n% F4 x* x+ c$ S- t" e% @
# Z  s2 `8 Z  l: L0 n4 T- Q: w
% 合并单元格' C  S( e  R  I' C3 T
Sheet1.Range('A1:H1').MergeCells = 1;* n/ j: ]2 K8 V- X% v
Sheet1.Range('A2:H2').MergeCells = 1;! _' H" Z# [$ W$ B1 H6 t- Z
Sheet1.Range('A8:A9').MergeCells = 1;
6 t) w3 `: I; a- n. ]7 {Sheet1.Range('B8:H8').MergeCells = 1;3 w' G# P0 Z, A
Sheet1.Range('E8:H8').MergeCells = 1;3 a. x8 S; H# p& u, }( \
Sheet1.Range('B9:H9').MergeCells = 1;
2 t8 e7 ]: S& z" l$ D0 e4 y) CSheet1.Range('E9:H9').MergeCells = 1;
& f$ a2 p: ]9 d7 i3 }$ E: ~/ k! L4 xSheet1.Range('A10:H10').MergeCells = 1;& O6 p+ S8 \4 F; m0 t' `/ @
Sheet1.Range('A11:H11').MergeCells = 1;+ u2 u7 m: a( P/ d
Sheet1.Range('A12:H12').MergeCells = 1;4 H$ G  `( P3 o$ I* f0 ~
Sheet1.Range('A13:H13').MergeCells = 1;+ w8 R$ o3 j8 ]" K+ v4 |# U. |) f
Sheet1.Range('A14:H14').MergeCells = 1;* s$ h0 G+ R' c' E9 `& Z
Sheet1.Range('D16:H16').MergeCells = 1;
, i8 X; E) Q& ]( P5 P- t4 i) ?, W+ M- J! w% ^. }
% 设置单元格的边框
, o' o0 l+ X/ B  w4 D3 ESheet1.Range('A4:H14').Borders.Weight = 3;
" _, e% ]9 V# z& N' qSheet1.Range('A10:H12').Borders.Item(3).Linestyle = 0;( ]9 |! I6 W6 Z6 P
Sheet1.Range('A10:H12').Borders.Item(4).Linestyle = 0;
* r. F% ]6 ]9 A4 s7 v: _: q9 kSheet1.Range('A13:H13').Borders.Item(4).Linestyle = 0;5 \5 d: h9 Z$ Q& s, a' g
Sheet1.Range('A14:H14').Borders.Item(3).Linestyle = 0;
% V$ W7 b) c$ j6 @6 b8 a; H  a! b2 [5 l" R8 |
% 设置单元格对齐方式( r3 C: j. I+ l, @, V
Sheet1.Range('A1:H9').HorizontalAlignment = 3;
4 U$ Z, p/ s9 J& mSheet1.Range('A4:A9').HorizontalAlignment = 6;
& G7 r! b5 f. e! {* I7 Y7 }: ]Sheet1.Range('C4:C7').HorizontalAlignment = 6;
9 c- Y. {" ~5 l- ~) H) rSheet1.Range('E4:E7').HorizontalAlignment = 6;& N6 F5 H$ F( S: ^( Z. r8 W4 R5 H
Sheet1.Range('G4:G7').HorizontalAlignment = 6;  U1 l0 _% B5 [, d6 i. i
Sheet1.Range('A10:H10').HorizontalAlignment = 6;$ l/ ^) c$ |1 @4 U" C
Sheet1.Range('A11:H11').HorizontalAlignment = 6;    % -4130
; z# n4 L6 N' x. Q& GSheet1.Range('A11:H11').VerticalAlignment = 1;  ~) h4 L( L$ z; F, H, u- u
Sheet1.Range('A12:H12').HorizontalAlignment = 4;
5 W" N. g: f  M+ L+ B- m: D1 lSheet1.Range('A13:H13').VerticalAlignment = 1;4 h' g0 V5 L+ |. U3 U8 q
Sheet1.Range('A14:H14').HorizontalAlignment = 4;
0 I/ p% Y7 O5 o  z( zSheet1.Range('D16:H16').HorizontalAlignment = 4;; y. e( A+ k' Y' ~' o5 i% {8 h7 o  p

" {0 u4 m* {( `' K- l/ r% 写入单元格内容2 ^- f6 B+ E6 U1 o. R; Q6 y
Sheet1.Range('A1').Value = '试  卷  分  析';6 b0 p; W# q& e0 @. E; @
Sheet1.Range('A2').Value = '( 2009  —  2010   学年 第一学期)';
9 F; m  p! |: x' {  CSheet1.Range('A4:H4').Value = {'课程名称','','课程号',...' E  M, k- C, R- D/ M
    '','任课教师学院','','任课教师',''};
4 a# C/ `; s* H% J6 K1 V, ^Sheet1.Range('A5:H5').Value = {'授课班级','','考试日期',...) u+ @3 U6 {! Q+ ^
    '','应考人数','','实考人数',''};
+ ~# C; Q% d. l" \/ sSheet1.Range('A6:H6').Value = {'出卷方式','','阅卷方式',...
. K5 b' I; a+ U$ b9 S    '','选用试卷A/B','','考试时间',''};
1 O6 i9 M% N$ s2 C0 T% T) k4 u+ bSheet1.Range('A7:H7').Value = {'考试方式','','平均分',...
$ Q' o# x( K7 L  w6 R/ K  S    '','不及格人数','','及格率',''};/ N4 M1 S) K& b- Q/ S
Sheet1.Range('A8').Value = '成绩分布';& @. e$ g5 I9 C2 f+ `7 M
Sheet1.Range('B8').Value = '90分以上       人占        %';
' n$ R  k( o. I6 S; b9 p( |, pSheet1.Range('E8').Value = '80---89分        人占        %';
& a  ^" S! b% Q, k) c- `Sheet1.Range('B9').Value = '70---79分      人占        %';: s& Q+ n* @  S( ^9 O& E
Sheet1.Range('E9').Value = '60---69分        人占        %';
) H# V2 J3 g- b8 j& d/ e2 a6 C! a0 vSheet1.Range('A10').Value = ['试卷分析(含是否符合教学大纲、难度、知识覆'...
9 C0 X$ r) ?% l9 ~  Y& E7 Z8 e* G    '盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中'...
5 j4 |$ V/ r  E, r! \; f    '存在的问题及改进措施等内容)'];
9 d. Y' ^( _5 ZSheet1.Range('A12').Value = '签字 :                      年     月     日';' o) W1 U' n3 K
Sheet1.Range('A13').Value = '教研室审阅意见:';5 S5 N! J: |1 ?0 T
Sheet1.Range('A14').Value = '教研室主任(签字):             年    月    日';2 r  b  v+ P; ^! ^, @2 N
Sheet1.Range('D16').Value = '主管院长签字:                  年    月    日';. K. Z3 O! n) J- x/ X0 w

$ u) F% _8 p, e4 l: o5 Z% 设置字号
; I# H  T6 b  j1 @  x$ cSheet1.Range('A4:H12').Font.size = 10.5;    % 设置单元格A4至H12的字号为10.59 Z" o" p! e, E- j2 J; S
Sheet1.Range('A1').Font.size = 16;          % 设置单元格A1的字号为16
% {! Q: z5 L$ E: _- h! }/ G4 OSheet1.Range('A1').Font.bold = 2;           % 单元格A1的字体加粗
1 a" K4 w6 s2 k4 y. e+ Q% p; ^) Y) H* k8 c
% 插入图片,如果当前工作表中有图形存在,通过循环将图形全部删除
% \6 {, `4 \9 ]: P+ g+ FShapes = Sheet1.Shapes;    % 返回第1个工作表的Shapes接口的句柄% n$ E* T$ B- ]: b0 Y
if Shapes.Count ~= 0;$ j0 n5 o( v- k1 y) E5 [3 x
    for i = 1 : Shapes.Count;) E9 c% P. @- C  R( a
        Shapes.Item(1).Delete;    % 删除第1个Shape对象# K4 J' Q" G, L2 U' s" a
    end;2 h/ [: x. T  V" X5 p3 W1 C, x
end;
" Y: A: {" e) j- ?+ t6 h& \
$ d% Q# s% D1 R/ N, u) q$ c% 产生均值为75,标准差为4的正态分布随机数,画直方图,并设置图形属性
5 F8 c( r' R  D) Lzft = figure('units','normalized','position',...8 l! ^( B' n3 z& Y& Q9 [
[0.280469 0.553385 0.428906 0.251302],'visible','off');  % 新建图形窗口,设为不可见
" D$ _/ ~: K$ u7 oset(gca,'position',[0.1 0.2 0.85 0.75]);    % 设置坐标系的位置和大小# p" S; S9 e! e6 K  B3 {
data = normrnd(75,4,1000,1);    % 产生均值为75,标准差为4的正态分布随机数
  ?& G9 d( {! `- f4 ?4 \hist(data);    % 绘制正态分布随机数的频数直方图
' A$ g' g6 n) X% e' O! igrid on;       % 添加参考网格* ~+ b# v6 R  H3 G1 ~3 p4 Q: a
xlabel('考试成绩');    % 为X轴加标签
: L! u, [2 i, G7 G/ h  fylabel('人数');       % 为Y轴加标签
( ?4 E& Q( K! b; `7 A! h+ B: ~hgexport(zft, '-clipboard');    % 将直方图复制到剪贴板% R; t; H- v5 D
% 选中工作表Sheet1的A11单元格,插入由MATLAB命令作出的直方图0 A( d8 X# T, h9 @* Z( f9 W
Sheet1.Range('A11').Select;
; |/ y" f% {5 w( _Sheet1.Paste    % Sheet1.PasteSpecial;
" Y; V+ R7 ^8 a1 K7 ?" H; `- `6 K  \& j; T+ ?% K0 d+ m
delete(zft);    % 删除图形句柄
8 ?/ A4 j# ]/ R* H8 H, n7 _4 IWorkbook.Save   % 保存文档: w# ?4 z0 }! j" ]

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-2 05:50 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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