用Matlab生成Word文档
[ 本帖最后由 牛小贱 于 2014-3-30 16:52 编辑 ]\n\n用Matlab编了一段程序,可以生成Word文档,文档中含有表格,代码如下:filespec = 'C:\Documents and Settings\Administrator\桌面\xiezh.doc';
try;
Word=actxGetRunningServer('Word.Application');
catch;
Word = actxserver('Word.Application');
end;
set(Word, 'Visible', 1);
documents = Word.Documents;
if exist(filespec,'file')
document = invoke(documents,'Open',filespec);
else
document = invoke(documents, 'Add');
document.SaveAs(filespec);
end
content = document.Content;
duplicate = content.Duplicate;
inlineshapes = content.InlineShapes;
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;
set(selection, 'Text','(20 —20 学年 第 学期)');
selection.Font.Size=12;
selection.MoveDown;
set(paragraphformat, 'Alignment','wdAlignParagraphCenter');
selection.TypeParagraph;
selection.TypeParagraph;
selection.Font.Size=10.5;
Tables=document.Tables.Add(selection.Range,12,9);
%设置边框
DTI=document.Tables.Item(1);
DTI.Borders.OutsideLineStyle='wdLineStyleSingle';
DTI.Borders.OutsideLineWidth='wdLineWidth150pt';
DTI.Borders.InsideLineStyle='wdLineStyleSingle';
DTI.Borders.InsideLineWidth='wdLineWidth150pt';
DTI.Rows.Alignment='wdAlignRowCenter';
DTI.Rows.Item(8).Borders.Item(1).LineStyle='wdLineStyleNone';
DTI.Rows.Item(8).Borders.Item(3).LineStyle='wdLineStyleNone';
DTI.Rows.Item(11).Borders.Item(1).LineStyle='wdLineStyleNone';
DTI.Rows.Item(11).Borders.Item(3).LineStyle='wdLineStyleNone';
column_width=;
row_height=;
for i=1:9
DTI.Columns.Item(i).Width =column_width(i);
end
for i=1:12
DTI.Rows.Item(i).Height =row_height(i);
end
for i=1:12
for j=1:9
DTI.Cell(i,j).VerticalAlignment='wdCellAlignVerticalCenter';
end
end
DTI.Cell(1, 4).Merge(DTI.Cell(1, 5));
DTI.Cell(2, 4).Merge(DTI.Cell(2, 5));
DTI.Cell(3, 4).Merge(DTI.Cell(3, 5));
DTI.Cell(4, 4).Merge(DTI.Cell(4, 5));
DTI.Cell(5, 2).Merge(DTI.Cell(5, 5));
DTI.Cell(5, 3).Merge(DTI.Cell(5, 6));
DTI.Cell(6, 2).Merge(DTI.Cell(6, 5));
DTI.Cell(6, 3).Merge(DTI.Cell(6, 6));
DTI.Cell(5, 1).Merge(DTI.Cell(6, 1));
DTI.Cell(7, 1).Merge(DTI.Cell(7, 9));
DTI.Cell(8, 1).Merge(DTI.Cell(8, 9));
DTI.Cell(9, 1).Merge(DTI.Cell(9, 3));
DTI.Cell(9, 2).Merge(DTI.Cell(9, 3));
DTI.Cell(9, 3).Merge(DTI.Cell(9, 4));
DTI.Cell(9, 4).Merge(DTI.Cell(9, 5));
DTI.Cell(10, 1).Merge(DTI.Cell(10, 9));
DTI.Cell(11, 5).Merge(DTI.Cell(11, 9));
DTI.Cell(12, 5).Merge(DTI.Cell(12, 9));
DTI.Cell(11, 1).Merge(DTI.Cell(12, 4));
end_of_doc = get(content,'end');
set(selection,'Start',end_of_doc);
selection.TypeParagraph;
set(selection, 'Text','主管院长签字: 年 月 日');
set(paragraphformat, 'Alignment','wdAlignParagraphRight');
DTI.Cell(1,1).Range.Text = '课程名称';
DTI.Cell(1,3).Range.Text = '课程号';
DTI.Cell(1,5).Range.Text = '任课教师学院';
DTI.Cell(1,7).Range.Text = '任课教师';
DTI.Cell(2,1).Range.Text = '授课班级';
DTI.Cell(2,3).Range.Text = '考试日期';
DTI.Cell(2,5).Range.Text = '应考人数';
DTI.Cell(2,7).Range.Text = '实考人数';
DTI.Cell(3,1).Range.Text = '出卷方式';
DTI.Cell(3,3).Range.Text = '阅卷方式';
DTI.Cell(3,5).Range.Text = '选用试卷A/B';
DTI.Cell(3,7).Range.Text = '考试时间';
DTI.Cell(4,1).Range.Text = '考试方式';
DTI.Cell(4,3).Range.Text = '平均分';
DTI.Cell(4,5).Range.Text = '不及格人数';
DTI.Cell(4,7).Range.Text = '及格率';
DTI.Cell(5,1).Range.Text = '成绩分布';
DTI.Cell(5,2).Range.Text = '90分以上 人占 %';
DTI.Cell(5,3).Range.Text = '80---89分 人占 %';
DTI.Cell(6,2).Range.Text = '70--79分 人占 %';
DTI.Cell(6,3).Range.Text = '60---69分 人占 %';
DTI.Cell(7,1).Range.Text = '试卷分析(含是否符合教学大纲、难度、知识覆盖面、班级分数分布分析、学生答题存在的共性问题与知识掌握情况、教学中存在的问题及改进措施等内容)';
DTI.Cell(7,1).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';
DTI.Cell(9,2).Range.Text = '签字 :';
DTI.Cell(9,4).Range.Text = '年 月 日';
DTI.Cell(10,1).Range.Text = '教研室审阅意见:';
DTI.Cell(10,1).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';
DTI.Cell(10,1).VerticalAlignment='wdCellAlignVerticalTop';
DTI.Cell(11,2).Range.Text = '教研室主任(签字): 年 月 日';
DTI.Cell(11,2).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';
DTI.Cell(8,1).Range.ParagraphFormat.Alignment='wdAlignParagraphLeft';
DTI.Cell(8,1).VerticalAlignment='wdCellAlignVerticalTop';
DTI.Cell(9,2).Borders.Item(2).LineStyle='wdLineStyleNone';
DTI.Cell(9,2).Borders.Item(4).LineStyle='wdLineStyleNone';
DTI.Cell(9,3).Borders.Item(4).LineStyle='wdLineStyleNone';
DTI.Cell(11,1).Borders.Item(4).LineStyle='wdLineStyleNone';生成的文档见附件
回复 楼主 xiezhh 的帖子
Excellent job! cool,非常实用的资料回复 楼主 xiezhh 的帖子
佩服佩服!没有做不到,只有想不到!
回复 楼主 xiezhh 的帖子
辛苦辛苦!!! 这帖之前就看过, 不过未曾细看, 早上设断点并边看help, 学习了下! 的确满佩服楼主的功力! 自叹不如!可能工程玩久了, 总喜欢实际些! 不知会不会太白目, 但实在想不透! 还是请教吧
个人怎觉得太复杂些且实用性好像也不高! 搅了半天只为了一张表单, 直接在Word处理不就可以吗?
个人不才, 一定是忽略些东西, 知道的说说嘛!
回复 6楼 ChaChing 的帖子
我想对于单个这样的问题进行这样的处理确实不是很方便,但是如果需要很多类似的重复工作就比较有意义吧。比如有100个班的成绩需要统计(就是对每个班的成绩做统计和运算,存成100个结果文件)的话,楼主的方法还是比较有借鉴意义的。
在工程中,这种方法可以用来将计算的过程和结果生成计算书——这个应该是很有意义的。
个人的一点儿浅见,欢迎大家讨论。
回复 7楼 sogooda 的帖子
没错! 重复工作就比较有意义! 做这个的动机是因为我在做图像处理的时候,总是时常计算很多数据,我不想每次都把结果手动整理成表格,就在程序中加了生成word和Excel文档的功能。后来看到很多同事做试卷分析时比较痛苦,虽然很简单,可毕竟不是每一个人都会统计和Excel,就编了上面的程序,甚至还做了个生成试卷分析的界面,内置了3个模板,用来生成word和Excel版的试卷分析(该程序发在matlab中文论坛)。几个同事用过后反映还不错,不过就是生成的文档有点雷同了,并且让神圣的工作流于形式,真是罪过罪过!不过若能给别人一点启发的话,我心里就多了一丝安慰了。 怎么不能实现啊,我下了啊。回复 10楼 nkdtxf 的帖子
出错提示?请教高手:用Matlab生成含有表格的word文档,并在表格中分别填入信息跟照片
能在Word中自动生成表格,太好了。请问高手,能在生成的表格中显示照片吗。我的意思是说自动生成一个表格,前面面的表格输出人的名字,后面的表格能显示(或者贴上)对应的照片吗,照片是JPg格式的或BMP格式的。请指点。请教高手:用Matlab生成含有表格的word文档,并在表格中分别填入信息跟照片
想生成一个5行2列的WORD表格,表格的第一列填人名,第二列显示对应的照片,照片的格式是JPG或者BMP格式的。
能做吗?
[ 本帖最后由 ChaChing 于 2009-11-7 21:02 编辑 ]
回复 12楼 cccccccccsss0 的帖子
看看这个, 不过个人不熟, 楼主才是高手!http://forum.vibunion.com/forum/viewthread.php?tid=75703&highlight= 为啥我执行了上述程序只生成了个空白word文档啊?请楼主赐教。我是菜鸟! 谢谢,真是高人。