为了提高学习效率,我计划将matlab脚本生成的图形和文字写入到word中,这样就不用我一个一个的手动粘贴了。然而,从csdn上搜索了很多资料,不能完全解决我的问题。很多文章都是类似的内容。有很多代码,明明实际跑起来是有问题的,我不懂为什么还要贴上,当然也可能是我太贪心,想拿来主义,反正现在的东西不是直接拿来就能用。正好,我也开始记录自己的鼓捣过程,方便自己以后学习参考。有些事过得时间长了就忘了怎么搞了。
参考博客:
Selection.Start = Content.end;
这句话不能随便乱插,原文章中多次使用这行代码,每次运行都和我自己想要的结果不一样。我就很奇怪,经过几个小时的摸索,终于发现,这个行代码的意思是:将选择的起始点设置在标题后。这就是问题的原因之一。
仔细断点调试代码发现每次选中的文字、图片都有问题。从网上也没找到什么好的方法。matlab官方文档也没有找到合适的帮助文件。后来还是自己突然想了一个方法解决了这个问题。下边贴代码,原理搞明白,套用就方便多了。
PS:很多代码都是上篇博客的内容,我只更改了一些运行不畅的内容。
clc
clear
close all
try
Word = actxGetRunningServer('Word.Application');
catch
Word = actxserver('Word.Application');
end
Word.Visible = 1; % 使word为可见;或set(Word, 'Visible', 1);
%利用MATLAB生成Word文档
filespec_user = [pwd '\飞行数据分析.doc'];% 设定测试Word文件名和路径
if exist(filespec_user,'file')
Document = Word.Documents.Open(filespec_user);
else
Document = Word.Documents.Add;
Document.SaveAs2(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;
headline = '飞行数据分析报告';
Content.Start = 0; % 起始点为0,即表示每次写入覆盖之前资料
Content.Text = headline;
Content.Font.Size = 20; % 字体大小
Content.Font.Bold = 1; % 字体加粗
Content.Paragraphs.Alignment = 'wdAlignParagraphCenter';
% 居左 wdAlignParagraphLeft
% 居中 wdAlignParagraphCenter
% 居右 wdAlignParagraphRight
Selection.start=Content.end;
Selection.TypeParagraph; % 插入一个新的空段落
Selection.Font.Size = 10.5; % 新的空段落字号
Selection.Text = '第三行';
Selection.MoveDown; % 此时这一行还在选中状态,加此命令令选中状态退出
Selection.TypeParagraph; % 换行,插入一个新的空段落
Selection.Font.Size = 10.5; % 新的空段落字号
Selection.Text = '第四行';
Selection.Start =Selection.start+3; %因为插入了3个字符,所以加3好了,光标就在后面,且不会有选中状态
Selection.TypeParagraph; % 换行,插入一个新的空段落
Selection.Font.Size = 10.5; % 新的空段落字号
Selection.Text = '第五行';
Selection.MoveDown; %结束本行选中状态
Selection.TypeParagraph; % 换行,插入一个新的空段落
currentdate = datestr(now, 0); % 获取当前时间
Selection.Text = currentdate; % 当前时间作为输出
Selection.Font.Size = 12; % 字号
Selection.Font.Bold = 0; % 不加粗
Selection.MoveDown; %将所选内容向下移动,并返回移动距离的单位数
f1=figure; % 记录其句柄
x=0:0.02:10;
y=cos(x);
plot(x,y,'r')
ylabel('cos');title('cos(rad)');
set(gcf,'Position',[100 100 260 220]); %这一句话将图片变小点,避免插入word会很大,显示不全
Selection.TypeParagraph; % 换行,插入一个新的空段落
hgexport(f1, '-clipboard'); %figure的句柄为“f1”
% Selection=Word.Selection;
Selection.Range.Paste; %在当前光标的位置插入图片
Selection.Start =Selection.start+1; %将光标移到后边,插图图片后,光标会在图片前面,所以移动下光标
Selection.MoveDown; %将所选内容向下移动,并返回移动距离的单位数
Selection.TypeParagraph; % 换行,插入一个新的空段落
Selection.Text = '图1 cosx的曲线';
Paragraphformat.Alignment = 'wdAlignParagraphCenter'; %居中显示
Selection.MoveDown;
Selection.TypeParagraph;% 插入一个新的空段落