• 導出excel時操作checkBox



    procedure TfrmCQS_QUOTATION.sbtnOutPutClick(Sender: TObject);
    var
      Path: string;
      fielname: string;
      i: integer;
      sFileName: string;
      lstFileName: TStringList;
      fExcel: string;
      ExcelApp: Variant;
      isOpen: boolean;
    begin
    //todo:導出申請單EXCEL進行
      isopen := False;
      fexcel := 'Quotation.XLS';
      Path := SysUtils.ExtractFilePath(Application.ExeName);
      Path := Path + 'Samples\' + fEXCEL;

      sFileName := cdsMainFAT_PN.AsString;
      //替換文件名中的不規則字符
      lstFileName := TStringList.Create;
      with lstFileName do
      begin
        Add('"');
        Add('>');
        Add('<');
        Add('/');
        Add('\');
        Add(':');
        add('?');
        Add('|');
      end;
      for i := 0 to lstFileName.Count - 1 do
      begin
        if pos(lstFileName.Strings[i], sFileName) > 0 then
        begin
          sFileName := StringReplace(sFileName, '"', '~', [rfReplaceAll, rfIgnoreCase]);
        end;
      end;
      lstFileName.Free;


      SaveDialog.FileName := sFileName;


      if SaveDialog.Execute then
        fielname := SaveDialog.FileName
      else
        exit;
      try
        waitfm.TfrmWait.showWaitForm('導出EXCEL,請稍候...');
        try
          ExcelApp := CreateOleObject('Excel.Application'); // 創建 Excel
        except
          raise Exception.Create('系統可能沒有安裝Excel,請檢查!');
        end;
        ExcelApp.Visible := false; // 是否顯示 Excel
        ExcelApp.WorkBooks.Open(path); // 打開 Excel

        ExcelApp.WorkSheets[1].Activate;
        with GlobeFunlibs.GetTmpCds do
        begin
          commandtext := 'select bh, x, y, field, descs,Lb,lbName '
            + ' from cqs_quotation_excel'
            + ' where (x is not null or y is not null or LB is not null) and Name= ' + quotedstr(self.Name)
            + ' and bs= ' + quotedstr(self.cdsMain.Name);

          Open;
          while not Eof do
          begin
            if MasterDataset.FindField(Fields[3].asstring) <> nil then
            begin
              if Fields[5].AsString = '' then
                ExcelApp.ActiveSheet.Cells.Item[Fields[2].asinteger, Fields[1].asinteger] :=
                  MasterDataset.fieldbyname(Fields[3].asstring).AsString
              else
              begin
                if Fields[5].AsString = 'chk' then
                begin

                  for I := 1 to ExcelApp.ActiveSheet.Checkboxes.count do // Iterate
                    if (ExcelApp.ActiveSheet.CheckBoxes[i].Name = Fields[6].AsString) then
                    begin
    //                  ShowMessage('3:' + Fields[3].asstring + #13#10 +
    //                    MasterDataset.fieldbyname(Fields[3].asstring).AsString
    //                    + #13#10 + Fields[1].AsString
    //                    );

                      if MasterDataset.fieldbyname(Fields[3].asstring).AsString = Fields[1].AsString then
                      begin
                        ExcelApp.ActiveSheet.Checkboxes[I].value := 1;
                        Continue;
                      end;
                    end;
                end;
                if Fields[5].AsString = 'lab' then
                begin

                  for I := 1 to ExcelApp.ActiveSheet.Labels.count do // Iterate
                    if (ExcelApp.ActiveSheet.Labels[I].Name = Fields[6].AsString) then
                    begin
                      ExcelApp.ActiveSheet.Labels[I].text := MasterDataset.fieldbyname(Fields[3].asstring).AsString;
                      Continue;
                    end;
                end;

              end;
            end;
            next;
          end;
          close;
          free;
        end;
        ExcelApp.ActiveWorkBook.SaveAs(fielname);
        isOpen := true;


      finally

        //ExcelApp.DisplayAlerts := False;  //提示是否存盤
        ExcelApp.Quit;
        ExcelApp.Application.quit;
        ExcelApp := Unassigned;
        TfrmWait.CloseWaitform;
      end;
      if isOpen then
        if Application.MessageBox('EXCEL導出完成,是否要打開文件?', '提示', MB_YESNO +
          MB_ICONQUESTION) = IDYES then
        begin
          ShellExecute(Self.Handle, 'open', PChar(fielname), '', '', 1);
        end;
    end;

  • 相关阅读:
    careercup-C和C++ 13.6
    C++中名字隐藏,名字查找优先于类型检查
    careercup-C和C++ 13.5
    careercup-C和C++ 13.4
    careercup-C和C++ 13.3
    careercup-C和C++ 13.2
    careercup-C和C++
    careercup-排序和查找 11.7
    RMAN Catalog创建、配置和管理
    Linux一块网卡添加多个IP地址
  • 原文地址:https://www.cnblogs.com/twttafku/p/1019795.html
Copyright © 2020-2023  润新知