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();                                       // 断开连接

猜你喜欢

转载自blog.csdn.net/zh516846937/article/details/6936377