• 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

  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/Roarsun/p/2858058.html
Copyright © 2020-2023  润新知