zoukankan      html  css  js  c++  java
  • C++操作Word学习笔记(一)

    【当前博文转载自:http://www.cppblog.com/codeart/archive/2010/08/31/125430.aspx

    c++操作word接口

    注意事项:1多用Range,少用Selection,因为Word中,Selection对象只有一个。
    【1】开启word

    C++操作Word学习笔记(一)_ApplicationPtr word_app;
    C++操作Word学习笔记(一)HRESULT hr 
    = word_app.CreateInstance("Word.Application", NULL); 

    【2】新建一个文档

    C++操作Word学习笔记(一)COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    C++操作Word学习笔记(一)DocumentsPtr docs;
    C++操作Word学习笔记(一)_DocumentPtr oDoc;
    C++操作Word学习笔记(一)docs 
    = word_app->GetDocuments();
    C++操作Word学习笔记(一)doc 
    = docs->Add(vOpt, vOpt, vOpt, vOpt);  

    【3】设置文档的页面布局

    C++操作Word学习笔记(一)PageSetupPtr page_setup = doc->GetPageSetup();
    C++操作Word学习笔记(一)page_setup
    ->PutTopMargin(0);
    C++操作Word学习笔记(一)page_setup
    ->PutBottomMargin(0);
    C++操作Word学习笔记(一)page_setup
    ->PutRightMargin(0);
    C++操作Word学习笔记(一)page_setup
    ->PutLeftMargin(0);

    【4】插入文本

    C++操作Word学习笔记(一)SelectionPtr selection;
    C++操作Word学习笔记(一)selection 
    = word_app->GetSelection();
    C++操作Word学习笔记(一)_ParagraphFormatPtr parafmt 
    = selection->GetParagraphFormat();
    C++操作Word学习笔记(一)parafmt
    ->PutLineSpacingRule(wdLineSpaceExactly);
    C++操作Word学习笔记(一)parafmt
    ->PutLineSpacing(50);
    C++操作Word学习笔记(一)_FontPtr font;
    C++操作Word学习笔记(一)font 
    = oSel->GetFont();
    C++操作Word学习笔记(一)font
    ->PutBold(1);
    C++操作Word学习笔记(一)font
    ->PutColor(wdColorGreen);
    C++操作Word学习笔记(一)font
    ->PutSize(20);
    C++操作Word学习笔记(一)font
    ->PutName(_T("宋体"));
    C++操作Word学习笔记(一)selection
    ->TypeText("ABC");
    C++操作Word学习笔记(一)oSel
    ->TypeParagraph();
    C++操作Word学习笔记(一)oSel
    ->TypeText("12345678901234567890");
    C++操作Word学习笔记(一)oSel
    ->TypeParagraph();

    【5】插入文本框

    C++操作Word学习笔记(一)ShapesPtr shapes = doc->GetShapes();
    C++操作Word学习笔记(一)ShapePtr textbox 
    =  shapspp->AddTextbox(Office::msoTextOrientationHorizontal, 11100100);

    【6】文本框中插入文本

     1C++操作Word学习笔记(一)ShapesPtr shapes = doc->GetShapes();
     2C++操作Word学习笔记(一)ShapePtr textbox =  shapspp->AddTextbox(Office::msoTextOrientationHorizontal, 11100100);
     3C++操作Word学习笔记(一)TextFramePtr textframe = textbox->GetTextFrame();
     4C++操作Word学习笔记(一)RangePtr range = textframe->GetTextRange();
     5C++操作Word学习笔记(一)long insert_before_count = range->Characters->GetCount();
     6C++操作Word学习笔记(一)range->InsertAfter("TEXT");
     7C++操作Word学习笔记(一)if (insert_before_count != 1)
     8C++操作Word学习笔记(一)    range->MoveStart(COleVariant((long)Word::wdCharacter), COleVariant(insert_before_count-1));
     9C++操作Word学习笔记(一)if(range != 0)
    10C++操作Word学习笔记(一){
    11C++操作Word学习笔记(一)    _FontPtr font = range->GetFont();
    12C++操作Word学习笔记(一)    font->PutBold(isBold);
    13C++操作Word学习笔记(一)    font->PutItalic(isItalic);
    14C++操作Word学习笔记(一)    font->PutColor((Word::WdColor)FontColor());
    15C++操作Word学习笔记(一)    font->PutSize(FontSize);
    16C++操作Word学习笔记(一)    font->PutName(FontType().c_str());
    17C++操作Word学习笔记(一)}

    【7】设置文本框的属性

    1C++操作Word学习笔记(一)textbox->GetTextFrame()->PutAutoSize(Office::msoAutoShape);
    2C++操作Word学习笔记(一)textbox->GetTextFrame()->PutMarginBottom(0);
    3C++操作Word学习笔记(一)textbox->GetTextFrame()->PutMarginTop(0);
    4C++操作Word学习笔记(一)textbox->GetTextFrame()->PutMarginLeft(0);
    5C++操作Word学习笔记(一)textbox->GetTextFrame()->PutMarginRight(0);
    6C++操作Word学习笔记(一)textbox->GetLine()->PutVisible(Office::msoFalse);
    7C++操作Word学习笔记(一)textbox->GetFill()->PutTransparency(1);

    【8】插入图片,这里需要注意,必须得先用InlineShape,这样可以把图片插入到指定的页中,不然,所有的图片只在第一页。

     1C++操作Word学习笔记(一)ShapesPtr shapes = m_WordDoc->GetShapes();
     2C++操作Word学习笔记(一)InlineShapesPtr inline_shapes = selection_doc->GetRange()->GetInlineShapes();
     3C++操作Word学习笔记(一)InlineShapePtr inline_shape = inline_shapes->AddPicture(“picture_path”, COleVariant((long)0), COleVariant((long)1));
     4C++操作Word学习笔记(一)ShapePtr shape = inline_shape->ConvertToShape();
     5C++操作Word学习笔记(一)shape->PutWidth(width);
     6C++操作Word学习笔记(一)shape->PutHeight(hehight());
     7C++操作Word学习笔记(一)shape->PutTop(Y);
     8C++操作Word学习笔记(一)shape->PutLeft(X);
     9C++操作Word学习笔记(一)if(shape->GetType() == Office::msoPicture)
    10C++操作Word学习笔记(一){
    11C++操作Word学习笔记(一)    Word::WrapFormatPtr wrapp = shape->GetWrapFormat();
    12C++操作Word学习笔记(一)    wrapp->PutType(Word::wdWrapBehind);
    13C++操作Word学习笔记(一)}

    14C++操作Word学习笔记(一)

    【9】插入直线

    1C++操作Word学习笔记(一)ShapesPtr shapes = doc->GetShapes();
    2C++操作Word学习笔记(一)Word::ShapePtr line = shapes->AddLine(x1,y1, x2,y2);
    3C++操作Word学习笔记(一)if (line->GetType() == Office::msoLine)
    4C++操作Word学习笔记(一){
    5C++操作Word学习笔记(一)    Word::LineFormatPtr LineFmt = line->GetLine();
    6C++操作Word学习笔记(一)    LineFmt->PutWeight(lr->weight_);
    7C++操作Word学习笔记(一)}

    【10】插入分隔符

    C++操作Word学习笔记(一)selection->InsertBreak(COleVariant((long)wdColumnBreak));
    C++操作Word学习笔记(一)selection
    ->InsertBreak(COleVariant((long)wdSectionBreakContinuous));
    C++操作Word学习笔记(一)selection
    ->InsertBreak(COleVariant((long)wdPageBreak));


    【11】设置栏目个数和栏目的宽度
    这里一定要注意add函数的逻辑

    1C++操作Word学习笔记(一)SectionsPtr word_sections = doc->GetSections();
    2C++操作Word学习笔记(一)long num = word_sections->GetCount();
    3C++操作Word学习笔记(一)SectionPtr word_section = word_sections->Item(num-1);
    4C++操作Word学习笔记(一)PageSetupPtr page_setup = word_section->GetPageSetup();
    5C++操作Word学习笔记(一)TextColumnsPtr text_cols = page_setup>GetTextColumns();
    6C++操作Word学习笔记(一)text_cols->PutEvenlySpaced(0);
    7C++操作Word学习笔记(一)text_cols->Add(COleVariant(col_width), COleVariant((long)0), COleVariant((long)false));

    【12】插入表格

     1C++操作Word学习笔记(一)TablesPtr tables = oSel->GetTables();    
     2C++操作Word学习笔记(一)TablePtr table = tables->Add(oSel->GetRange(), 25);
     3C++操作Word学习笔记(一)    
     4C++操作Word学习笔记(一)BordersPtr bords = table->GetBorders();
     5C++操作Word学习笔记(一)bords->PutOutsideLineStyle(wdLineStyleSingle);
     6C++操作Word学习笔记(一)bords->PutInsideLineStyle(wdLineStyleSingle);
     7C++操作Word学习笔记(一)for (int i = 1; i<=2; i++)
     8C++操作Word学习笔记(一){
     9C++操作Word学习笔记(一)    for (int j = 1; j<=5; j++)
    10C++操作Word学习笔记(一)    {
    11C++操作Word学习笔记(一)        table->Cell(i,j)->GetRange()->PutText("20");
    12C++操作Word学习笔记(一)    }

    13C++操作Word学习笔记(一)}

    14C++操作Word学习笔记(一)
    15C++操作Word学习笔记(一)CellPtr cell = table->Cell(1,1);
    16C++操作Word学习笔记(一)cell->Merge(table->Cell(1,2));

    【13】保存文档并退出

    1C++操作Word学习笔记(一)COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    2C++操作Word学习笔记(一)_DocumentPtr active_doc; 
    3C++操作Word学习笔记(一)active_doc = word_app->GetActiveDocument();
    4C++操作Word学习笔记(一)active_doc->SaveAs(COleVariant("D:\doc1.doc"), 
    5C++操作Word学习笔记(一)                   COleVariant((short)0),
    6C++操作Word学习笔记(一)                   vFalse, COleVariant(""), vTrue, COleVariant(""),
    7C++操作Word学习笔记(一)                   vFalse, vFalse, vFalse, vFalse, vFalse);
    8C++操作Word学习笔记(一)word_app->Quit(vOpt, vOpt, vOpt);

    在word优秀的构架中还有许许多多的接口,上面只是举例实现一个普通的文档,希望对大家有用。

  • 相关阅读:
    vscode配置备份
    正则替换html代码中img标签的src值
    使用css3原生变量实现主题换肤
    vue3基础知识学习系列(二)响应式原理实现
    vue3基础知识学习系列(一)api使用
    eslint规则中文解释
    开发笔记:使用canvas实现3D金字塔比例图表&#128200;
    实用网页UI调试技巧
    2020年特殊的一年,成就特殊的我们
    java设计模式之责任链模式
  • 原文地址:https://www.cnblogs.com/For-her/p/3499756.html
Copyright © 2011-2022 走看看