⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fuqimport2xlsrangeedit.pas

📁 EMS Advanced.Import.Component.Suite.v2.43
💻 PAS
字号:
unit fuQImport2XLSRangeEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, XLSMapParser, XLSUtily, ExtCtrls, XLSFile;

type
  TfmQImport2XLSRangeEdit = class(TForm)
    gbRangeType: TGroupBox;
    laColRowCell: TLabel;
    edColRowCell: TEdit;
    gbFinishCondition: TGroupBox;
    rbFinishColRow: TRadioButton;
    rbFinishData: TRadioButton;
    edFinishColRow: TEdit;
    gbSheetType: TGroupBox;
    rbDefaultSheet: TRadioButton;
    rbCustomSheet: TRadioButton;
    bCancel: TButton;
    bOk: TButton;
    paCustomSheet: TPanel;
    rbSheetNumber: TRadioButton;
    edSheetNumber: TComboBox;
    rbSheetName: TRadioButton;
    edSheetName: TComboBox;
    cbRangeType: TComboBox;
    gbStartCondition: TGroupBox;
    rbStartData: TRadioButton;
    rbStartColRow: TRadioButton;
    edStartColRow: TEdit;
    rgDirection: TRadioGroup;
    procedure bOkClick(Sender: TObject);
    procedure UpdateControls(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FRange: TMapRange;
    procedure FillData;
    procedure LoadData;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

function EditRange(Range: TMapRange; XLSFile: TXLSFile): boolean;

implementation

uses {$IFDEF WIN32}QImport2StrIDs{$ENDIF}
     {$IFDEF LINUX}QImport2Consts{$ENDIF}, QImport2;

{$R *.DFM}

function EditRange(Range: TMapRange; XLSFile: TXLSFile): boolean;
var
  i: integer;
begin
  with TfmQImport2XLSRangeEdit.Create(nil) do
  try
    FRange.Assign(Range);
    for i := 0 to XLSFile.Workbook.WorkSheets.Count - 1 do begin
      edSheetNumber.Items.Add(IntToStr(i + 1));
      edSheetName.Items.Add(XLSFile.Workbook.WorkSheets[i].Name);
    end;
    FillData;
    Result := ShowModal = mrOk;
    if Result then Range.Assign(FRange);
  finally
    Free;
  end;
end;

{ TfmQImport2XLSRangeEdit }

constructor TfmQImport2XLSRangeEdit.Create(AOwner: TComponent);
begin
  inherited;
  FRange := TMapRange.Create(nil);
end;

destructor TfmQImport2XLSRangeEdit.Destroy;
begin
  FRange.Free;
  inherited;
end;

procedure TfmQImport2XLSRangeEdit.FillData;
begin
  FRange.Update;
  cbRangeType.ItemIndex := Integer(FRange.RangeType);

  case FRange.RangeType of
    rtCell:
      edColRowCell.Text := Col2Letter(FRange.Col1) + Row2Number(FRange.Row1);
    rtCol: begin
      edColRowCell.Text := Col2Letter(FRange.Col1);
      rbStartData.Checked := FRange.Row1 = 0;
      rbStartColRow.Checked := FRange.Row1 > 0;
      if rbStartColRow.Checked
        then edStartColRow.Text := Row2Number(FRange.Row1)
        else edStartColRow.Text := EmptyStr;
      rbFinishData.Checked := FRange.Row2 = 0;
      rbFinishColRow.Checked := FRange.Row2 > 0;
      if rbFinishColRow.Checked
        then edFinishColRow.Text := Row2Number(FRange.Row2)
        else edFinishColRow.Text := EmptyStr;
      if (FRange.Row1 = 0) or (FRange.Row2 = 0) then
        rgDirection.ItemIndex := Integer(FRange.Direction);
    end;
    rtRow: begin
      edColRowCell.Text := Row2Number(FRange.Row1);
      rbStartData.Checked := FRange.Col1 = 0;
      rbStartColRow.Checked := FRange.Col1 > 0;
      if rbStartColRow.Checked
        then edStartColRow.Text := Col2Letter(FRange.Col1)
        else edStartColRow.Text := EmptyStr;
      rbFinishData.Checked := FRange.Col2 = 0;
      rbFinishColRow.Checked := FRange.Col2 > 0;
      if rbFinishColRow.Checked
        then edFinishColRow.Text := Col2Letter(FRange.Col2)
        else edFinishColRow.Text := EmptyStr;
      if (FRange.Col1 = 0) or (FRange.Col2 = 0) then
        rgDirection.ItemIndex := Integer(FRange.Direction);
    end;
  end;

  rbDefaultSheet.Checked := FRange.SheetIDType = sitUnknown;
  rbCustomSheet.Checked := FRange.SheetIDType <> sitUnknown;
  rbSheetNumber.Checked := FRange.SheetIDType = sitNumber;
  edSheetNumber.ItemIndex := edSheetNumber.Items.IndexOf(IntToStr(FRange.SheetNumber));
  rbSheetName.Checked := FRange.SheetIDType = sitName;
  edSheetName.ItemIndex := edSheetName.Items.IndexOf(FRange.SheetName);
end;

procedure TfmQImport2XLSRangeEdit.LoadData;
var
  C, R: integer;
  N: string;
begin
  case TRangeType(cbRangeType.ItemIndex) of
    rtCol: begin
      try
        ParseColString(edColRowCell.Text, C);
      except
        edColRowCell.SetFocus;
        raise;
      end;
      FRange.Col1 := C;
      FRange.Col2 := C;

      if rbStartColRow.Checked then begin
        try
          ParseRowString(edStartColRow.Text, R);
        except
          edStartColRow.SetFocus;
          raise;
        end;
        FRange.Row1 := R;
      end
      else FRange.Row1 := 0;

      if rbFinishColRow.Checked then begin
        try
          ParseRowString(edFinishColRow.Text, R);
        except
          edFinishColRow.SetFocus;
          raise;
        end;
        FRange.Row2 := R;
      end
      else FRange.Row2 := 0;

      if (FRange.Row1 = 0) or (FRange.Row2 = 0) then
        FRange.Direction := TRangeDirection(rgDirection.ItemIndex)
      else if FRange.Row1 < FRange.Row2 then
        FRange.Direction := rdDown
      else if FRange.Row1 > FRange.Row2 then
        FRange.Direction := rdUp
      else if (FRange.Row1 = FRange.Row2) and (FRange.Row1 > 1) then begin
        FRange.Direction := rdUnknown;
        FRange.Update;
      end;
    end;
    rtRow: begin
      try
        ParseRowString(edColRowCell.Text, R);
      except
        edColRowCell.SetFocus;
        raise;
      end;
      FRange.Row1 := R;
      FRange.Row2 := R;

      if rbStartColRow.Checked then begin
        try
          ParseColString(edStartColRow.Text, C);
        except
          edStartColRow.SetFocus;
          raise;
        end;
        FRange.Col1 := C;
      end
      else FRange.Col1 := 0;

      if rbFinishColRow.Checked then begin
        try
          ParseColString(edFinishColRow.Text, C);
        except
          edFinishColRow.SetFocus;
          raise;
        end;
        FRange.Col2 := C;
      end
      else FRange.Col2 := 0;

      if (FRange.Col1 = 0) or (FRange.Col2 = 0) then
        FRange.Direction := TRangeDirection(rgDirection.ItemIndex)
      else if FRange.Col1 < FRange.Col2 then
        FRange.Direction := rdDown
      else if FRange.Col1 > FRange.Col2 then
        FRange.Direction := rdUp
      else if (FRange.Col1 = FRange.Col2) and (FRange.Col1 > 1) then begin
        FRange.Direction := rdUnknown;
        FRange.Update;
      end;
    end;
    rtCell: begin
      try
        ParseCellString(edColRowCell.Text, C, R);
      except
        edColRowCell.SetFocus;
        raise;
      end;
      FRange.Col1 := C;
      FRange.Row1 := R;
      FRange.Col2 := C;
      Frange.Row2 := R;
      FRange.Direction := rdUnknown;
    end;
  end;

  if rbDefaultSheet.Checked then begin
    FRange.SheetIDType := sitUnknown;
    FRange.SheetNumber := 0;
    FRange.SheetName := EmptyStr;
  end
  else if rbCustomSheet.Checked then begin
    if rbSheetNumber.Checked then begin
      FRange.SheetIDType := sitNumber;
      ParseSheetNumber(edSheetNumber.Text, C);
      FRange.SheetNumber := C;
      FRange.SheetName := EmptyStr;
    end
    else if rbSheetName.Checked then begin
      FRange.SheetIDType := sitName;
      ParseSheetName(edSheetName.Text, N);
      FRange.SheetNumber := 0;
      FRange.SheetName := N;
    end;
  end;
end;

procedure TfmQImport2XLSRangeEdit.UpdateControls(Sender: TObject);
var
  IsColRow: boolean;
begin
  case TRangeType(cbRangeType.ItemIndex) of
    rtCol: begin
      laColRowCell.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType_Col){$ENDIF}
                              {$IFDEF LINUX}QIRE_RangeType_Col{$ENDIF};
      rbStartColRow.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Start_Row){$ENDIF}
                               {$IFDEF LINUX}QIRE_Start_Row{$ENDIF};
      rbFinishColRow.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Finish_Row){$ENDIF}
                                {$IFDEF LINUX}QIRE_Finish_Row{$ENDIF};
      rgDirection.Items[0] := {$IFDEF WIN32}QImportLoadStr(QIRE_Direction_Down){$ENDIF}
                              {$IFDEF LINUX}QIRE_Direction_Down{$ENDIF};
      rgDirection.Items[1] := {$IFDEF WIN32}QImportLoadStr(QIRE_Direction_Up){$ENDIF}
                              {$IFDEF LINUX}QIRE_Direction_Up{$ENDIF};
    end;
    rtRow: begin
      laColRowCell.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType_Row){$ENDIF}
                              {$IFDEF LINUX}QIRE_RangeType_Row{$ENDIF};
      rbStartColRow.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Start_Col){$ENDIF}
                               {$IFDEF LINUX}QIRE_Start_Col{$ENDIF};
      rbFinishColRow.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Finish_Col){$ENDIF}
                                {$IFDEF LINUX}QIRE_Finish_Col{$ENDIF};
      rgDirection.Items[0] := {$IFDEF WIN32}QImportLoadStr(QIRE_Direction_Right){$ENDIF}
                              {$IFDEF LINUX}QIRE_Direction_Right{$ENDIF};
      rgDirection.Items[1] := {$IFDEF WIN32}QImportLoadStr(QIRE_Direction_Left){$ENDIF}
                              {$IFDEF LINUX}QIRE_Direction_Left{$ENDIF};
    end;
    rtCell: laColRowCell.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType_Cell){$ENDIF}
                                    {$IFDEF LINUX}QIRE_RangeType_Cell{$ENDIF};
  end;

  IsColRow := TRangeType(cbRangeType.ItemIndex) in [rtCol, rtRow];

  rbStartData.Enabled := IsColRow;
  rbStartColRow.Enabled := IsColRow;
  edStartColRow.Enabled := IsColRow and rbStartColRow.Checked;

  rbFinishData.Enabled := IsColRow;
  rbFinishColRow.Enabled := IsColRow;
  edFinishColRow.Enabled := IsColRow and rbFinishColRow.Checked;

  rgDirection.Enabled := IsColRow and
    (rbStartData.Checked or rbFinishData.Checked);

  rbDefaultSheet.Enabled := IsColRow;
  rbCustomSheet.Enabled := IsColRow;
  rbSheetNumber.Enabled := IsColRow and rbCustomSheet.Checked;
  edSheetNumber.Enabled := IsColRow and rbCustomSheet.Checked and
    rbSheetNumber.Checked;
  rbSheetName.Enabled := IsColRow and rbCustomSheet.Checked;
  edSheetName.Enabled := IsColRow and rbCustomSheet.Checked and
    rbSheetName.Checked;
