網上實體有很多,但都沒有對單元格進行操作的,有點遺憾。網上實體: 但EXCEL中的單元格如何寫入?
var ExcelApp Variant;
ExcelApp.ActiveSheet.range[sheet.cells[1, 1], sheet.cells[1,18]].Font.Bold := True; //粗體
ExcelApp.ActiveSheet.range[sheet.cells[1, 1], sheet.cells[1,18]].Font.size := 18; //大小
ExcelApp.selection.HorizontalAlignment:=xlCenter; //居中
ExcelApp.selection.MergeCells := True;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
- - - - - - - - - - - 以上如何利用檔案流對EXCEL單元格進行寫入?
下面為網上實體:
Procedure ExportExcelFile(FileName: string; bWriteTitle: Boolean; aDataSet: TDataSet);
var i, j: integer;
Col, row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
procedure incColRow; //增加行列號 控制 行與列的位置
begin
if Col = ADataSet.FieldCount - 1 then
begin
Inc(Row);
Col :=0;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string);//寫字串資料 arXlsString[2] := Row; arXlsString[3] := Col;
var L: Word;
begin
L := Length(AValue);
arXlsString[1] := 8 + L;
arXlsString[2] := Row;
arXlsString[3] := Col;
arXlsString[5] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer);//寫整數 arXlsInteger[2] := Row; arXlsInteger[3] := Col;
var V: Integer;
begin
arXlsInteger[2] := Row;
arXlsInteger[3] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl 2) or 2;
aFileStream.WriteBuffer(V, 4);
IncColRow;
end;
procedure WriteFloatCell(AValue: double);//寫浮點數 arXlsNumber[2] := Row; arXlsNumber[3] := Col;
begin
arXlsNumber[2] := Row;
arXlsNumber[3] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, 8);
IncColRow;
end;
begin
if FileExists(FileName) then
DeleteFile(FileName); //檔案存在,先洗掉
aFileStream := TFileStream.Create(FileName, fmCreate);
Try
//寫檔案頭
aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));
//寫列頭
Col := 0; Row := 0;
if bWriteTitle then
begin
for i := 0 to aDataSet.FieldCount - 1 do
WriteStringCell(aDataSet.Fields[i].FieldName);
end;
//寫資料集中的資料
aDataSet.DisableControls;
ABookMark := aDataSet.GetBookmark;
aDataSet.First;
while not aDataSet.Eof do
begin
for i := 0 to aDataSet.FieldCount - 1 do
case ADataSet.Fields[i].DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:WriteIntegerCell(aDataSet.Fields[i].AsInteger);
ftFloat, ftCurrency, ftBCD:WriteFloatCell(aDataSet.Fields[i].AsFloat)
else
WriteStringCell(aDataSet.Fields[i].AsString);
end;
aDataSet.Next;
end;//while
//寫檔案尾
AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
if ADataSet.BookmarkValid(ABookMark) then
aDataSet.GotoBookmark(ABookMark);
finally
AFileStream.Free;
ADataSet.EnableControls;
end;//try
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17670.html
標籤:數據庫相關
