C++ Builder XE关于AdvStringGrid对EXCEL母表快速分表,并批量插入sheet子表简单操作
创始人
2024-01-31 08:56:21
0

如何快速将ECXEL母表快速批量生成多个子表分表,并且在表中插入sheet子表的简单操作:

//AdvStringGrid2->SaveToXLS(filename,false);//生成新EXCEL表格

//AdvStringGrid2->SaveToXLSSheet(filename,Fname);//插入sheet子表

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  if(RzButtonEdit1->Text=="")
  {
      ShowMessage("请选择生成分表路径!");
      return;
  }
     //删除所有表格文件
       TSearchRec   sr;
       String Dir =RzButtonEdit1->Text;
        if   (FindFirst(Dir+"\\*.xls",faAnyFile,sr)   ==   0)
        {
          do
          {

                 DeleteFile(Dir+"\\"+sr.Name); //注数

          } while(FindNext(sr) == 0);
          FindClose(sr);
         }
     //删除所有表格文件
        if   (FindFirst(Dir+"\\*.xlsx",faAnyFile,sr)   ==   0)
        {
          do
          {

                 DeleteFile(Dir+"\\"+sr.Name); //注数

          } while(FindNext(sr) == 0);
          FindClose(sr);
         }
  //生成表头
  AdvStringGrid2->ClearAll();
  TStringList *Bt =new TStringList;
  Bt->Clear();
  //全选文件
  for(int   i=0;iItems->Count;i++)
  {
     if(RzListView1->Items->Item[i]->Checked)
     {
         Bt->Append(RzListView1->Items->Item[i]->SubItems->Strings[0] );   //有效字段分表
     }
  }
  AdvStringGrid2->ColCount=Bt->Count;
  for(int i=0;iCount ;i++)
  {
    AdvStringGrid2->Cells[i][0]=Bt->Strings[i];
  }
  //开始分表
    TStringList *Btzd =new TStringList;
  Btzd->Clear();
  int ZDint=0; //查找字段列
  String ZDstr =ComboBox1->Text;
   for(int i=0;iColCount;i++)
   {
       if(AdvStringGrid1->Cells[i][0]==ZDstr)
       {
         ZDint=i;
         break;   //找到字段列
       }
   }
   //查找字段列有多少个不同类
   for(int i=1;iRowCount;i++)
   {
      if(!PDyn(AdvStringGrid1->Cells[ZDint][i],Btzd))
      {
          Btzd->Append(AdvStringGrid1->Cells[ZDint][i]); //找到不同类就入表
      }
   }
   //开始分表
   RzListBox1->Clear();
   for(int Bi =0;Bi Count;Bi++)
   {
       int Bii =0; //分表的列
       int Bj =0;  //分表的行
       for(int i=0;iColCount;i++)
       {

          if(PDyn(AdvStringGrid1->Cells[i][0],Bt)) //有效字段
          {
                Bj =0;

                for(int j=1;jRowCount;j++)
                 {
                   if( AdvStringGrid1->Cells[ZDint][j]== Btzd->Strings[Bi] )  //分表字段类
                   {
                     Bj++;

                     AdvStringGrid2->Cells[Bii][Bj]=AdvStringGrid1->Cells[i][j];
                   }

                 }
                 Bii ++;
          }
       }
       AdvStringGrid2->RowCount=Bj+1;
       //生成分表
       AdvStringGrid2->SaveToXLS(RzButtonEdit1->Text+"\\"+Btzd->Strings[Bi]+"_分表.xlsx",false);
       RzListBox1->Items->Append(RzButtonEdit1->Text+"\\"+Btzd->Strings[Bi]+"_分表.xlsx");
       AdvStringGrid2->SaveToXLSSheet(Label2->Caption,Btzd->Strings[Bi]);//插入sheet子表,label2是指母表的文件名路径,后面参数是sheet表的名称。
   }


  delete Bt ;
  delete Btzd ;
}
//---------------------------------------------------------------------------
bool TForm1::PDyn(String Pstr,TStringList *ZDlist)
{
   bool Pyn =false;
    for(int Bi =0;Bi Count;Bi++)
   {
      if(ZDlist->Strings[Bi]==Pstr)
      {
         Pyn=true ;
         break;
      }
   }
   return Pyn;
}

 

相关内容

热门资讯

科学与健康|新药来了!检查结果...   一元复始,万象更新。2026年是“十五五”规划的开局之年,展望医疗卫生健康领域,一系列新政将陆续...
东西问丨穆罕默德·曼苏里:中国...   中新社南昌12月31日电 题:中国实践如何助力保障全球粮食安全?  ——专访联合国粮农组织助理总...
一批新规正式施行 事关社会治安...   央视网消息:2026年1月1日起,有一批事关社会治安、保育教育、电动汽车、网络安全等多方面的新规...
【好评中国】两江评 | 拼搏的...   元旦佳节,辞旧迎新。当新年的钟声敲响,2025年完美收官。回首过去这一年,每一个人都以坚韧不拔的...
聚焦大湾区|港珠澳大桥2025...   新华社广州1月1日电(记者王浩明)2025年,经港珠澳大桥珠海公路口岸出入境客流与车流分别超过3...
铁路公安维护站车治安稳定守护元...   为确保2026年元旦假期旅客出行安全和铁路运输畅通,各地铁路公安机关按照统一部署要求,加强指挥调...
一起来看!中国科技创新的“硬核...   人工智能大模型你追我赶,芯片自主研发有了新突破,我国成为创新力上升最快的经济体之一。天问二号开启...
委内瑞拉防长要求军队保持战备状... △委内瑞拉国防部长洛佩斯(资料图)  当地时间2025年12月31日,委内瑞拉国防部长洛佩斯发表讲话...
商务部新闻发言人就欧盟碳边境调...   央视网消息:据商务部网站消息,商务部新闻发言人就欧盟碳边境调节机制有关问题答记者问。  问:欧盟...
国足新年首期集训名单公布 多位...   新华社北京1月1日电 中国足协1日公布了中国男足国家队2026年第一期26人集训名单,李扬、闫炳...