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