BCB 中数据导出为WORD文件的实现

   使用BCB实现WORD文件的导出可以有两种方式,一是使用OLE操作,但是难度比较高,所以博主采用第二种方式也就是控件的方法来实现。

   这里用到两个控件TWordApplication 和TWordDocument.

  wordApplication为TWordApplication 控件,InterwordDoc和DestwordDoc是TWordDocument控件。

替换word中的信息
bool WordReplace(String docText, String newText, TWordApplication *WordApp, TWordDocument *InterWordDoc, bool bIsPicture)
{
    bool bResult = false;
    try
    {
        InterWordDoc->Select();
  TVariant charCount = WordApp->ActiveDocument->Characters->Count;
  InterWordDoc->Range(TVariant(0), charCount);
        WordApp->Selection->Find->ClearFormatting();
        WordApp->Selection->Find->Replacement->ClearFormatting();
        WordApp->Selection->Find->set_Text(TVariant(docText));
        if (!bIsPicture)
        {
            WordApp->Selection->Find->Replacement->set_Text(TVariant(newText));
        }
  WordApp->Selection->Find->Forward = true;               //从开头向后匹配
        WordApp->Selection->Find->Wrap = wdFindContinue;
  WordApp->Selection->Find->Format = false;      //不论格式
  WordApp->Selection->Find->MatchCase = false;            //不论大小写
  WordApp->Selection->Find->MatchWholeWord = false;  //不是整词匹配
        WordApp->Selection->Find->MatchByte = false;
  WordApp->Selection->Find->MatchWildcards = false;   //不是通配
        WordApp->Selection->Find->MatchSoundsLike = false;
        WordApp->Selection->Find->MatchAllWordForms = false;
        WordApp->Selection->Find->Execute();
        if (!bIsPicture)
        {
            WordApp->Options->ReplaceSelection = true ;
            WordApp->Selection->TypeText(TVariant(newText));
            WordApp->Selection->Collapse();
        }
        else
        {
            WordApp->Selection->Paste();
        }
        bResult = true;
    }
    catch (Exception &e)
    {
    }
    return bResult;
}

 

 

具体实现

 try
    {
        wordApplication->Connect();       // 连接WORD应用程序
    }
    catch(Exception &exception)
    {
        g_LocalApp->ShowMessageU("无法打开WORD,请确认安装了WORD软件",MB_INFORMATION);
        wordApplication->Disconnect();
        return;
    }
    // 得到EXE文件所在的路径
    String PathStr = ExtractFilePath(ParamStr(0));

    //模板文件
    TVariant TemplateFile = PathStr + "Document\\文档模板.dot";       //按照模板文件的格式来显示
    if(!FileExists(TemplateFile))
    {
        ShowMessage("模板文件不存在!",MB_INFORMATION);
        wordApplication->Disconnect();
        return;
    }
    TVariant SaveTemplate = PathStr + "Document\\文档模板1.dot";

    //查看 目标文件夹 是否存在,若不存在,则创建之
    if(!DirectoryExists(PathStr + "ExportClue"))
    {
        if(!CreateDir(PathStr + "ExportClue"))
            ShowMessage("不能创建目录:" + PathStr + "ExportClue", MB_INFORMATION);

        wordApplication->Disconnect();
        return;
    }
    //目标文件
    TVariant DestFile = PathStr + "ExportClue\\"+strTime+strClueName+".doc";

    InterwordDoc->ConnectTo(wordApplication->Documents->Add());               // 新建一个WORD文档并链接到TWordApplication 上
    DestwordDoc->ConnectTo(wordApplication->Documents->Add(&TemplateFile, EmptyParam));    // 建一个已建的模板为文档

    DestwordDoc->Select();                                                                                        // 选定
    TVariant charCount = wordApplication->ActiveDocument->Characters->Count;
    DestwordDoc->Range(TVariant(0), charCount);
    wordApplication->Selection->Copy();               // 复制模板文件中的内容

    InterwordDoc->Select();
    charCount = wordApplication->ActiveDocument->Characters->Count;  
    InterwordDoc->Range(TVariant(0), charCount);
    wordApplication->Selection->Paste();             // 粘帖到新建的文件中

    WordReplace("#number#", "1", wordApplication, InterwordDoc, false);           // 替换内容

    String strPicText = NULL;
    WordReplace("#info#", strPicText, wordApplication, InterwordDoc, false);


             // Clipboard()->Assign(所需图片);       // 这边是把图片放到粘帖板上面去,里面的参数可以是图片的绝对地址

        WordReplace("#picture#", " ", wordApplication, InterwordDoc, true);  
   
    else
    {
        WordReplace("#picture#", "无图片 ", wordApplication, InterwordDoc, false);
    }

    // 保存文件
    InterwordDoc->SaveAs(DestFile);                                      // 保存为目标文档,这样就不会弹出保存对话框了
    DestwordDoc->SaveAs(SaveTemplate);

    wordApplication->Disconnect();                                       // 断开连接

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.所需的三个控件: ChooseWA: TWordApplication; ChooseWD: TWordDocument; ChooseWF: TWordFont; 2.检查计算机是否安装了WORD try ChooseWA.Connect; except MessageBox(handle,'无法链接,请确认电脑上是否安装Word XP/2003及以上版本','连接出错', MB_Ok or MB_ICONERROR); Abort; end; 3.关闭WORD拼写检查 //因为Word进行拼写检查需要很多时间,所以首先关闭检查 ChooseWA.Options.CheckSpellingAsYouType := False; ChooseWA.Options.CheckGrammarAsYouType := False; 4.新建一个文档并设置文档的标题 var NewDocument: _Document; ItemIndex: OleVariant; ItemIndex := 1; NewDocument := ChooseWA.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam); ChooseWD.ConnectTo(NewDocument); ChooseWD.Windows.Item(ItemIndex).Caption := '我新建的第一个文档';//此文档的第一个窗口的标题,试卷 名称 5.写入数据 ChooseWD.Range.InsertAfter('第一行数据'+#13);//#13代表换行 6.设置字体格式 procedure SetFont(aBold,aItalic,aShadow,aSize:integer); begin ChooseWF.ConnectTo(ChooseWD.Sentences.Get_Last.Font); ChooseWF.Name := '宋体'; ChooseWF.Bold := aBold; ChooseWF.Italic := aItalic; ChooseWF.Shadow := aShadow; ChooseWF.Size := aSize; end; 如:SetFont(1,0,0,22);//设置字体为22号 7.向WORD写入表格 (1)插入表格: ChooseWD.Tables.Add(ChooseWD.Words.Last, RowNum, ColNum,EmptyParam,EmptyParam);//RowNum为行数, ColNum为列数 (2)插入数据: ChooseWD.Tables.Item(1).Cell(1,1).Range.Text := '第一行第一列'; ChooseWD.Tables.Item(1).Cell(2,1).Range.Text := '第二行第一列'; 8.向WORD写入图片 var Img: TImage; MyFormat: Word; AData: Cardinal; APalette: HPALETTE; Img.Picture.LoadFromFile('文件路径');//从文件导入图片至控件 Img.Picture.SaveToClipboardFormat(MyFormat,AData,APalette);//将图片转存到剪贴板 Clipboard.SetAsHandle(MyFormat,AData);//将剪贴板图片复制出来,注意添加Clipbrd单元 ChooseWD.Sentences.Last.Paste;//在WORD粘贴图片 9.在界面显示WORD文档 ChooseWA.Visible:=true; 10.断开与WORD的链接 ChooseWA.Disconnect; ChooseWD.Disconnect; Chart1.SaveToBitmapFile(‘文件名.bmp’);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值