潍坊快速网站排名/网页分析工具
由于项目需求,在MFC环境下操作将数据和图片写入word文档,之前没有接触过,网上查阅了很多资料,终于把任务完成。理解的不是很透彻,但是这些东西应该够用了,写篇博客记录一下,以便以后再用到。
(1)VS环境下创建一个MFC应用程序,然后在项目上单击右键,选择 类向导-----添加类----类型库中的MFC类。在弹出的对话框中选择文件,位置选择office安装目录下的MSWORD.OLB文件,然后从接口中选择需要的类,可以选择全部接口,然后生成全部类,点击完成。
(2)将生成的所有头文件中的导入MSWORD.OLB的代码注释掉。
//#import "C:\\Program Files\\Microsoft Office\\Office14\\MSWORD.OLB" no_namespace
//注意每个头文件中的此句话都要注释
(3)接下来就可以写操作Word文档的代码了。需要用到哪个类就引入哪个类的头文件。我这里引入了以下头文件:
#include "CApplication.h"
#include "CBookmark.h"
#include "CBookmarks.h"
#include "CCell.h"
#include "CCells.h"
#include "CColumn.h"
#include "CColumns.h"
#include "CDocument.h"
#include "CDocuments.h"
#include "CRange.h"
#include "CRow.h"
#include "CRows.h"
#include "CSelection.h"
#include "CTable.h"
#include "CTables.h"
#include "CnlineShape.h"
#include "CnlineShapes.h"
#include "CFont.h"
#include "CParagraphs.h"
#include "CBorder.h"
#include "CBorders.h"
#include "CParagraph.h"
(4)现在可以开始操作word文档了。操作word文档有两种方式,第一种是先制作好一个word模板,在模板中添加标签,然后通过标签将数据写入word。第二种就是直接使用代码动态创建word文档。第一种方式比较简单。
4.1 第一种方式,使用word模板
4.1.1 打开word,编辑好自己的模板,向需要添加数据的地方添加标签,然后保存为.dot文件。
4.1.2 接下来开始向书签处写入数据。
COleVariant covTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR),dot(_T("c:\\Template.dot"));CApplication wordApp;//创建word应用程序
if (!wordApp.CreateDispatch(_T("Word.Application")))
{AfxMessageBox(_T("请先安装Office软件!"));return;
}
wordApp.put_Visible(TRUE);//设置word可见,这样写入数据的过程我们就能直接看到
CDocuments docs = wordApp.get_Documents();//创建word文档集
CDocument docx = docs.Add(dot, covOptional, covOptional, covOptional);
CBookmarks bookmarks= docx.get_Bookmarks();//在标签处插入文字
CBookmark bookmark = bookmarks.Item(&_variant_t(_T("标题")));
range = bookmark.get_Range();
range.put_Text(_T("四川省沐川县及昭觉县典型乡镇1:5万土地质量地球化学调查"));//在标签处插入图片
bookmark = bookmarks.Item(&_variant_t(_T("图片")));
range = bookmark.get_Range();
CnlineShapes ishaps = range.get_InlineShapes();
CnlineShape ishap = ishaps.AddPicture(_T("C:\\out.JPG"), covFalse, covTrue, covOptional);//保存word文件
CString strSavePath = _T("C:");
strSavePath += _T("\\test.docx");
docx.SaveAs(COleVariant(strSavePath), covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);// 退出word应用
docx.Close(covFalse, covOptional, covOptional);
wordApp.Quit(covOptional, covOptional, covOptional);
range.ReleaseDispatch();
bookmarks.ReleaseDispatch();
wordApp.ReleaseDispatch();AfxMessageBox(_T("word生成成功!"));
4.2 第二种方式:用代码动态创建word文档
//1.开启word
CApplication word_app;if (!word_app.CreateDispatch(_T("Word.Application"))){AfxMessageBox(_T("本机没有安装word产品!"));return;}word_app.put_Visible(true);//设置word可见//2.新建文档COleVariant vTrue((short)TRUE), vFalse((short)FALSE), VOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);CDocuments docs;CDocument0 doc;docs = word_app.get_Documents();doc = docs.Add(new CComVariant(_T("")), new CComVariant(false), new CComVariant(0), new CComVariant());//3.开始向word写入数据CSelection sel = word_app.get_Selection();CParagraphs wordParagraphs = sel.get_ParagraphFormat();wordParagraphs.put_Alignment(1);//设置文字居中CFont font = sel.get_Font();font.put_Bold(1);font.put_Size(15);font.put_Name(_T("宋体"));//设置字体属性sel.TypeText(TEXT("四川省沐川县及昭觉县典型乡镇1:5万土地质量地球化学调查\n")); sel.TypeText(TEXT("野外工作航迹图(2019)"));CTables tables = doc.get_Tables();CTable table= tables.Add(sel.get_Range(),4, 2, new CComVariant(), new CComVariant());//创建4行2列的表格CBorders borders = table.get_Borders();borders.put_InsideLineStyle(1);borders.put_OutsideLineStyle(1);//设置表格边框,默认没有边框CCell cell= table.Cell(1,2);cell.Merge(table.Cell(2,2));cell.Merge(table.Cell(3, 2));CCell cell2 = table.Cell(4, 1);cell2.Merge(table.Cell(4,2));cell2.put_Height(400);//设置单元格的高wordParagraphs.put_Alignment(0);//设置文字居左font.put_Size(12);CCell cell3= table.Cell(1, 1);cell3.Select();sel.TypeText(_T("日期:2019-08-31"));sel.MoveDown(COleVariant((short)5), COleVariant(short(1)), COleVariant(short(0)));wordParagraphs.put_Alignment(0);font.put_Size(12);sel.TypeText(_T("编 号:GPS5313-20190831"));sel.MoveDown(COleVariant((short)5), COleVariant(short(1)), COleVariant(short(0)));wordParagraphs.put_Alignment(0);font.put_Size(12);sel.TypeText(_T("GPS坐标数据文件号:5313-01"));CCell cell4 = table.Cell(1,2);cell4.Select();cell4.put_VerticalAlignment(1);//设置单元格上下居中wordParagraphs.put_Alignment(1);//设置水平居中font.put_Size(12);sel.TypeText(_T("工作单位:中国地质科学院地球物理地球化学勘查研究所"));//插入图片sel.MoveDown(COleVariant((short)5), COleVariant(short(1)), COleVariant(short(0)));CnlineShapes ishapes = doc.get_InlineShapes();CnlineShape ishape = ishapes.AddPicture(_T("D:\\timg.jpg"), vFalse,vTrue, VOpt);
//4.保存并退出doc.SaveAs(COleVariant(_T("D:\\野外航迹图.doc")), VOpt, VOpt, VOpt, VOpt,VOpt, VOpt, VOpt, VOpt, VOpt, VOpt, VOpt, VOpt, VOpt, VOpt, VOpt);doc.Close(vFalse, VOpt,VOpt);word_app.Quit(VOpt, VOpt, VOpt);
结果图: