unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, XLSReadWriteII5, Grids, IniFiles, Xc12Utils5,
XLSSheetData5, XPMan;
type TDoubleArray = array of double;
type
TfrmMain = class(TForm)
Panel1: TPanel;
btnRead: TButton;
btnWrite: TButton;
edReadFilename: TEdit;
edWriteFilename: TEdit;
btnDlgOpen: TButton;
btnDlgSave: TButton;
dlgSave: TSaveDialog;
dlgOpen: TOpenDialog;
Button1: TButton;
Grid: TStringGrid;
btnAddCells: TButton;
XLS: TXLSReadWriteII5;
XPManifest1: TXPManifest;
procedure btnCloseClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);
procedure btnWriteClick(Sender: TObject);
procedure btnDlgOpenClick(Sender: TObject);
procedure btnDlgSaveClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnAddCellsClick(Sender: TObject);
private
procedure AddCells;
procedure ReadCells;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TfrmMain.btnReadClick(Sender: TObject);
begin
XLS.Filename := edReadFilename.Text;
XLS.Read;
ReadCells;
end;
procedure TfrmMain.btnWriteClick(Sender: TObject);
begin
XLS.Filename := edWriteFilename.Text;
XLS.Write;
end;
procedure TfrmMain.btnDlgOpenClick(Sender: TObject);
begin
dlgOpen.FileName := edReadFilename.Text;
if dlgOpen.Execute then
edReadFilename.Text := dlgOpen.FileName;
end;
procedure TfrmMain.btnDlgSaveClick(Sender: TObject);
begin
dlgSave.FileName := edWriteFilename.Text;
if dlgSave.Execute then
edWriteFilename.Text := dlgSave.FileName;
end;
procedure TfrmMain.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmMain.ReadCells;
var
C,R: integer;
Ref: string;
Cnt: integer;
vError: TXc12CellError;
CellType: TXLSCellType;
begin
Cnt := 0;
XLS[0].CalcDimensions;
for R := XLS[0].FirstRow to XLS[0].LastRow do begin
for C := XLS[0].FirstCol to XLS[0].LastCol do begin
CellType := XLS[0].CellType[C,R];
if CellType <> xctNone then begin
Ref := ColRowToRefStr(C,R);
Grid.Cells[0,Cnt + 1] := Ref;
case CellType of
xctBlank : begin
Grid.Cells[1,Cnt + 1] := ‘Blank‘;
end;
xctBoolean : begin
Grid.Cells[1,Cnt + 1] := ‘Boolean‘;
if XLS[0].AsBoolean[C,R] then
Grid.Cells[2,Cnt + 1] := ‘TRUE‘
else
Grid.Cells[2,Cnt + 1] := ‘FALSE‘;
end;
xctError : begin
Grid.Cells[1,Cnt + 1] := ‘Error‘;
vError := XLS[0].AsError[C,R];
Grid.Cells[2,Cnt + 1] := Xc12CellErrorNames[vError];
end;
xctString : begin
Grid.Cells[1,Cnt + 1] := ‘String‘;
Grid.Cells[2,Cnt + 1] := XLS[0].AsString[C,R];
end;
xctFloat : begin
Grid.Cells[1,Cnt + 1] := ‘Float‘;
Grid.Cells[2,Cnt + 1] := FloatToStr(XLS[0].AsFloat[C,R]);
end;
xctFloatFormula : begin
Grid.Cells[1,Cnt + 1] := ‘Formula, float‘;
Grid.Cells[2,Cnt + 1] := FloatToStr(XLS[0].AsFloat[C,R]);
Grid.Cells[3,Cnt + 1] := XLS[0].AsFormula[C,R]
end;
xctStringFormula : begin
Grid.Cells[1,Cnt + 1] := ‘Formula, string‘;
Grid.Cells[2,Cnt + 1] := XLS[0].AsString[C,R];
Grid.Cells[3,Cnt + 1] := XLS[0].AsFormula[C,R]
end;
xctBooleanFormula: begin
Grid.Cells[1,Cnt + 1] := ‘Formula, boolean‘;
if XLS[0].AsBoolean[C,R] then
Grid.Cells[2,Cnt + 1] := ‘TRUE‘
else
Grid.Cells[2,Cnt + 1] := ‘FALSE‘;
Grid.Cells[3,Cnt + 1] := XLS[0].AsFormula[C,R]
end;
xctErrorFormula : begin
Grid.Cells[1,Cnt + 1] := ‘Formula, error‘;
vError := XLS[0].AsError[C,R];
Grid.Cells[2,Cnt + 1] := Xc12CellErrorNames[vError];
Grid.Cells[3,Cnt + 1] := XLS[0].AsFormula[C,R]
end;
end;
Inc(Cnt);
if Cnt > Grid.RowCount then
Exit;
end;
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
S: string;
Ini: TIniFile;
begin
S := ChangeFileExt(Application.ExeName,‘.ini‘);
Ini := TIniFile.Create(S);
try
edReadFilename.Text := Ini.ReadString(‘Files‘,‘Read‘,‘‘);
edWriteFilename.Text := Ini.ReadString(‘Files‘,‘Write‘,‘‘);
finally
Ini.Free;
end;
Grid.Cells[0,0] := ‘Refrence‘;
Grid.Cells[1,0] := ‘Cell type‘;
Grid.Cells[2,0] := ‘Value‘;
Grid.Cells[3,0] := ‘Formula‘;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
var
S: string;
Ini: TIniFile;
begin
S := ChangeFileExt(Application.ExeName,‘.ini‘);
Ini := TIniFile.Create(S);
try
Ini.WriteString(‘Files‘,‘Read‘,edReadFilename.Text);
Ini.WriteString(‘Files‘,‘Write‘,edWriteFilename.Text);
finally
Ini.Free;
end;
end;
procedure TfrmMain.btnAddCellsClick(Sender: TObject);
begin
AddCells;
ReadCells;
end;
procedure TfrmMain.AddCells;
begin
// Column and row references are zero-relative. Cell A1 have column 0 and row 0.
// Add a float value in cell A1
XLS[0].AsFloat[0,0] := 125;
// Cell references can also be given as a string when using the AsXXXRef properties.
XLS[0].AsFloatRef[‘A2‘] := 250;
// Inserting a float values in column B, starting at row 4 and continuing to row 6.
// The array argument can be of any size.
XLS[0].InsertFloatColValues(0,3,[10,20,30]);
XLS[0].AsString[1,0] := ‘Hello, world‘;
XLS[0].AsStringRef[‘B2‘] := ‘Hello again‘;
XLS[0].InsertStringColValues(1,3,[‘One‘,‘Two‘,‘Three‘]);
XLS[0].AsBoolean[2,0] := True;
XLS[0].AsBooleanRef[‘C2‘] := False;
// Adding Excel error values.
XLS[0].AsError[2,0] := errDiv0;
XLS[0].AsErrorRef[‘C2‘] := errNA;
// Adding values as variants.
XLS[0].AsVariant[3,0] := ‘Oink!‘;
XLS[0].AsVariantRef[‘D2‘] := 750.25;
// Inserting a float values in Row 11, starting at col A and continuing to col C.
// The array argument can be of any size.
XLS[0].InsertFloatRowValues(0,10,[100,200,300]);
XLS[0].InsertFloatRowValues(5,10,[1000,2000,3000]);
// Inserting values as a variant array. The values can be numeric, string or boolean.
// Error values are not possible as delphi will translate the error type to
// an integer value.
XLS[0].InsertRowValues(0,11,[1,‘Two‘,True]);
XLS[0].InsertColValues(6,0,[1,‘Two‘,True]);
// Add formulas. Formuas are entered as text strings in the same syntax as
// in Excel.
XLS[0].AsFormula[4,0] := ‘SUM(A10:H11)‘;
// Set the result of the formula (this value is wrong).
XLS[0].AsNumFormulaValue[4,0] := 5000;
XLS[0].AsFormulaRef[‘E2‘] := ‘MAX(A10:H11)*100‘;
// Calculate the workbook. This will replace the above wrong formula result
// with the correct value.
// This os only of importance when working with the file in the component,
// or possible if the file is exported to another software that don‘t calculate
// formulas.
// When the file is opened in Excel, the formulas will be recalculated.
XLS.Calculate;
XLS[0].CalcDimensions;
end;
end.
例子1、
TXLSReadWriteII2版本导出Excel文件:
procedure TForm1.N1Click(Sender: TObject);
var
i: Integer;
aSaveDialog: TSaveDialog;
aFileName, aStampTime: AnsiString;
aXlsObj: TXLSReadWriteII2;
p: PDataRec;
begin
aSaveDialog := TSaveDialog.Create(Self);
try
aSaveDialog.InitialDir := ExtractFilePath(ParamStr(0));
aSaveDialog.DefaultExt := ‘xls‘;
aSaveDialog.Filter := ‘Excel文件(*.xls)|*.xls|所有文件(*.*)|*.*‘;
aStampTime := FormatDateTime(‘yyyymmddhhnnss‘, Now);
aSaveDialog.FileName := aStampTime;
if not aSaveDialog.Execute then
Exit;
aFileName := aSaveDialog.FileName;
if aFileName = ‘‘ then
Exit;
finally
aSaveDialog.Free;
end;
aXlsObj := TXLSReadWriteII2.Create(nil);
try
aXlsObj.Sheets[0].AsWideString[0, 0] := ‘id‘;
aXlsObj.Sheets[0].AsWideString[1, 0] := ‘table‘;
aXlsObj.Sheets[0].AsWideString[2, 0] := ‘kind‘;
aXlsObj.Sheets[0].AsWideString[3, 0] := ‘rows‘;
aXlsObj.Sheets[0].AsWideString[4, 0] := ‘times‘;
aXlsObj.Sheets[0].AsWideString[5, 0] := ‘desc‘;
for i:=1 to FDataHash.Count - 1 do
begin
p := FDataHash[i];
aXlsObj.Sheets[0].AsWideString[0, i] := Format(‘%d‘, [p.id]);
aXlsObj.Sheets[0].AsWideString[1, i] := p.table;
aXlsObj.Sheets[0].AsWideString[2, i] := p.kind;
aXlsObj.Sheets[0].AsWideString[3, i] := Format(‘%d‘, [p.rows]);
aXlsObj.Sheets[0].AsWideString[4, i] := Format(‘%d‘, [p.times]);
aXlsObj.Sheets[0].AsWideString[5, i] := p.desc;
end;
aXlsObj.Filename := aFileName;
aXlsObj.Write;
ShowMessage(Format(‘导出文件‘+#13#10+‘%s‘+#13#10 +‘成功!‘, [aFileName]));
finally
aXlsObj.Free;
end;
end;