声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7717|回复: 13

[综合讨论] 用matlab生成带有图片的Excel和Word文档

[复制链接]
发表于 2009-1-14 21:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我在几个论坛都看有些版友遇到这样的问题:如何将图片自动导入Excel或Word文件中,换句话说,就是怎样用matlab生成带有图片的Excel和Word文档,对此,我分别写了下面两个小程序,并在matlab2008a中经过了测试。

1. 用matlab生成带有图片的Excel文档

function ceshi_Excel
%设定测试Excel文件名和路径
filespec_user=[pwd '\测试.xls'];
%判断Excel是否已经打开,若已打开,就在打开的Excel中进行操作,
%否则就打开Excel
try
    Excel=actxGetRunningServer('Excel.Application');
catch
    Excel = actxserver('Excel.Application');
end;
%设置Excel属性为可见
set(Excel, 'Visible', 1);
%返回Excel工作簿句柄
Workbooks = Excel.Workbooks;
%若测试文件存在,打开该测试文件,否则,新建一个工作簿,并保存,文件名为测试.Excel
if exist(filespec_user,'file');
    Workbook = invoke(Workbooks,'Open',filespec_user);
else
    Workbook = invoke(Workbooks, 'Add');
    Workbook.SaveAs(filespec_user);
end
%返回工作表句柄
Sheets = Excel.ActiveWorkBook.Sheets;
%返回第一个表格句柄
sheet1 = get(Sheets, 'Item', 1);
%激活第一个表格
invoke(sheet1, 'Activate');
%如果当前工作表中有图形存在,通过循环将图形全部删除
Shapes=Excel.ActiveSheet.Shapes;
if Shapes.Count~=0;
    for i=1:Shapes.Count;
        Shapes.Item(1).Delete;
    end;
end;

%随机产生标准正态分布随机数,画直方图,并设置图形属性
zft=figure('units','normalized','position',...
[0.280469 0.553385 0.428906 0.251302],'visible','off');
set(gca,'position',[0.1 0.2 0.85 0.75]);   
data=normrnd(0,1,1000,1);
hist(data);
grid on;
xlabel('考试成绩');
ylabel('人数');
%将图形复制到粘贴板
hgexport(zft, '-clipboard');
%将图形粘贴到当前表格的A5:B5栏里
Excel.ActiveSheet.Range('A5:B5').Select;                                
Excel.ActiveSheet.Paste;
%删除图形句柄
delete(zft);   

2. 用matlab生成带有图片的Word文档

function ceshi_Word
%设定测试Word文件名和路径
filespec_user=[pwd '\测试.doc'];
%判断Word是否已经打开,若已打开,就在打开的Word中进行操作,
%否则就打开Word
try
    Word = actxGetRunningServer('Word.Application');
catch
    Word = actxserver('Word.Application');
end;
%设置Word属性为可见
set(Word, 'Visible', 1);
%返回Word文件句柄
documents = Word.Documents;
%若测试文件存在,打开该测试文件,否则,新建一个文件,并保存,文件名为测试.doc
if exist(filespec_user,'file');
    document = invoke(documents,'Open',filespec_user);
else
    document = invoke(documents, 'Add');
    document.SaveAs(filespec_user);
end

content = document.Content;
selection = Word.Selection;
paragraphformat = selection.ParagraphFormat;
%页面设置
document.PageSetup.TopMargin = 60;
document.PageSetup.BottomMargin = 45;
document.PageSetup.LeftMargin = 45;
document.PageSetup.RightMargin = 45;
%设定内容起始位置和标题
set(content, 'Start',0);
title='测  试  文  件';
set(content, 'Text',title);
set(paragraphformat, 'Alignment','wdAlignParagraphCenter');
%设定标题字体格式
rr=document.Range(0,10);
rr.Font.Size=16;
rr.Font.Bold=4;
%设定下面内容的起始位置
end_of_doc = get(content,'end');
set(selection,'Start',end_of_doc);
%另起一段
selection.TypeParagraph;
%如果当前工作文档中有图形存在,通过循环将图形全部删除
shape=document.Shapes;
shape_count=shape.Count;
if shape_count~=0;
    for i=1:shape_count;
        shape.Item(1).Delete;
    end;
end;

%随机产生标准正态分布随机数,画直方图,并设置图形属性
zft=figure('units','normalized','position',...
[0.280469 0.553385 0.428906 0.251302],'visible','off');
set(gca,'position',[0.1 0.2 0.85 0.75]);   
data=normrnd(0,1,1000,1);
hist(data);
grid on;
xlabel('考试成绩');
ylabel('人数');
%将图形复制到粘贴板
hgexport(zft, '-clipboard');
%将图形粘贴到当前文档里,并设置图形属性为浮于文字上方
selection.Range.PasteSpecial;
shape.Item(1).WrapFormat.Type=3;
shape.Item(1).ZOrder('msoBringInFrontOfText');   
%删除图形句柄
delete(zft);

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2009-1-14 23:33 | 显示全部楼层

回复 楼主 xiezhh 的帖子

发表于 2009-4-25 11:43 | 显示全部楼层
这帖也是早上才设断点并边看help, 学习了下! 的确满佩服楼主的功力! 自叹不如!
可能工程玩久了, 总喜欢实际些! 若不是有许多图需要复制至Excel/Word, 使用Ctr-C及Ctr-V好像比较直接些!
发表于 2009-9-2 14:35 | 显示全部楼层

非常感谢楼主的程序

这样的帖子一定要回复,非常感谢楼主的程序。谢谢!:@)
发表于 2009-9-30 19:00 | 显示全部楼层
赞!!!!
发表于 2009-10-15 18:51 | 显示全部楼层
这个以前看过
发表于 2009-10-22 10:37 | 显示全部楼层
太牛了!!
发表于 2009-10-22 15:55 | 显示全部楼层
这种方法确实有新意。我也试试
发表于 2010-4-5 16:58 | 显示全部楼层
牛人越来越多了
发表于 2010-9-18 13:06 | 显示全部楼层
你好啊 老师 !我用你的程序用build for ex编译成bas之后。直接在excel里面调用这个图片。发现不成功。能不能给点意见。 在matlab里面运行成功。但是编译后 不行 好像陷入了死循环那样。动不了
发表于 2010-9-20 00:18 | 显示全部楼层
不错不错,多谢多谢
发表于 2011-4-28 10:15 | 显示全部楼层
程序写的很好,学习了,感谢谢老师!
发表于 2013-12-8 21:05 | 显示全部楼层
无所不能的matlab啊
发表于 2013-12-9 23:18 | 显示全部楼层
厉害啊,mark
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-24 01:31 , Processed in 0.082930 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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