请各位大大帮忙看看代码~~

xiangyou0017 2012-02-07 08:53:06
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1_Txt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include<FileCtrl.hpp>
#define PG OlePropertyGet
#define PS OlePropertySet
#define PR OleProcedure
#define FN OleFunction
TFrm_Main *Frm_Main;
TStringList *C_File=new TStringList;
Variant ExcelApp,WorkBook,Sheet;
TSearchRec F;
AnsiString dir;
int n=0;
int j=6;
AnsiString temp,temp1,temp2,temp3,temp4,temp5,temp6;
//---------------------------------------------------------------------------
void Search(AnsiString w)
{
TSearchRec F;
if(FindFirst(w+"\\*.*",faAnyFile,F)==0)
do
{
if((F.Name!=".") && (F.Name!=".."))//暗ヘ魁縵匡
{
if(F.Attr!=faDirectory) //狦ぃ琌ゅンЖ妮┦
{
if(F.Name.Pos(".txt") > 0)//縵匡ゅンЖńTXT郎
{
AnsiString FileName=w+"\\"+F.Name;
C_File->LoadFromFile(FileName);
n++;//﹚竡跑秖i穓碝TXT郎糤Ω
}
}
else
{
Search(w+"\\"+F.Name);//狦琌ゅンЖ妮┦穓碝ゅンЖ齙
}
}
}
while(FindNext(F)==0);
FindClose(F);
Frm_Main->Panel1->Caption=n;
}
void write()
{
int p=0;
for(int i=0;i<C_File->Count;i++)
{
if(C_File->Strings[i].Pos("Passed Tests")>0)
{
break;
}
else if((C_File->Strings[i].Pos("===")==0)&&(C_File->Strings[i].Trim()!=""))
{
temp1 = C_File->Strings[i].SubString(1,4);
Sheet.PG("Cells",p+1,1).PS("Value",temp1.c_str());
temp2 = C_File->Strings[i].SubString(6,4);
Sheet.PG("Cells",p+1,2).PS("Value",temp2.c_str());
temp3 = C_File->Strings[i].SubString(10,4);
Sheet.PG("Cells",p+1,3).PS("Value",temp3.c_str());
temp4 = C_File->Strings[i].SubString(14,31);
Sheet.PG("Cells",p+1,4).PS("Value",temp4.c_str());
temp5 = C_File->Strings[i].SubString(56,13);
Sheet.PG("Cells",p+1,5).PS("Value",temp5.c_str());
temp6 = C_File->Strings[i].SubString(69,10);
Sheet.PG("Cells",p+1,6).PS("Value",temp6.c_str());
p++;
}
}
}
__fastcall TFrm_Main::TFrm_Main(TComponent* Owner)
: TForm(Owner)
{
ExcelApp=Variant::CreateObject("Excel.Application");
ExcelApp.PS("Visible",false);
ExcelApp.PG("Workbooks").FN("Add");
WorkBook=ExcelApp.PG("ActiveWorkbook");
WorkBook.PG("Sheets",1).PG("Select");
Sheet=WorkBook.PG("ActiveSheet");
Btn_write->Enabled=false;
Btn_Save->Enabled=false;
}
void Add(AnsiString w)//﹚竡ㄧ计龟瞷穓碝
{
int Position=0;
TSearchRec F;
AnsiString temp;
if(FindFirst(w+"\\*.*",faAnyFile,F)==0)
do
{
if((F.Name!=".") && (F.Name!=".."))//暗ヘ魁縵匡
{
if(F.Attr!=faDirectory) //狦ぃ琌ゅンЖ妮┦
{
if(F.Name.Pos(".txt") > 0)//縵匡ゅンЖńTXT郎
{
AnsiString FileName=w+"\\"+F.Name;
C_File->LoadFromFile(FileName);
int p=0;
for(int i=1;i<C_File->Count;i++)
{
if(C_File->Strings[i].Pos("Passed Tests")>0)
{
break;
}
else if((C_File->Strings[i].Pos("===")==0)&&(C_File->Strings[i].Trim()!=""))
{
temp = C_File->Strings[i].SubString(45,11);
Sheet.PG("Cells",p+2,j+1).PS("Value",temp.c_str());
Sheet.PG("Cells",1,j+1).PS("Value",F.Name.SubString(1,18).c_str());
p++;
}
}
j++;
Frm_Main->ProgressBar1->Max=n;
Position++;
Frm_Main->ProgressBar1->Position++;
Frm_Main->Panel2->Caption=Position+1;
}
}
else
{
Add(w+"\\"+F.Name);//狦琌ゅンЖ妮┦穓碝ゅンЖ齙
}
}
}
while(FindNext(F)==0);
FindClose(F);
}
//---------------------------------------------------------------------------
void __fastcall TFrm_Main::Btn_RunClick(TObject *Sender)
{
SelectDirectory(AnsiString("Select a Folder"),"",dir);
Search(dir);
Btn_write->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TFrm_Main::Btn_SaveClick(TObject *Sender)
{
ExcelApp.FN("Save");
ExcelApp.FN("Quit");
}
//---------------------------------------------------------------------------
void __fastcall TFrm_Main::Btn_writeClick(TObject *Sender)
{
write();
Add(dir);
Btn_Save->Enabled=true;
ShowMessage("succeed Loading File");
}
//---------------------------------------------------------------------------
void __fastcall TFrm_Main::FormClose(TObject *Sender, TCloseAction &Action)
{
ExcelApp.FN("Quit");
}
//---------------------------------------------------------------------------


主要是把文件夹里的TXT搜索出来,再导入到Excel当中去,加个ProgressBar显示进度,但我不知道怎样将进度条上显示百分比,还有就是每导入完一个TXT我想在Panel2中显示当前导入完成的个数,这个数据还可以供ProgressBar 显示百分比用~~~
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangyou0017 2012-02-10
  • 打赏
  • 举报
回复
为什么我将您给的方法说Undefined symbol'SELDIRHELP'呢?
缘中人 2012-02-09
  • 打赏
  • 举报
回复

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Dir = "C:\\Program Files\\MyApp";
if (SelectDirectory(Dir, TSelectDirOpts() << sdAllowCreate << sdPerformCreate << sdPrompt,SELDIRHELP))
Label1->Caption = Dir;
}


