zoukankan      html  css  js  c++  java
  • 通用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 
  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/boltwolf/p/2108134.html
Copyright © 2011-2022 走看看