給一個輸入到Excel的過程,可以參考一下。
uses comobj,excel97,variants;
procedure TMainForm.DBGridToExcel(Multiselect: Boolean; FileNam: String; DBGrid: TDBGrid);
var
MSExcel, MSExcelWorkBook, MSExcelWorkSheet: Variant;
ColumnRange: Variant;
LinesCount, FieldsCount, i, j: Integer;
ExportText: Variant;
SaveCursor: TCursor;
ColumnWidth: Array of Integer;
function GetRangeAddr(const ColIndex, RowIndex: Integer): String;
var
i:integer;
begin
if ColIndex > 26 then
Result := Chr((ColIndex div 26) + 64);
i := ColIndex mod 26;
if i > 0 then Result := Result + Chr(i + 64);
Result := Result + IntToStr(RowIndex);
end;
begin
try
MSExcel := CreateOleObject('Excel.Application');
MSExcelWorkBook := MSExcel.WorkBooks.Add;
MSExcelWorkSheet := MSExcel.WorkSheets.Add;
except
ShowMessage('無法与Microsoft Excel連接!');
abort;
end;
try
with DBGrid do
begin
SaveCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
FieldsCount := DBGrid.Columns.Count;
with DataSource.DataSet do
begin
DisableControls;
try
LinesCount := 1;
First;
while not Eof do
begin
Inc(LinesCount);
Next;
end;
ExportText := VarArrayCreate([1, LinesCount, 1, FieldsCount], VarVariant);//創建二維變体類型數組
LinesCount := 1;
SetLength(ColumnWidth, FieldsCount);
for i := 0 to FieldsCount-1 do
begin
ExportText[LinesCount, i + 1] := Columns.Title.Caption;//將Columns列標題寫到數組第一行
ColumnWidth := Round(Columns.Width/64*10);//保存Columns列寬以便在Excel中設置列寬
end;
if not MultiSelect then //如果不支持多重選擇
begin
First;
while not Eof do
begin
Inc(LinesCount);
for i := 0 to FieldsCount-1 do
ExportText[LinesCount, i + 1] := DBGrid.Columns.Field.Value;
Next;
end;
end
else
begin //如果支持多重選擇
if DBGrid.SelectedRows.Count>0 then
with DBGrid.DataSource.DataSet do
for i := 0 to DBGrid.SelectedRows.Count-1 do
begin
GotoBookMark(Pointer(DBGrid.SelectedRows.Items));
Inc(LinesCount);
for j := 0 to FieldsCount-1 do
ExportText[LinesCount, j + 1] := DBGrid.Columns.Field.Value;
end;
end;
MSExcelWorkSheet.Range['A1:' + GetRangeAddr(FieldsCount, LinesCount)].value := Exporttext;
ColumnRange := MSExcelWorkSheet.Columns;
for i := 1 to FieldsCount do
ColumnRange.Columns.ColumnWidth := ColumnWidth[i-1];//設置列寬
MSExcelWorkSheet.Range['A1:' + GetRangeAddr(FieldsCount, LinesCount)].Borders.LineStyle := 1;//設置邊界線
finally
EnableControls;
end;
end;
MSExcelWorkSheet.SaveAs(Filenam);
finally
Screen.Cursor := SaveCursor;
end;
end;
Application.BringToFront;//激活應用程序
ShowMessage('所選資料已成功地存檔到'#13 + Filenam);
finally
try
MSExcel.Quit;
except
end;
end;
end;