procedure TForm1.Button2Click(Sender: TObject);
var
i,n: Integer;
xlsApp: Variant;
begin
if ADODataSet1.Eof then begin
ShowMessage('没有数据!');
exit;
end;
xlsApp := CreateOleObject('Excel.Application');
xlsapp.WorkBooks.add;
xlsApp.Visible := false;
xlsApp.WorkSheets[1].Activate; ADODataSet1.First;
i :=1;
//填Excel标题行
for n:=1 to ADODataSet1.FieldCount do xlsApp.Cells[i,n].Value := ADODataSet1.Fields[n-1].DisplayLabel;
While not ADODataSet1.Eof do begin
inc(i);//因在循环前使用了一次填标题行,所以在前面做增量
for n:=1 to ADODataSet1.FieldCount do begin
xlsApp.Cells[i,n].Value := ADODataSet1.Fields[n-1].AsString;
end; xlsApp.Range['A1','Q1'].HorizontalAlignment := -4108;
xlsApp.Range['A1','Q1'].Font.Name := '宋体';
xlsApp.Range['A1','Q1'].Font.Size := 9;
xlsApp.Range['A1','Q'+inttostr(i)].Font.Name := '宋体';
xlsApp.Range['A1','Q'+inttostr(i)].Font.Size := 9; xlsApp.Columns[1].ColumnWidth := 8;
xlsApp.Columns[2].ColumnWidth := 10;
xlsApp.Columns[3].ColumnWidth := 45;
xlsApp.Columns[4].ColumnWidth := 5;
xlsApp.Columns[5].ColumnWidth := 6;
xlsApp.Columns[6].ColumnWidth := 7;
xlsApp.Columns[7].ColumnWidth := 7;
xlsApp.Columns[8].ColumnWidth := 6;
xlsApp.Columns[9].ColumnWidth := 8;
xlsApp.ActiveSheet.Columns[1].NumberFormatLocal:= '@';
xlsApp.ActiveSheet.Columns[7].NumberFormatLocal:= '@';
xlsApp.ActiveSheet.Columns[8].NumberFormatLocal:= '@'; ADODataSet1.Next;
end;
xlsApp.Visible := true;
end;导出代码, 导出后为什么日期那里会显示成那样,还有就是第二行为什么它不是文本模式的。我设置的是文本模式啊。
var
i,n: Integer;
xlsApp: Variant;
begin
if ADODataSet1.Eof then begin
ShowMessage('没有数据!');
exit;
end;
xlsApp := CreateOleObject('Excel.Application');
xlsapp.WorkBooks.add;
xlsApp.Visible := false;
xlsApp.WorkSheets[1].Activate; ADODataSet1.First;
i :=1;
//填Excel标题行
for n:=1 to ADODataSet1.FieldCount do xlsApp.Cells[i,n].Value := ADODataSet1.Fields[n-1].DisplayLabel;
While not ADODataSet1.Eof do begin
inc(i);//因在循环前使用了一次填标题行,所以在前面做增量
for n:=1 to ADODataSet1.FieldCount do begin
xlsApp.Cells[i,n].Value := ADODataSet1.Fields[n-1].AsString;
end; xlsApp.Range['A1','Q1'].HorizontalAlignment := -4108;
xlsApp.Range['A1','Q1'].Font.Name := '宋体';
xlsApp.Range['A1','Q1'].Font.Size := 9;
xlsApp.Range['A1','Q'+inttostr(i)].Font.Name := '宋体';
xlsApp.Range['A1','Q'+inttostr(i)].Font.Size := 9; xlsApp.Columns[1].ColumnWidth := 8;
xlsApp.Columns[2].ColumnWidth := 10;
xlsApp.Columns[3].ColumnWidth := 45;
xlsApp.Columns[4].ColumnWidth := 5;
xlsApp.Columns[5].ColumnWidth := 6;
xlsApp.Columns[6].ColumnWidth := 7;
xlsApp.Columns[7].ColumnWidth := 7;
xlsApp.Columns[8].ColumnWidth := 6;
xlsApp.Columns[9].ColumnWidth := 8;
xlsApp.ActiveSheet.Columns[1].NumberFormatLocal:= '@';
xlsApp.ActiveSheet.Columns[7].NumberFormatLocal:= '@';
xlsApp.ActiveSheet.Columns[8].NumberFormatLocal:= '@'; ADODataSet1.Next;
end;
xlsApp.Visible := true;
end;导出代码, 导出后为什么日期那里会显示成那样,还有就是第二行为什么它不是文本模式的。我设置的是文本模式啊。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
xlsApp.Cells[i,n].Value := ''''+ADODataSet1.Fields[n-1].AsString
xlsApp.ActiveSheet.Columns[1].NumberFormatLocal:= '@';
xlsApp.ActiveSheet.Columns[7].NumberFormatLocal:= '@';
xlsApp.ActiveSheet.Columns[8].NumberFormatLocal:= '@';
这几句你放在了循环中,而且是在显示数据
xlsApp.Cells[i,n].Value := ADODataSet1.Fields[n-1].AsString;
之后,所以第一条数据相当于你未指定格式,才造成此问题,将上面三句放在
显示数据之前