需要判断这个函数的返回值
xiangyou0017 2012-02-08
  • 打赏
  • 举报
回复
谢谢ksrsoft问题已解决~~~有个新问题,请问SelectDirectory这个函数是怎样用的?为什么我写的这个代码,当我不选择文件夹的时候,Panel1中还是会有数据,不该有的啊·~因为我没有选择文件夹啊~~~
xiangyou0017 2012-02-07
  • 打赏
  • 举报
回复
您说的是Panel2的显示问题吗?我试了下把你给的这句话加进去,但,没看到效果,不知道是不是放错地方了?
函数void Add(AnsiString w)里面的后面几句:

j++;
Frm_Main->ProgressBar1->Max=n;
Position++;
Frm_Main->ProgressBar1->Position++;
Application->ProcessMessages();
Frm_Main->Panel2->Caption=Position+1;
缘中人 2012-02-07
  • 打赏
  • 举报
回复
显示百分比用控件TCGauge
缘中人 2012-02-07
  • 打赏
  • 举报
回复
Application->ProcessMessages();//加上这句就可以了

用这个解决你那个问题
xiangyou0017 2012-02-07
  • 打赏
  • 举报
回复
呵呵,谢谢您给的回答,呵呵 ,ProgressBar能不能在上面显示百分比?就是10%,这样的数据,更直观些?大侠还想加个QQ(我M你呵呵)呵呵~~多多请教!我想在我的程序的Panel2显示加载的个数,可是,每次都是在加载过程中数据是不懂的,然后搜索完后再显示搜索的总数~~

我使用SelecDirectory选择文件夹,当我点取消时,其实好像默认选择了一个文件夹,我本意是取消后不想 有任何动作的,但这里默认给我搜索出来了我并不想要的一个数据~~~
缘中人 2012-02-07
  • 打赏
  • 举报
回复
在循环中加上
Application->ProcessMessages();

可以刷新,不至于卡死。
缘中人 2012-02-07
  • 打赏
  • 举报
回复
ProgressBar1已经有了

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