Delphi TXLSReadWriteII2 带的demo中 edit的例子

unitMain;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, Tabs, Cell2,

{$ifdef ver140}

Variants,

{$endif}

XLSUtils2, XLSReadWriteII2;

type

TForm8 = class(TForm)

Label1: TLabel;

edFilename: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

dlgOpen: TOpenDialog;

Button4: TButton;

Grid: TDrawGrid;

TabSet: TTabSet;

lblCell: TLabel;

edCell: TEdit;

XLS: TXLSReadWriteII2;

procedure Button1Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure GridDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure TabSetChange(Sender: TObject; NewTab: Integer;

var AllowChange: Boolean);

procedure GridGetEditText(Sender: TObject; ACol, ARow: Integer;

var Value: String);

procedure GridSelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure GridSetEditText(Sender: TObject; ACol, ARow: Integer;

const Value: String);

procedure GridKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure FormCreate(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

EditCol,EditRow: integer;

EditText: string;

function ColToText(Col: integer): string;

procedure SetCellValue(Col,Row: integer);

public

{ Public declarations }

end;

var

Form8: TForm8;

implementation

{$R *.dfm}

function TForm8.ColToText(Col: integer): string;

var

S: string;

begin

if (Col div 26) > 0 then

S := Char(Ord('A') + (Col div 26) - 1)

else

S := '';

Result := S + Char(Ord('A') + (Col mod 26));

end;

procedure TForm8.Button1Click(Sender: TObject);

begin

dlgOpen.FileName := edFilename.Text;

if dlgOpen.Execute then

edFilename.Text := dlgOpen.FileName;

end;

procedure TForm8.Button4Click(Sender: TObject);

begin

Close;

end;

procedure TForm8.Button2Click(Sender: TObject);

var

i: integer;

begin

XLS.Sheet[0].PrintSettings.FitWidth := 2;

XLS.Filename := edFilename.Text;

XLS.Read;

TabSet.Tabs.Clear;

for i := 0 to XLS.Sheets.Count - 1 do

TabSet.Tabs.Add(XLS.Sheets[i].Name);

TabSet.TabIndex := 0;

Grid.Invalidate;

end;

procedure TForm8.GridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

var

S: string;

begin

if (ACol > 0) and (ARow > 0) then begin

S := XLS.Sheets[TabSet.TabIndex].AsFmtString[ACol - 1,ARow - 1];

if S <> '' then

Grid.Canvas.TextRect(Rect,Rect.Left + 2,Rect.Top + 2,S);

end

else if (ACol <> 0) then begin

S := ColToText(ACol - 1);

Grid.Canvas.TextRect(Rect,Rect.Left + (Rect.Right - Rect.Left) div 2 - (Grid.Canvas.TextWidth(S) div 2),Rect.Top + 2,S);

end

else if (ARow <> 0) then

Grid.Canvas.TextRect(Rect,Rect.Left + 2,Rect.Top + 2,IntToStr(ARow));

end;

procedure TForm8.TabSetChange(Sender: TObject; NewTab: Integer;

var AllowChange: Boolean);

begin

Grid.Invalidate;

end;

procedure TForm8.GridGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);

begin

EditCol := ACol;

EditRow := ARow;

case XLS.Sheets[TabSet.TabIndex].CellType[ACol - 1,ARow - 1] of

ctNumberFormula,

ctStringFormula,

ctBooleanFormula:

Value := '=' + XLS.Sheets[TabSet.TabIndex].AsFormula[ACol - 1,ARow - 1];

ctInteger,ctFloat:

Value := FloatToStr(XLS.Sheets[TabSet.TabIndex].AsFloat[ACol - 1,ARow - 1]);

else

Value := XLS.Sheets[TabSet.TabIndex].AsWideString[ACol - 1,ARow - 1];

end;

end;

procedure TForm8.GridSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);

begin

EditText := Trim(Value);

end;

procedure TForm8.SetCellValue(Col,Row: integer);

begin

if Copy(EditText,1,1) = '=' then

XLS.Sheets[TabSet.TabIndex].AsFormula[Col,Row] := Copy(EditText,2,MAXINT)

else begin

try

XLS.Sheets[TabSet.TabIndex].AsFloat[Col,Row] := StrToFloat(EditText);

except

XLS.Sheets[TabSet.TabIndex].AsWideString[Col,Row] := EditText;

end;

end;

end;

procedure TForm8.GridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);

begin

lblCell.Caption := ColRowToRefStr(ACol - 1,ARow - 1,False,False);

case XLS.Sheets[TabSet.TabIndex].CellType[ACol - 1,ARow - 1] of

ctNumberFormula,

ctStringFormula,

ctBooleanFormula:

edCell.Text := '=' + XLS.Sheets[TabSet.TabIndex].AsFormula[ACol - 1,ARow - 1];

else

edCell.Text := XLS.Sheets[TabSet.TabIndex].AsWideString[ACol - 1,ARow - 1];

end;

if (EditCol = Grid.Col) and (EditRow = Grid.Row) then

SetCellValue(Grid.Col - 1,Grid.Row - 1);

end;

procedure TForm8.GridKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if (Key = VK_RETURN) and (EditCol = Grid.Col) and (EditRow = Grid.Row) then

SetCellValue(Grid.Col - 1,Grid.Row - 1);

end;

procedure TForm8.FormCreate(Sender: TObject);

begin

Grid.ColWidths[0] := 30;

end;

procedure TForm8.Button3Click(Sender: TObject);

begin

XLS.Filename := edFilename.Text;

XLS.Write;

end;

end.