zoukankan      html  css  js  c++  java
  • VC 6.0动态生成Word表格实例

     (1)首先,向你的项目中添加word 2003类型库:方法是在MFC ClassWizard中点击按钮Add Class,选择From a type library,在弹出的浏览对话框中,浏览找到office 2003安装路径下的msword.olb文件,例如:"C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB",然后选择以下类,这些类都是后面实现生成word表格要用到的:

    _Application,Documents,_Document,Range, Paragraph,Paragraphs,Cell,Cells,Table,Tables,Border,Borders ,_Font ,PageSetup

    (2)在使用到这些类型的类的头文件或者cpp文件的开头,包含以下头文件:#include "msword.h"

    (3) 创建如下代码

    //1.定义对象

    _Application     oWordApp; 

    Documents        oDocs;

    _Document        oDoc;

    Range            range;

    Paragraph        paragraph;

    Paragraphs       paragraphs;

    Cell             cell;

    Cells            cells;

    Table            table;

    Tables           tables;

    Border           border;

    Borders          borders;

    _Font            font;

    PageSetup        pagesetup;

     

    //2.创建和连接word对象,初始化连接,判断当前系统是否有word进程,然后然后创建或连接对象

    LPDISPATCH   pDisp; 

    LPUNKNOWN    pUnk; 

    CLSID        clsid; 

    CoInitialize(NULL); 

    CLSIDFromProgID(L"Word.Application",&clsid); 

    if(GetActiveObject(clsid,NULL,&pUnk)==S_OK) 

    pUnk-> QueryInterface(IID_IDispatch,(void **)&pDisp); 

    oWordApp.AttachDispatch(pDisp); 

    }  

    else 

    if(!oWordApp.CreateDispatch("Word.Application"))

    {

    AfxMessageBox("创建Word服务失败!"); 

    }

    }

     

     

    //初始化文档,生成WORD表格

    oDocs.ReleaseDispatch();

    oWordApp.m_bAutoRelease=true;

    BeginWaitCursor();

    oDocs=oWordApp.GetDocuments();

    COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);

    oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);//加新文档

    pagesetup=oDoc.GetPageSetup();

    pagesetup.SetOrientation(1);//横向

    paragraphs=oDoc.GetParagraphs(); //生成第一个表

    paragraph=paragraphs.GetLast();//以当前段落最后一行为表起始位置

    range=paragraph.GetRange();

    //添加制作新表格

    tables=oDoc.GetTables();

     

    int nBhCount=3;

    table=tables.Add(range,5+nBhCount,6,vOpt,vOpt);

    borders=table.GetBorders();

    borders.SetEnable(1);//显示表框

    range=table.GetRange();

    cells=range.GetCells();

    cells.SetVerticalAlignment(1);//文字居中

     

    #define DOC_TABLE1_WIDTH 60

     

    cells.SetWidth(DOC_TABLE1_WIDTH); 

    cell=table.Cell(1,1);//合并第一行的三列

    cell.Merge(table.Cell(1,6));

    range=cell.GetRange();

    range.SetBold(1);

    range.SetText("                                         病害统计信息");//居中

    cell=table.Cell(2,1);

    cell.Merge(table.Cell(2,2));

    range=cell.GetRange();

    range.SetBold(1);

    range.SetText("组成材料");

    cell=table.Cell(2,2);

    cell.Merge(table.Cell(2,4));

    range=cell.GetRange();

    range.SetBold(1);

    range.SetText("病害种类");

    cell=table.Cell(2,3);

    range=cell.GetRange();

    range.SetBold(1);

    range.SetText("病害总数");

    for(int iBh=0;iBh<nBhCount;iBh++)

    {

    cell=table.Cell(2+iBh+1,1);

    cell.Merge(table.Cell(2+iBh+1,2));

    range=cell.GetRange();

    range.SetBold(0);

    range.SetText("hello1");

    cell=table.Cell(2+iBh+1,2);

    cell.Merge(table.Cell(2+iBh+1,4));

    range=cell.GetRange();

    range.SetBold(0);

    range.SetText("hello2");

    cell=table.Cell(2+iBh+1,3);

    range=cell.GetRange();

    range.SetBold(0);

    range.SetText("hello3");    

    }

    cell=table.Cell(3+nBhCount,1);//合并7列

    cell.Merge(table.Cell(3+nBhCount,6));

    range=cell.GetRange();

    range.SetBold(1);

    range.SetText("                                       等级统计信息");

    for(int iCol=1;iCol<=6;iCol++)

    {

    cell=table.Cell(3+nBhCount+1,iCol);

    range=cell.GetRange();

    range.SetBold(1);

    range.SetText("hello4");

    cell=table.Cell(3+nBhCount+2,iCol);

    range=cell.GetRange();

    range.SetBold(0);

    range.SetText("hello5"); 

    }

     

    //保存,清理

    CString   strSave="D:\\test.doc";

        COleVariant vTrue((short)TRUE), vFalse((short)FALSE);

    _Document oActiveDoc; 

    oActiveDoc = oWordApp.GetActiveDocument(); 

    oActiveDoc.SaveAs(COleVariant(strSave),COleVariant((short)0), vFalse,

    COleVariant(""), vTrue,COleVariant(""),vFalse, 

    vFalse, vFalse, vFalse, vFalse,

    vOpt,vOpt,vOpt,vOpt,vOpt); 

    oWordApp.SetVisible(true);

    oDocs.ReleaseDispatch();    //断开关联;

    oWordApp.ReleaseDispatch(); //退出WORD 

    EndWaitCursor();

    (5)生成表格如下:

                                             病害统计信息

    组成材料

    病害种类

    病害总数

    hello1

    hello2

    hello3

    hello1

    hello2

    hello3

    hello1

    hello2

    hello3

                                           等级统计信息

    hello4

    hello4

    hello4

    hello4

    hello4

    hello4

    hello5

    hello5

    hello5

    hello5

    hello5

    hello5

  • 相关阅读:
    javascript 对象属性的添加,删除,json对象和字符串转换方法等
    利用jquery.form.js实现将form提交转为ajax方式提交的方法(带上传的表单提交)
    js封装的一行半显示省略号。(字数自由控制)
    jq和js中click 事件的几种方式总结和click事件的累加问题解决办法
    jquery $(document).ready() 与js原生的window.onload的区别总结
    jquery中attr和prop的区别
    织梦文档按权重排序
    织梦channelartlist标签内使用currentstyle
    dedecms无法下载远程jpeg图片 织梦不能提取文章内容中的jpeg图片生成缩略图
    织梦dedecms去除友情链接中的li和span
  • 原文地址:https://www.cnblogs.com/Roarsun/p/2858058.html
Copyright © 2011-2022 走看看