• 通用EXCEL清册比对合并


        信息化时代,办公电子化已成了每个部门单位不可或缺的组成部分,其中也免不了要经常
    使用微软的EXCEL电子表格,通过对电子表格的灵活运用,极大方便和提高了办公效率。
     在具体工作中,经常会碰到两张电子表格的比对或合并问题。即你所需要的信息往往是在
    两张不同的表格中。如果要手工把两张表格的内容根据某个关键字段比对或合并在一起,将会
    消耗您大量宝贵的时间和精力。为此,作者专门编写了一个通用的EXCEL清册比对合并软件,来
    提高效率,并把它分享给每一位需要的朋友。大家如果在使用中发现问题或有更好的建议可以
    联系QQ:175624411,或来信EMAIL:zjdyzqh@163.com,我将尽力予以吸纳改善该软件系统。

    效果图:

    代码如下:

    //工徎文件

    program Project1;

    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2},
      Unit3 in 'Unit3.pas' {Form3};

    {$R *.res}

    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.Title := '清册比对';
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.

    //主单元文件

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, StdCtrls, ComCtrls, ExtCtrls, Buttons;
    
    type
      TForm1 = class(TForm)
        btnGetData: TButton;
        sgSheet1: TStringGrid;
        Label1: TLabel;
        Label4: TLabel;
        Label5: TLabel;
        cmbSheet1: TComboBox;
        btnOk: TButton;
        Panel1: TPanel;
        Panel2: TPanel;
        chkTitle: TCheckBox;
        chkDispLabel: TCheckBox;
        Panel3: TPanel;
        chkDataRange: TCheckBox;
        rgDispLabel: TRadioGroup;
        edtDispLabelSheet1: TEdit;
        rgDataRange: TRadioGroup;
        Panel4: TPanel;
        edtDispLabelSheet2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        Label2: TLabel;
        Label3: TLabel;
        edtFile1: TEdit;
        bbtnOpen1: TBitBtn;
        Label6: TLabel;
        cmbSheet2: TComboBox;
        edtFile2: TEdit;
        bbtnOpen2: TBitBtn;
        sgSheet2: TStringGrid;
        edtTitle: TEdit;
        odFile1: TOpenDialog;
        odFile2: TOpenDialog;
        sbTip: TStatusBar;
        Label7: TLabel;
        Timer1: TTimer;
        procedure btnGetDataClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure sgSheet1SelectCell(Sender: TObject; ACol, ARow: Integer;
          var CanSelect: Boolean);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Edit2KeyPress(Sender: TObject; var Key: Char);
        procedure sgSheet1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure FormDestroy(Sender: TObject);
        procedure cmbSheet1KeyPress(Sender: TObject; var Key: Char);
        procedure sgSheet1Click(Sender: TObject);
        procedure btnOkClick(Sender: TObject);
        procedure bbtnOpen1Click(Sender: TObject);
        procedure bbtnOpen2Click(Sender: TObject);
        procedure chkTitleClick(Sender: TObject);
        procedure chkDispLabelClick(Sender: TObject);
        procedure chkDataRangeClick(Sender: TObject);
        procedure sgSheet2SelectCell(Sender: TObject; ACol, ARow: Integer;
          var CanSelect: Boolean);
        procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
        procedure FormShow(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
        procedure InitControlState;
        function InvalidCheck : Boolean;
    
      public
        { Public declarations }
      end;
    
    
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses ComObj, Gauges, Unit2, Unit3;
    
    var
      xlApp, xlWorkbook: Variant;
      FCheck, FUnCheck: TBitmap;  //复选框位图
      slSource: TStringList;   //结果表内容
      StartRowSheet1, StartRowSheet2: Cardinal;  //起始行
      EndRowSheet1, EndRowSheet2: Cardinal;    //结尾行
      PrimaryColSheet1, PrimaryColSheet2: Cardinal; //关键列
      RowDispLabel1, RowDispLabel2: Cardinal;  //字段所在行
      t: byte;// 控制提示字符动起来
    
    procedure TForm1.bbtnOpen1Click(Sender: TObject);
    var
      i: integer;
    begin
      odFile1.Filter := '*.xls';
      if odFile1.Execute then
      begin
        if not FileExists(odFile1.FileName) then
        begin
          ShowMessage('你选择的文件不存在,请重新选择!');
          Exit;
        end;
        edtFile1.ReadOnly := False;
        edtFile1.Text := odFile1.FileName;
        edtFile1.ReadOnly := True;
    
        //打开工作薄
        xlWorkbook := xlApp.WorkBooks.Open(edtFile1.Text);
        //初始化工作表选项
        cmbSheet1.Clear;
        for i := 1 to xlWorkbook.Sheets.Count do
          cmbSheet1.Items.Add(xlWorkbook.Sheets[i].name);
        cmbSheet1.ItemIndex := 0;
    
        xlWorkbook.Close;
      end;
    end;
    
    procedure TForm1.bbtnOpen2Click(Sender: TObject);
    var
      i: integer;
    begin
      odFile2.Filter := '*.xls';
      if odFile2.Execute then
      begin
        if not FileExists(odFile2.FileName) then
        begin
          ShowMessage('你选择的文件不存在,请重新选择!');
          Exit;
        end;
        edtFile2.ReadOnly := False;
        edtFile2.Text := odFile2.FileName;
        edtFile2.ReadOnly := True;
    
        //打开工作薄
        xlWorkbook := xlApp.WorkBooks.Open(edtFile2.Text);
        //初始化工作表选项
        cmbSheet2.Clear;
        for i := 1 to xlWorkbook.Sheets.Count do
          cmbSheet2.Items.Add(xlWorkbook.Sheets[i].name);
        cmbSheet2.ItemIndex := 0;
    
        xlWorkbook.Close;
      end;
    end;
    
    procedure TForm1.btnGetDataClick(Sender: TObject);
    var
      x, y: Integer;
      frm: TForm; //显示进度条的窗体
      gg: TGauge;
    {var
      id : THandle;}
    begin
      //有效性检验
      if (cmbSheet1.Text = '') or (cmbSheet2.Text = '') then
      begin
        ShowMessage('请选择要操作的表格后再继续!');
        Exit;
      end;
      chkDispLabel.Enabled := True;
      chkDataRange.Enabled := True;
      btnGetData.Enabled := False;
      Screen.Cursor := crHourGlass;
    
      //取得表一的已使用单元格行列总数
      xlWorkbook := xlApp.WorkBooks.Open(edtFile1.Text);
    
      xlWorkbook.Sheets[cmbSheet1.Text].Activate;
      sgSheet1.RowCount := xlWorkbook.ActiveSheet.UsedRange.Rows.Count;
      sgSheet1.ColCount := xlWorkbook.ActiveSheet.UsedRange.Columns.Count;
    
      //显示进度条
      frm := TForm.Create(nil);
      frm.BorderStyle := bsNone; //去掉边框
      frm.Width := 402;
      frm.Height := 27;
      frm.Position := poScreenCenter;
        gg := TGauge.Create(frm);
        gg.Width := 400;
        gg.Height := 25;
        gg.Left := 1;
        gg.Top := 1;
        gg.MinValue := 0;
        gg.MaxValue := sgSheet1.RowCount;
        gg.Parent := frm;
        gg.BackColor := clSilver;
        gg.ForeColor := clMoneyGreen;
    
      frm.Show;        //ShowModal会阻塞
      frm.BringToFront;
      //绘复选框状态  准备
      for x := 0 to sgSheet1.ColCount - 1 do
        sgSheet1.Cells[x, 0] := 'y';
    
      //赋值到StringGrid
      for x := 0 to sgSheet1.RowCount-1 do
      begin
        for y := 0 to sgSheet1.ColCount-1 do
        begin
          try
            sgSheet1.Cells[y, x+1] := xlWorkbook.ActiveSheet.cells[x+1, y+1].value;
            Application.ProcessMessages;
          except
            ShowMessage('出错在表格'+'['+Inttostr(x+1)+','+Inttostr(y+1)+']单元格,请检查!');
            exit;
          end;
    
        end;
        gg.Progress := gg.Progress + 1;
      end;
    
      //设置列宽
      for y := 0 to sgSheet1.ColCount-1 do
        sgSheet1.ColWidths[y] := xlWorkbook.ActiveSheet.Columns[y+1].ColumnWidth*5;
    
      //关闭
      xlWorkbook.Close;
    
      //取得表二的已使用单元格行列总数
      xlWorkbook := xlApp.WorkBooks.Open(edtFile2.Text);
    
      xlWorkbook.Sheets[cmbSheet2.Text].Activate;
      sgSheet2.RowCount := xlWorkbook.ActiveSheet.UsedRange.Rows.Count;
      sgSheet2.ColCount := xlWorkbook.ActiveSheet.UsedRange.Columns.Count;
    
     //进度条复位
      gg.Progress := 0;
      gg.MaxValue := sgSheet2.RowCount;
      //赋值到StringGrid
      for x := 0 to sgSheet2.ColCount - 1 do
        sgSheet2.Cells[x, 0] := 'y';
    
      for x := 0 to sgSheet2.RowCount-1 do
      begin
        for y := 0 to sgSheet2.ColCount-1 do
        begin
          sgSheet2.Cells[y, x+1] := xlWorkbook.ActiveSheet.cells[x+1, y+1].value;
          Application.ProcessMessages;
        end;
        gg.Progress := gg.Progress + 1;
      end;
      //设置列宽
      for y := 0 to sgSheet2.ColCount-1 do
        sgSheet2.ColWidths[y] := xlWorkbook.ActiveSheet.Columns[y+1].ColumnWidth*5;
    
      //退出进度条窗体
      frm.ModalResult := 1;
      frm.Free;
    
      btnGetData.Enabled := True;
      Screen.Cursor := crDefault;
     // CreateThread(nil, 0, @GetData, nil, 0, id);
    end;
    
    procedure TForm1.btnOkClick(Sender: TObject);
    var
      i,j,k : integer;
      ccols: integer;
      s : string; //表格的行内容
      arrFlag1, arrFlag2: array of Boolean; //存放两张表有否相同记录的标志
      sdSaveName: TSaveDialog;
      sFile: string;  //保存的文件名
      colWidth: array of integer;//输出表列宽
    begin
      slSource.Clear;
      //有效性检查
      if not InvalidCheck then Exit;
      chkDispLabel.Enabled := False;
      chkDataRange.Enabled := False;
      btnOk.Enabled := False;
      Screen.Cursor := crHourGlass;
     //保存已选输出列的列宽到数组
      for i := 0 to sgSheet1.ColCount - 1 do
        if sgSheet1.Cells[i, 0] = 'y' then
        begin
          //表一列宽
          setLength(colWidth, Length(colWidth)+1);
          colWidth[High(colWidth)] := sgSheet1.ColWidths[i];
        end;
      //表二列宽
      for i := 0 to sgSheet2.ColCount - 1 do
      if sgSheet2.Cells[i, 0] = 'y' then
      begin
        setLength(colWidth, Length(colWidth)+1);
        colWidth[High(colWidth)] := sgSheet2.ColWidths[i];
      end;
    
      //开始比对合并
      slSource.Add(edtTitle.Text);
      if chkDispLabel.Checked then
      begin
        for i := 0 to sgSheet1.ColCount - 1 do
          if sgSheet1.Cells[i, 0] = 'y' then
          begin
            s := s + sgSheet1.Cells[i, RowDispLabel1] + Chr(9);
            //保存已选输出列的列宽到数组
            setLength(colWidth, Length(colWidth)+1);
            colWidth[High(colWidth)] := sgSheet1.ColWidths[i] div 5;
          end;
    
        for i := 0 to sgSheet2.ColCount - 1 do
        if sgSheet2.Cells[i, 0] = 'y' then
        begin
          s := s + sgSheet2.Cells[i, RowDispLabel2] + Chr(9);
         //保存已选输出列的列宽到数组
          setLength(colWidth, Length(colWidth)+1);
          colWidth[High(colWidth)] := sgSheet2.ColWidths[i] div 5;
        end;
        //添加到字符串列表
        slSource.Add(s);
      end;
    
      s := '';
      SetLength(arrFlag1, sgSheet1.RowCount);
      SetLength(arrFlag2, sgSheet2.RowCount);
      for i := Low(arrFlag1) to High(arrFlag1) do
        arrFlag1[i] := False;
      for i := Low(arrFlag2) to High(arrFlag2) do
        arrFlag2[i] := False;
      //表间数据比对循环
      for i := StartRowSheet1 to EndRowSheet1 do
      begin
        for j := StartRowSheet2 to EndRowSheet2 do
        begin
          if sgSheet1.Cells[PrimaryColSheet1, i] = sgSheet2.Cells[PrimaryColSheet2, j] then
          begin
            for k := 0 to sgSheet1.ColCount - 1 do
              if sgSheet1.Cells[k, 0] = 'y' then
                begin
                  s := s + sgSheet1.Cells[k, i] + Chr(9);
                end;
    
            for k := 0 to sgSheet2.ColCount - 1 do
              if sgSheet2.Cells[k, 0] = 'y' then
                begin
                  s := s + sgSheet2.Cells[k, j] + Chr(9);
                end;
    
            slSource.Add(s);
            //设置表二相应行号的比对标记
            arrFlag1[i] := True;
            arrFlag2[j] := True;
            //退出  for j 的循环
            Break;
          end;//if sgSheet1.cells
        end;  //for j
        s := '';
      end; //for i
    
      s := '';
      //将表一独有或表二独有的记录添加到结果列表
      for i := StartRowSheet1 to EndRowSheet1 do
      begin
        //表一独有
        if not arrFlag1[i] then
        begin
          for k := 0 to sgSheet1.ColCount - 1 do
            if sgSheet1.Cells[k, 0] = 'y' then
              begin
                s := s + sgSheet1.Cells[k, i] + Chr(9);
              end;
    
          slSource.Add(s);
          s := '';
        end;
      end;
    
       //表二独有
      for i := StartRowSheet2 to EndRowSheet2 do
      begin
        if not arrFlag2[i] then
        begin
          for k := 0 to sgSheet1.ColCount - 1 do
            if sgSheet1.Cells[k, 0] = 'y' then
              begin
                s := s + Chr(64) + Chr(9);
              end;
    
          for k := 0 to sgSheet2.ColCount - 1 do
            if sgSheet2.Cells[k, 0] = 'y' then
              begin
                s := s + sgSheet2.Cells[k, i] + Chr(9);
              end;
    
          slSource.Add(s);
          s := '';
        end;
    
      end;
    
      btnOk.Enabled := True;
      Screen.Cursor := crDefault;
      //保存结果
      sdSaveName := TSaveDialog.Create(nil);
      try
        sdSaveName.Filter := '*.xls';
        if sdSaveName.Execute then
        begin
          if ExtractFileExt(sdSaveName.FileName) <> '.xls' then
            sdSaveName.FileName := sdSaveName.FileName + '.xls';
    
          if FileExists(sdSaveName.FileName) then
          begin
            if ID_NO = Application.MessageBox('文件已存在,是否覆盖!', '提示', MB_YesNo) then
            begin
              Exit;
            end;
          end;
          sFile := sdSaveName.FileName;
          slSource.SaveToFile(sFile);
          ShowMessage('恭喜,保存成功!');
    
    
          //关闭打开的Excel工作薄 ,为打开结果表准备
          if not VarIsEmpty(xlApp) then
          begin
            xlApp.Workbooks.Close;
            xlWorkbook := UnAssigned;
          end;
    
          xlWorkbook := xlApp.WorkBooks.Open(sFile);
    
          //是否要设置格式
          if ID_YES = Application.MessageBox('是否要设置结果表显示格式!', '提示', MB_YesNo) then
          begin
            //设置单元格格式
            //列宽 和//标题
            ccols := xlWorkbook.ActiveSheet.UsedRange.Columns.Count;
    
            for i := 0 to ccols - 1 do
              xlWorkbook.ActiveSheet.Columns[i+1].ColumnWidth := colWidth[i];
    
            xlWorkbook.ActiveSheet.Range['A1:'+Char(64+ccols)+'1'].Merge;
            xlWorkbook.ActiveSheet.Rows[1].RowHeight := 1.2/0.035;
            xlWorkbook.ActiveSheet.Rows[1].Font.Name := '隶书';
            xlWorkbook.ActiveSheet.Rows[1].Font.Size := 16;
            xlWorkbook.ActiveSheet.Rows[1].Font.Bold := True;
            xlWorkbook.ActiveSheet.Rows[1].Font.Color := clBlue;
            xlWorkbook.ActiveSheet.Rows[1].HorizontalAlignment := 3; //水平居中
            xlWorkbook.ActiveSheet.Rows[1].VerticalAlignment:= 2;   //垂直居中
            //按指定条件 设置单元格格式
            With TForm2.Create(Self, xlWorkbook) do
            begin
              ShowModal;
            end;
          end;
    
          //是否打开工作表提示
         { if ID_NO = Application.MessageBox('是否打开保存的结果表!', '提示', MB_YesNo) then
          begin
            Exit;
          end; }
          //显示
          xlApp.Visible := True;
        end;
    
      finally
        sdSaveName.Free;
      end;
    
    end;
    
    procedure TForm1.chkDataRangeClick(Sender: TObject);
    begin
      rgDataRange.Enabled := chkDataRange.Checked;
      if chkDataRange.Checked then rgDataRange.ItemIndex := 0;
    
    end;
    
    procedure TForm1.chkDispLabelClick(Sender: TObject);
    begin
      rgDispLabel.Enabled := chkDispLabel.Checked;
      if chkDispLabel.Checked then rgDispLabel.ItemIndex := 0;
    end;
    
    procedure TForm1.chkTitleClick(Sender: TObject);
    begin
      edtTitle.Enabled := chkTitle.Checked;
    end;
    
    procedure TForm1.cmbSheet1KeyPress(Sender: TObject; var Key: Char);
    begin
      key := #0;
    end;
    
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if not (key in ['0'..'9', #13, #8]) then key := #0;
    end;
    
    procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
    begin
      if not (key in ['0'..'9', #13, #8]) then key := #0;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i: integer;
      bmp: TBitmap;
    begin
    
      btnGetData.Caption := '提取数据';
      btnOk.Caption := '比对合并';
      sbTip.Panels[0].Text := '  ' + FormatDateTime('yyyy-mm-dd', now) + '  '+
                              FormatDateTime('ddd', now);
    
      //打开Excel
      try
        xlApp := CreateOleObject('EXCEL.Application');
      except
        ShowMessage('打开Excel文件有误或你的系统未安装Excel!');
        xlApp.Quit;
        xlApp := Unassigned;
        exit;
      end;
    
      //创建CheckBox选择框图
      FCheck := TBitmap.Create;
      FUnCheck := TBitmap.Create;
    
        //画CheckBox 选择框  (先取得系统的复选框位图)
      bmp := TBitmap.Create;
      try
        bmp.Handle := LoadBitmap(0, PChar(OBM_CHECKBOXES));
        with FUnCheck do
        begin
          width := bmp.Width div 4;
          height := bmp.Height div 3;
          Canvas.CopyRect(Canvas.ClipRect, bmp.Canvas, Canvas.ClipRect);
        end;
        with FCheck do
        begin
          width := bmp.Width div 4;
          height := bmp.Height div 3;
          Canvas.CopyRect(Canvas.ClipRect, bmp.Canvas, Rect(width, 0, 2*width, height));
        end;
      finally
        bmp.Free;
      end;
    
      //初始化控件状态
      InitControlState;
      edtTitle.Enabled := True;
      edtTitle.Text := '结果数据表';
      edtTitle.Enabled := False;
      //初始化 StringList
      slSource:= TStringList.Create;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    
      xlWorkbook := Unassigned;
    
      if not VarIsEmpty(xlApp) then
      begin
        xlApp.Quit;
        xlApp := Unassigned;
      end;
    
      FCheck.Free;
      FUnCheck.Free;
    
      slSource.Free;
    
    end;
    
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (Key = VK_F1) then
      begin
        with TForm3.Create(Self) do
        begin
          ShowModal;
        end;
      end;
    end;
    
    procedure TForm1.FormShow(Sender: TObject);
    begin
      //初始化焦点放在打开文件按钮上
      bbtnOpen1.SetFocus;
    end;
    
    procedure TForm1.sgSheet1Click(Sender: TObject);
    begin
      if TStringGrid(Sender).Row = 0  then
        if TStringGrid(Sender).Cells[TStringGrid(Sender).Col, 0] = 'y' then
           TStringGrid(Sender).Cells[TStringGrid(Sender).Col, 0] := 'n'
        else TStringGrid(Sender).Cells[TStringGrid(Sender).Col, 0] := 'y';
    end;
    
    procedure TForm1.sgSheet1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      //if not (gdFocused in State) then Exit;
    
      with TStringGrid(Sender) do
      begin
        //去除蓝色的选框
        Canvas.Brush.Color := clWindow;
        Canvas.FillRect(Rect);
        Canvas.Font.Color := clWindowText;
        Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
        //如果选中则画焦点框
        if gdFocused in State then Canvas.DrawFocusRect(Rect);
    
        if ARow = 0 then
        begin
          if Cells[ACol, ARow] = 'y' then
          begin
            Canvas.Draw(Rect.Left+2, Rect.Top+2, FCheck);
            Canvas.TextOut(Rect.Left+3+FCheck.Width, Rect.Top+2, '列输出');
          end;
    
          if Cells[ACol, ARow] = 'n' then
          begin
            Canvas.Draw(Rect.Left+2, Rect.Top+2, FUnCheck);
            Canvas.TextOut(Rect.Left+3+FCheck.Width, Rect.Top+2, '列输出');
          end;
        end;
       end;
    end;
    
    //选择单元格时,把内容显示出来
    procedure TForm1.sgSheet1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    begin
      if Arow > 0  then
      begin
        if chkDispLabel.Checked and (rgDispLabel.ItemIndex = 0) then
        begin
          edtDispLabelSheet1.ReadOnly := False;
          edtDispLabelSheet1.Text := sgSheet1.Cells[ACol, ARow]+ '['+IntToStr(ARow)+']';
          edtDispLabelSheet1.ReadOnly := True;
          RowDispLabel1 := ARow; //表一的字段所在行
        end;
    
        if chkDataRange.Checked  then
        begin
          if rgDataRange.ItemIndex = 0 then
          begin
            Edit3.ReadOnly := False;
            Edit3.Text := sgSheet1.Cells[ACol, ARow] + '['+IntToStr(ARow)+']';
            Edit3.ReadOnly := True;
            StartRowSheet1 := ARow;//表一的数据起始行
            PrimaryColSheet1 := ACol;
          end;
          if rgDataRange.ItemIndex = 1 then
          begin
            Edit4.ReadOnly := False;
            Edit4.Text := sgSheet1.Cells[ACol, ARow]+ '['+IntToStr(ARow)+']';
            Edit4.ReadOnly := True;
            EndRowSheet1 := ARow; //表一的数据结尾行
          end;
        end;
      end;
    end;
    
    procedure TForm1.sgSheet2SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    begin
      if Arow > 0  then
      begin
        if chkDispLabel.Checked and (rgDispLabel.ItemIndex = 1) then
        begin
          edtDispLabelSheet2.ReadOnly := False;
          edtDispLabelSheet2.Text := sgSheet2.Cells[ACol, ARow]+ '['+IntToStr(ARow)+']';
          edtDispLabelSheet2.ReadOnly := True;
          RowDispLabel2 := ARow; //表二的字段所在行
        end;
    
        if chkDataRange.Checked  then
        begin
          if rgDataRange.ItemIndex = 2 then
          begin
            Edit5.ReadOnly := False;
            Edit5.Text := sgSheet2.Cells[ACol, ARow] + '['+IntToStr(ACol)+','+IntToStr(ARow)+']';
            Edit5.ReadOnly := True;
            StartRowSheet2 := ARow;//表二的数据起始行
            PrimaryColSheet2 := ACol;
          end;
          if rgDataRange.ItemIndex = 3 then
          begin
            Edit6.ReadOnly := False;
            Edit6.Text := sgSheet2.Cells[ACol, ARow]+ '['+IntToStr(ARow)+']';
            Edit6.ReadOnly := True;
            EndRowSheet2 := ARow; //表二的数据结尾行
          end;
        end;
      end;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      //根据 t 值的不同动起来
      case t of
        0: sbTip.Panels[2].Alignment := taLeftJustify;
        1: sbTip.Panels[2].Alignment := taCenter;
        2: sbTip.Panels[2].Alignment := taRightJustify;
      end;
      inc(t);
      if t = 3  then  t:= 0;
    end;
    
    procedure TForm1.InitControlState;
    var
      i : integer;
    begin
      edtFile1.ReadOnly := True;
      edtFile2.ReadOnly := True;
      for i := 0 to Panel2.ControlCount - 1 do
        if Panel2.Controls[i] is TEdit then
          TEdit(Panel2.Controls[I]).ReadOnly := True;
      rgDispLabel.Enabled := False;
      rgDataRange.Enabled := False;
    
      chkDispLabel.Enabled := False;
      chkDataRange.Enabled := False;
    end;
    
    function TForm1.InvalidCheck : Boolean;
    begin
      Result := True;
      //如果数据区域未设置则提示
      if not chkDataRange.Checked then
      begin
        Result := False;
        ShowMessage('请先设置数据区域后再继续!');
        Exit;
      end
      else if (Edit3.Text='') or (Edit4.Text='') or (Edit5.Text='') or
              (Edit6.Text='') or (rgDataRange.ItemIndex <> 4) then
      begin
        Result := False;
        ShowMessage('请先把数据区域的各项参数设置完整后再继续!');
        Exit;
      end;
    
      //字段设置完整性检查
      if chkDispLabel.Checked then
      begin
        if (edtDispLabelSheet1.Text='') or (edtDispLabelSheet2.Text='') or
           (rgDispLabel.ItemIndex <> 2) then
        begin
          Result := False;
          ShowMessage('请先把字段区域的各项参数设置完整后再继续!');
          Exit;
        end;
      end;
    end;
    
    end.
    

    //主窗体文件

    object Form1: TForm1
      Left = 0
      Top = 0
      BorderIcons = [biSystemMenu, biMinimize]
      Caption = #36890#29992#28165#20876#27604#23545#21512#24182
      ClientHeight = 541
      ClientWidth = 676
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poOwnerFormCenter
      OnCreate = FormCreate
      OnDestroy = FormDestroy
      OnKeyDown = FormKeyDown
      OnShow = FormShow
      PixelsPerInch = 96
      TextHeight = 13
      object Label4: TLabel
        Left = 271
        Top = 70
        Width = 12
        Height = 39
        Caption = #24037#20316#34920
        WordWrap = True
      end
      object Label5: TLabel
        Left = 271
        Top = 295
        Width = 12
        Height = 39
        Caption = #24037#20316#34920
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
        WordWrap = True
      end
      object Label1: TLabel
        Left = 8
        Top = 56
        Width = 48
        Height = 19
        Caption = #34920#19968#65306
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clMenuHighlight
        Font.Height = -16
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
      end
      object Label2: TLabel
        Left = 5
        Top = 289
        Width = 48
        Height = 19
        Caption = #34920#20108#65306
        Color = clBtnFace
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clMenuHighlight
        Font.Height = -16
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentColor = False
        ParentFont = False
      end
      object Label3: TLabel
        Left = 13
        Top = 91
        Width = 48
        Height = 13
        Caption = #36873#25321#25991#20214
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
      end
      object Label6: TLabel
        Left = 401
        Top = 66
        Width = 80
        Height = 19
        Caption = #21442#25968#35774#32622#65306
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clMenuHighlight
        Font.Height = -16
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
      end
      object Label7: TLabel
        Left = 8
        Top = 320
        Width = 48
        Height = 13
        Caption = #36873#25321#25991#20214
      end
      object sgSheet1: TStringGrid
        Left = 5
        Top = 117
        Width = 363
        Height = 166
        DefaultDrawing = False
        FixedCols = 0
        FixedRows = 0
        Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing]
        TabOrder = 0
        OnClick = sgSheet1Click
        OnDrawCell = sgSheet1DrawCell
        OnKeyDown = FormKeyDown
        OnSelectCell = sgSheet1SelectCell
      end
      object cmbSheet1: TComboBox
        Left = 290
        Top = 88
        Width = 80
        Height = 21
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        ParentFont = False
        TabOrder = 1
        OnKeyDown = FormKeyDown
        OnKeyPress = cmbSheet1KeyPress
      end
      object Panel1: TPanel
        Left = 385
        Top = 467
        Width = 113
        Height = 44
        TabOrder = 2
        object btnGetData: TButton
          Left = 1
          Top = 1
          Width = 111
          Height = 41
          Caption = 'btnGetData'
          TabOrder = 0
          OnClick = btnGetDataClick
        end
      end
      object Panel2: TPanel
        Left = 385
        Top = 91
        Width = 283
        Height = 369
        TabOrder = 3
        object chkTitle: TCheckBox
          Left = 16
          Top = 20
          Width = 86
          Height = 17
          Caption = #36755#20986#34920#26631#39064
          TabOrder = 0
          OnClick = chkTitleClick
          OnKeyDown = FormKeyDown
        end
        object chkDispLabel: TCheckBox
          Left = 16
          Top = 62
          Width = 97
          Height = 17
          Caption = #26174#31034#23383#27573#35774#32622
          TabOrder = 1
          OnClick = chkDispLabelClick
          OnKeyDown = FormKeyDown
        end
        object chkDataRange: TCheckBox
          Left = 16
          Top = 187
          Width = 97
          Height = 17
          Caption = #25968#25454#21306#22495#35774#32622
          TabOrder = 2
          OnClick = chkDataRangeClick
          OnKeyDown = FormKeyDown
        end
        object rgDispLabel: TRadioGroup
          Left = 16
          Top = 81
          Width = 170
          Height = 81
          Items.Strings = (
            #34920#19968#23383#27573#25152#22312#34892#65288#20219#24847#21015#65289
            #34920#20108#23383#27573#25152#22312#34892#65288#20219#24847#21015#65289
            #23383#27573#35774#32622#23436#25104)
          TabOrder = 3
        end
        object edtDispLabelSheet1: TEdit
          Left = 187
          Top = 97
          Width = 89
          Height = 21
          ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
          TabOrder = 4
          OnKeyDown = FormKeyDown
        end
        object rgDataRange: TRadioGroup
          Left = 16
          Top = 205
          Width = 169
          Height = 148
          Items.Strings = (
            #34920#19968#36215#22987#34892#65288#20851#38190#21015#65289
            #34920#19968#32467#23614#34892#65288#20219#24847#21015#65289
            #34920#20108#36215#22987#34892#65288#20851#38190#21015#65289
            #34920#20108#32467#23614#34892#65288#20219#24847#21015#65289
            #25968#25454#21306#22495#35774#32622#23436#25104)
          TabOrder = 5
        end
        object edtDispLabelSheet2: TEdit
          Left = 186
          Top = 121
          Width = 89
          Height = 21
          ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
          TabOrder = 6
          OnKeyDown = FormKeyDown
        end
        object Edit3: TEdit
          Left = 186
          Top = 222
          Width = 89
          Height = 21
          ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
          TabOrder = 7
          OnKeyDown = FormKeyDown
        end
        object Edit4: TEdit
          Left = 186
          Top = 246
          Width = 89
          Height = 21
          ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
          TabOrder = 8
          OnKeyDown = FormKeyDown
        end
        object Edit5: TEdit
          Left = 186
          Top = 272
          Width = 89
          Height = 21
          ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
          TabOrder = 9
          OnKeyDown = FormKeyDown
        end
        object Edit6: TEdit
          Left = 186
          Top = 298
          Width = 89
          Height = 21
          ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
          TabOrder = 10
          OnKeyDown = FormKeyDown
        end
        object edtTitle: TEdit
          Left = 107
          Top = 18
          Width = 170
          Height = 21
          ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
          TabOrder = 11
          OnKeyDown = FormKeyDown
        end
      end
      object Panel3: TPanel
        Left = 544
        Top = 470
        Width = 124
        Height = 41
        TabOrder = 4
        object btnOk: TButton
          Left = 1
          Top = 1
          Width = 122
          Height = 40
          Caption = 'btnOk'
          TabOrder = 0
          OnClick = btnOkClick
        end
      end
      object Panel4: TPanel
        Left = 0
        Top = 0
        Width = 676
        Height = 49
        Align = alTop
        BevelKind = bkTile
        BorderWidth = 2
        BorderStyle = bsSingle
        Caption = #36890#29992'EXCEL'#28165#20876#25968#25454#27604#23545#21512#24182#31995#32479'   V0.1'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clTeal
        Font.Height = -21
        Font.Name = 'Tahoma'
        Font.Style = [fsBold]
        ParentFont = False
        TabOrder = 5
      end
      object edtFile1: TEdit
        Left = 65
        Top = 88
        Width = 141
        Height = 21
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        TabOrder = 6
        OnKeyDown = FormKeyDown
      end
      object bbtnOpen1: TBitBtn
        Left = 204
        Top = 87
        Width = 47
        Height = 25
        Caption = #25171#24320
        Default = True
        DoubleBuffered = True
        Glyph.Data = {
          E6040000424DE604000000000000360000002800000014000000140000000100
          180000000000B0040000232E0000232E00000000000000000001FFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6
          E7D852A75D67B3758FC79DB4D9BED5EBDCF0F7F2FFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85B68A0080
          18007B0C008019008221008E32109B472BAB614DBA7D72CB9A98DBB8BCE8D1DC
          F2E6F8FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5196572B9142008923
          00903100983B009D4000A14500A54A00A74B00A34800A74E00AC5802B0602DBE
          7DF0FAF5FFFFFFFFFFFFFFFFFFFFFFFFFDFDFD207B28368F4602913100933500
          9B3F00A34900AA5300B25C01B96805BB6E06B66908B96E03B96D00B86BCCF1E2
          FFFFFFFFFFFFFFFFFFFFFFFFEBF2EC036B0D2C833616994500993900A44A00AF
          5900B96803C3790AC47E0DC47F10C48012C48013C6840BC784A9ECD6FFFFFFFF
          FFFFFFFFFFFFFFFFD2E2D30062001976202E9D54009A3B03A95015B35D1EC06F
          12CB8614D59C17D09517CE911DD39B1ED6A020DAA689EDD3FFFFFFFFFFFFFFFF
          FFFFFFFFB4D0B60065000574103C9C57009B3E05A95121B46130C0752DCD8E17
          D8A222DEAE26DEAD2DE3B632E8C046F0CE82F9E4FDFEFEFFFFFFFFFFFFFFFFFF
          93BE97006700006F05439A551A9A50009A4108A65410AD5E16B9760DCF9624E1
          B131E8BF3CEECB42F4D462FBE37CFEEDECFCFAFFFFFFFFFFFFFFFFFF70AA7600
          650000730D0D892E59B48066A76C87AD788AA86D76C49750D1AA1EDAAB30EBC1
          3FF1CE47F7D871FEEA78FFF0D0FDF7FFFFFFFFFFFFFFFFFF4F96550164000473
          10017E1B049032717719DD8D3DD57C107FB8775CCA927CD5B01FDEB431E4BF3D
          EACB60F1DB61F5E0AFF9EEFFFFFFFFFFFFFFFFFF30863A726000A4711FA77F2E
          B08832B88531CA9A44C68E16CFA454BF8B30D5A56693CFB466DBBF78DFC8B6ED
          E3C8F6EEEBFDFAFFFFFFFFFFFFF2F7F71C81239E6D04CD903FC68C18D6A324DA
          AE2BD2A321C99213CE8A0EC7800BBC5B00A2B07A43FEE055E3BFFFFCFDFFFFFF
          FFFFFFFFFFFFFFFFFFDCEAE10A760F92760ECD8C3DBF8114CB9C28D5AE37DCB3
          2ADDB52ACBBF58B2AF59ACA5607CDFBB2BF7D559DEBDFFFEFEFFFFFFFFFFFFFF
          FFFFFFFFFFC5DAC7006D020A780F3A934030A2532CAA5AB3913EE0AA3DD4B43E
          2ED8AC0DD3A215D5AA17CFA40CC09281DAC1FFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFA2C4A400630000710B00760F00801E00811EB68220D5992DB8A33C18B0752E
          B37E60C7A28DD8C0B6E7D8F6FCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86AF88
          0045000058000D6A182C88435D974FC28724B27408C29E51EEF8F4FFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3EAE3AAC2AAC7
          D8C7EAF0EAFFFFFFFFEAD5C18B2BA66D1BD0B286FFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFEFDF7F1E7F8F7F5FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFF}
        ModalResult = 6
        ParentDoubleBuffered = False
        Spacing = 1
        TabOrder = 7
        OnClick = bbtnOpen1Click
        OnKeyDown = FormKeyDown
      end
      object cmbSheet2: TComboBox
        Left = 290
        Top = 314
        Width = 82
        Height = 21
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        ParentFont = False
        TabOrder = 8
        OnKeyDown = FormKeyDown
        OnKeyPress = cmbSheet1KeyPress
      end
      object edtFile2: TEdit
        Left = 65
        Top = 314
        Width = 141
        Height = 21
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        TabOrder = 9
      end
      object bbtnOpen2: TBitBtn
        Left = 204
        Top = 312
        Width = 47
        Height = 25
        Margins.Left = 1
        Margins.Top = 1
        Margins.Right = 1
        Margins.Bottom = 1
        Caption = #25171#24320
        DoubleBuffered = True
        Glyph.Data = {
          E6040000424DE604000000000000360000002800000014000000140000000100
          180000000000B0040000232E0000232E00000000000000000001FFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6
          E7D852A75D67B3758FC79DB4D9BED5EBDCF0F7F2FFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85B68A0080
          18007B0C008019008221008E32109B472BAB614DBA7D72CB9A98DBB8BCE8D1DC
          F2E6F8FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5196572B9142008923
          00903100983B009D4000A14500A54A00A74B00A34800A74E00AC5802B0602DBE
          7DF0FAF5FFFFFFFFFFFFFFFFFFFFFFFFFDFDFD207B28368F4602913100933500
          9B3F00A34900AA5300B25C01B96805BB6E06B66908B96E03B96D00B86BCCF1E2
          FFFFFFFFFFFFFFFFFFFFFFFFEBF2EC036B0D2C833616994500993900A44A00AF
          5900B96803C3790AC47E0DC47F10C48012C48013C6840BC784A9ECD6FFFFFFFF
          FFFFFFFFFFFFFFFFD2E2D30062001976202E9D54009A3B03A95015B35D1EC06F
          12CB8614D59C17D09517CE911DD39B1ED6A020DAA689EDD3FFFFFFFFFFFFFFFF
          FFFFFFFFB4D0B60065000574103C9C57009B3E05A95121B46130C0752DCD8E17
          D8A222DEAE26DEAD2DE3B632E8C046F0CE82F9E4FDFEFEFFFFFFFFFFFFFFFFFF
          93BE97006700006F05439A551A9A50009A4108A65410AD5E16B9760DCF9624E1
          B131E8BF3CEECB42F4D462FBE37CFEEDECFCFAFFFFFFFFFFFFFFFFFF70AA7600
          650000730D0D892E59B48066A76C87AD788AA86D76C49750D1AA1EDAAB30EBC1
          3FF1CE47F7D871FEEA78FFF0D0FDF7FFFFFFFFFFFFFFFFFF4F96550164000473
          10017E1B049032717719DD8D3DD57C107FB8775CCA927CD5B01FDEB431E4BF3D
          EACB60F1DB61F5E0AFF9EEFFFFFFFFFFFFFFFFFF30863A726000A4711FA77F2E
          B08832B88531CA9A44C68E16CFA454BF8B30D5A56693CFB466DBBF78DFC8B6ED
          E3C8F6EEEBFDFAFFFFFFFFFFFFF2F7F71C81239E6D04CD903FC68C18D6A324DA
          AE2BD2A321C99213CE8A0EC7800BBC5B00A2B07A43FEE055E3BFFFFCFDFFFFFF
          FFFFFFFFFFFFFFFFFFDCEAE10A760F92760ECD8C3DBF8114CB9C28D5AE37DCB3
          2ADDB52ACBBF58B2AF59ACA5607CDFBB2BF7D559DEBDFFFEFEFFFFFFFFFFFFFF
          FFFFFFFFFFC5DAC7006D020A780F3A934030A2532CAA5AB3913EE0AA3DD4B43E
          2ED8AC0DD3A215D5AA17CFA40CC09281DAC1FFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFA2C4A400630000710B00760F00801E00811EB68220D5992DB8A33C18B0752E
          B37E60C7A28DD8C0B6E7D8F6FCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86AF88
          0045000058000D6A182C88435D974FC28724B27408C29E51EEF8F4FFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3EAE3AAC2AAC7
          D8C7EAF0EAFFFFFFFFEAD5C18B2BA66D1BD0B286FFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFEFDF7F1E7F8F7F5FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
          FFFFFFFFFFFFFFFFFFFF}
        ParentDoubleBuffered = False
        TabOrder = 10
        OnClick = bbtnOpen2Click
        OnKeyDown = FormKeyDown
      end
      object sgSheet2: TStringGrid
        Left = 8
        Top = 339
        Width = 363
        Height = 166
        DefaultDrawing = False
        FixedCols = 0
        FixedRows = 0
        Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing]
        TabOrder = 11
        OnClick = sgSheet1Click
        OnDrawCell = sgSheet1DrawCell
        OnKeyDown = FormKeyDown
        OnSelectCell = sgSheet2SelectCell
      end
      object sbTip: TStatusBar
        Left = 0
        Top = 517
        Width = 676
        Height = 24
        Color = clMoneyGreen
        Panels = <
          item
            Width = 150
          end
          item
            Alignment = taCenter
            BiDiMode = bdLeftToRight
            ParentBiDiMode = False
            Text = '  CopyRight By ZongQingHong    QQ:175624411'
            Width = 300
          end
          item
            Alignment = taCenter
            Text = #25353' F1 '#26597#30475#20351#29992#24110#21161
            Width = 50
          end>
        SizeGrip = False
      end
      object odFile1: TOpenDialog
        Left = 176
        Top = 152
      end
      object odFile2: TOpenDialog
        Left = 200
        Top = 384
      end
      object Timer1: TTimer
        OnTimer = Timer1Timer
        Left = 528
        Top = 56
      end
    end
    

    //格式设置单元文件

    unit Unit2;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, CheckLst;
    
    type
      TForm2 = class(TForm)
        chklist: TCheckListBox;
        cmbStyle: TComboBox;
        btnSet: TButton;
        Label1: TLabel;
        Label2: TLabel;
        procedure chklistClickCheck(Sender: TObject);
        procedure cmbStyleChange(Sender: TObject);
        procedure btnSetClick(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure chklistClick(Sender: TObject);
    
      private
        { Private declarations }
    
      public
        { Public declarations }
        //Constructor Create(AOwner: TComponent; sFileName: string); reintroduce;
        Constructor Create(AOwner: TComponent; AxlBook: Variant); reintroduce;
      end;
    
    var
      Form2: TForm2;
    
    implementation
    
    {$R *.dfm}
    
    uses ComObj;
    
    var
      arrCheck, arrStyle: array of Byte;  //复选框状态和设置风格数据
      tmpxlBook: Variant;
      rCount, cCount: Cardinal;
    
    procedure TForm2.btnSetClick(Sender: TObject);
    var
      i, j : integer;
    begin
      for I := 0 to chkList.Items.Count - 1 do
      begin
       //如果选中了列,且设置格式为文本
        if (arrCheck[i] = 1) and (arrStyle[i] = 1) then
        begin
          for j := 2 to rCount do
            tmpxlBook.ActiveSheet.Cells[j, i+1].NumberFormatLocal := '000000';
        end;
      end;
      ShowMessage('格式设置完成');
      ModalResult := 1;
    end;
    
    procedure TForm2.chklistClick(Sender: TObject);
    begin
      cmbStyle.ItemIndex := arrStyle[chkList.ItemIndex];
    end;
    
    procedure TForm2.chklistClickCheck(Sender: TObject);
    begin
      arrCheck[chkList.ItemIndex] := Byte(chkList.State[chkList.ItemIndex]);
    end;
    
    procedure TForm2.cmbStyleChange(Sender: TObject);
    begin
      if arrCheck[chkList.ItemIndex] = 1 then
         arrStyle[chkList.ItemIndex] := cmbStyle.ItemIndex;
    end;
    
    Constructor TForm2.Create(AOwner: TComponent; AxlBook: Variant);
    var
      i: integer;
    begin
      inherited Create(AOwner);
    
      tmpxlBook := AxlBook;
    
      cCount := tmpxlBook.ActiveSheet.UsedRange.Columns.Count;
      rCount := tmpxlBook.ActiveSheet.UsedRange.Rows.Count;
    
      //chkList.Clear;
      for I := 0 to cCount - 1 do
      begin
        chkList.Items.Add(tmpxlBook.ActiveSheet.Cells[2,I+1].Value);
      end;
    
      SetLength(arrCheck, cCount);
      SetLength(arrStyle, cCount);
    
      for i := Low(arrCheck) to High(arrCheck) do
        arrCheck[i] := Byte(chkList.State[i]);
    
      for i := Low(arrStyle) to High(arrStyle) do
        arrStyle[i] := 0;
    
      btnSet.Caption := '设置';
    end;
    
    procedure TForm2.FormDestroy(Sender: TObject);
    begin
      //tmpxlBook.Close;
      tmpxlBook := UnAssigned;
    end;
    
    end.
    

    //格式设置窗体文件

    object Form2: TForm2
      Left = 0
      Top = 0
      BorderIcons = [biSystemMenu, biMinimize]
      Caption = #26684#24335#35774#32622
      ClientHeight = 243
      ClientWidth = 346
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poMainFormCenter
      OnDestroy = FormDestroy
      PixelsPerInch = 96
      TextHeight = 13
      object Label1: TLabel
        Left = 8
        Top = 11
        Width = 117
        Height = 13
        Caption = #36873#25321#35201#35774#32622#30340#23383#27573#21015
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = [fsBold]
        ParentFont = False
      end
      object Label2: TLabel
        Left = 184
        Top = 13
        Width = 52
        Height = 13
        Caption = #36873#25321#26684#24335
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = [fsBold]
        ParentFont = False
      end
      object chklist: TCheckListBox
        Left = 8
        Top = 32
        Width = 161
        Height = 203
        OnClickCheck = chklistClickCheck
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        ItemHeight = 13
        TabOrder = 0
        OnClick = chklistClick
      end
      object cmbStyle: TComboBox
        Left = 184
        Top = 32
        Width = 145
        Height = 21
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        TabOrder = 1
        Text = #40664#35748
        OnChange = cmbStyleChange
        Items.Strings = (
          #40664#35748
          #25991#26412)
      end
      object btnSet: TButton
        Left = 216
        Top = 184
        Width = 89
        Height = 51
        Caption = 'btnSet'
        TabOrder = 2
        OnClick = btnSetClick
      end
    end
    

    //使用帮助单元文件

    unit Unit3;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
    
    type
      TForm3 = class(TForm)
        lbHelp: TListBox;
        procedure lbHelpKeyPress(Sender: TObject; var Key: Char);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form3: TForm3;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm3.lbHelpKeyPress(Sender: TObject; var Key: Char);
    begin
      key := #0;
    end;
    
    end.
    

    //使用帮助窗体文件

    object Form3: TForm3
      Left = 0
      Top = 0
      BorderIcons = [biSystemMenu]
      Caption = #36719#20214#20351#29992#24110#21161
      ClientHeight = 347
      ClientWidth = 537
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poOwnerFormCenter
      PixelsPerInch = 96
      TextHeight = 13
      object lbHelp: TListBox
        Left = 0
        Top = 0
        Width = 537
        Height = 340
        BevelKind = bkFlat
        Color = clSkyBlue
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -16
        Font.Name = #21326#25991#26999#20307
        Font.Style = []
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        IntegralHeight = True
        Items.Strings = (
          '    '#20449#24687#21270#26102#20195#65292#21150#20844#30005#23376#21270#24050#25104#20102#27599#20010#37096#38376#21333#20301#19981#21487#25110#32570#30340#32452#25104#37096#20998#65292
          #20854#20013#20063#20813#19981#20102#35201#32463#24120#20351#29992#24494#36719#30340'EXCEL'#30005#23376#34920#26684#65292#36890#36807#23545#30005#23376#34920#26684#30340#28789
          #27963#36816#29992#65292#26497#22823#26041#20415#21644#25552#39640#20102#21150#20844#25928#29575#12290
          '    '#22312#20855#20307#24037#20316#20013#65292#32463#24120#20250#30896#21040#20004#24352#30005#23376#34920#26684#30340#27604#23545#25110#21512#24182#38382#39064#12290#21363#20320#25152
          #38656#35201#30340#20449#24687#24448#24448#26159#22312#20004#24352#19981#21516#30340#34920#26684#20013#12290#22914#26524#35201#25163#24037#25226#20004#24352#34920#26684#30340#20869#23481
          #26681#25454#26576#20010#20851#38190#23383#27573#27604#23545#25110#21512#24182#22312#19968#36215#65292#23558#20250#28040#32791#24744#22823#37327#23453#36149#30340#26102#38388#21644#31934
          #21147#12290#20026#27492#65292#20316#32773#19987#38376#32534#20889#20102#19968#20010#36890#29992#30340'EXCEL'#28165#20876#27604#23545#21512#24182#36719#20214#65292#26469#25552
          #39640#25928#29575#65292#24182#25226#23427#20998#20139#32473#27599#19968#20301#38656#35201#30340#26379#21451#12290#22823#23478#22914#26524#22312#20351#29992#20013#21457#29616#38382#39064
          #25110#26377#26356#22909#30340#24314#35758#21487#20197#32852#31995'QQ'#65306'175624411'#65292'EMAIL'#65306'zjdyzqh@163.com'#65292
          #25105#23558#23613#21147#20104#20197#21560#32435#25913#21892#35813#36719#20214#31995#32479#12290
          #25805#20316#20351#29992#35828#26126#65306
          '    '#27493#39588'1'#65306#22312#34920#19968#65292#36873#25321#35201#25805#20316#30340'EXCEL'#25991#20214#65292#21518#36873#25321#20854#20013#30340#19968#24352#30005#23376#34920
          #20316#20026#34920#19968#12290
          '    '#27493#39588'2'#65306#22312#34920#20108#65292#36873#25321#35201#25805#20316#30340'EXCEL'#25991#20214#65292#21518#20877#36873#25321#30456#24212#30340#30005#23376#34920
          #20316#20026#34920#20108#12290
          '    '#27493#39588'3'#65306#23436#25104'1'#12289'2'#27493#21518#65292#28857#8220#33719#21462#25968#25454#8221#25353#38062#65292#21462#24471#20004#24352#30005#23376#34920#30340#25968#25454#12290
          '    '#27493#39588'4'#65306#36827#34892#21442#25968#35774#32622#65288#24517#39035#35774#32622#65289
          '    '#65288'1'#65289#33509#35201#35774#32622#36755#20986#30005#23376#34920#30340#26631#39064#65292#21017#21246#36873#8220#26631#39064#8221#22797#36873#26694#65292#21363#21487#36755#20837#12290
          '    '#65288'2'#65289#33509#35201#36755#20986#23383#27573#26174#31034#26631#31614#65292#21017#21246#36873#8220#23383#27573#26631#31614#8221#22797#36873#26694#21518#65292#36873#20013
          #8220#34920#19968' '#30340#23383#27573#21517#25152#22312#34892#65288#20219#24847#21015#65289#8221#36873#39033#65292#20877#28857#30005#23376#34920#19968#30340#23383#27573#25152#22312#34892#12290
          ' '#36873#20013#8220#34920#20108#30340#23383#27573#21517#25152#22312#34892#65288#20219#24847#21015#65289#8221#36873#39033#65292#20877#28857#34920#20108#30340#23383#27573#25152#22312#34892#12290
          ' '#35774#32622#23436#25104#21518#65292#19968#23450#35201#36873#20013#8220#35774#32622#23436#25104#8221#36873#39033#12290
          '    '#65288'3'#65289#21246#36873#8220#25968#25454#21306#22495#35774#32622#8221#22797#36873#26694#21518#65292#36873#20013#8220#34920#19968#30340#25968#25454#36215#22987#34892
          #65288#20851#38190#21015#65289#8221'  '#36873#39033#65292#20877#28857#20987#34920#19968#20013#20851#38190#21015#30340#31532#19968#34892#25968#25454#65307#20854#20182#36873#39033#35774#32622
          #21516#12290#35774#32622#23436#25104#21518#65292#19968#23450#35201#36873#20013#8220#25968#25454#35774#32622#23436#25104#8221#36873#39033#12290
          '    '#27493#39588'5'#65306
          '    '#65288'1'#65289#28857#20987#8220#27604#23545#21512#24182#8221#25353#38062#65292#25353#25552#31034#36755#20837#25991#20214#21517#21518#20445#23384#12290
          '    '#65288'2'#65289#25552#31034#26159#21542#35201#35774#32622#29983#25104#30340#32467#26524#34920#30340#26684#24335#12290#65371#28857#20987#8220#26159#8221#65292#26174#31034#35774#32622
          #31383#21475#12290' '#22914#26524#26377#23383#27573#26174#31034#21517#65292#20250#26174#31034#25152#26377#30340#23383#27573#65292#21487#26681#25454#38656#35201#35774#32622#21508#23383#27573
          #30340#25991#26412#23646#24615#65288#20165#25552#20379#26368#24120#29992#30340#25991#26412#26684#24335#26174#31034#25968#23383#21151#33021#65289#65307#22914#26524#26080#23383#27573#26174
          #31034#21517#65292#21017#26174#31034#31532#19968#34892#30340#21508#21015#25968#25454#20869#23481#65292#25805#20316#21516#21069#12290#65373)
        ParentFont = False
        TabOrder = 0
        OnKeyPress = lbHelpKeyPress
      end
    end 
  • 相关阅读:
    c++ 队列
    17:特殊类成员:函数指针5
    c++ deque 双端队列
    18:字符串-char型字符串
    c++ 16 this 和 继承 及继承机制中的构造函数 与 析构函数
    c++ string char* const char*
    c++ 小片段
    google protobuf 使用示例
    hibernate-cache
    hibernate-criteria查询(二)
  • 原文地址:https://www.cnblogs.com/boltwolf/p/2108134.html
Copyright © 2020-2023  润新知