end;

procedure TfmQImport2XLSRangeEdit.bOkClick(Sender: TObject);
begin
  LoadData;
  ModalResult := mrOk;
end;

procedure TfmQImport2XLSRangeEdit.FormCreate(Sender: TObject);
begin
  Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Caption){$ENDIF}
             {$IFDEF LINUX}QIRE_Caption{$ENDIF};
  gbRangeType.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType){$ENDIF}
                         {$IFDEF LINUX}QIRE_RangeType{$ENDIF};
  cbRangeType.Items[0] := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType_Col){$ENDIF}
                          {$IFDEF LINUX}QIRE_RangeType_Col{$ENDIF};
  cbRangeType.Items[1] := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType_Row){$ENDIF}
                          {$IFDEF LINUX}QIRE_RangeType_Row{$ENDIF};
  cbRangeType.Items[2] := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType_Cell){$ENDIF}
                          {$IFDEF LINUX}QIRE_RangeType_Cell{$ENDIF};
  laColRowCell.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_RangeType_Col){$ENDIF}
                          {$IFDEF LINUX}QIRE_RangeType_Col{$ENDIF};
  gbStartCondition.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Start){$ENDIF}
                              {$IFDEF LINUX}QIRE_Start{$ENDIF};
  rbStartData.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Start_DataStarted){$ENDIF}
                         {$IFDEF LINUX}QIRE_Start_DataStarted{$ENDIF};
  rbStartColRow.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Start_Row){$ENDIF}
                           {$IFDEF LINUX}QIRE_Start_Row{$ENDIF};
  gbFinishCondition.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Finish){$ENDIF}
                               {$IFDEF LINUX}QIRE_Finish{$ENDIF};
  rbFinishData.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Finish_DataFinished){$ENDIF}
                          {$IFDEF LINUX}QIRE_Finish_DataFinished{$ENDIF};
  rbFinishColRow.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Finish_Row){$ENDIF}
                            {$IFDEF LINUX}QIRE_Finish_Row{$ENDIF};
  rgDirection.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Direction){$ENDIF}
                         {$IFDEF LINUX}QIRE_Direction{$ENDIF};
  rgDirection.Items[0] := {$IFDEF WIN32}QImportLoadStr(QIRE_Direction_Down){$ENDIF}
                          {$IFDEF LINUX}QIRE_Direction_Down{$ENDIF};
  rgDirection.Items[1] := {$IFDEF WIN32}QImportLoadStr(QIRE_Direction_Up){$ENDIF}
                          {$IFDEF LINUX}QIRE_Direction_Up{$ENDIF};
  gbSheetType.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Sheet){$ENDIF}
                         {$IFDEF LINUX}QIRE_Sheet{$ENDIF};
  rbDefaultSheet.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Sheet_Default){$ENDIF}
                            {$IFDEF LINUX}QIRE_Sheet_Default{$ENDIF};
  rbCustomSheet.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Sheet_Custom){$ENDIF}
                           {$IFDEF LINUX}QIRE_Sheet_Custom{$ENDIF};
  rbSheetNumber.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Sheet_Custom_Number){$ENDIF}
                           {$IFDEF LINUX}QIRE_Sheet_Custom_Number{$ENDIF};
  rbSheetName.Caption := {$IFDEF WIN32}QImportLoadStr(QIRE_Sheet_Custom_Name){$ENDIF}
                         {$IFDEF LINUX}QIRE_Sheet_Custom_Name{$ENDIF};
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -