我将查询的结果显示在grid中后在导出到excel中打印,发现导出到excel中的时候数据型的,全部变成的文本型的,原因是在查询的时候是将查询的结果逐条的插入的grid中的,也就出现了,没有数据的栏位
就是空白的,导出的时候由于有空白格,出现自动的数据型随空白格全部变成文本型,在excel中进行数学运算的时候就出错了,我该怎么办?
就是空白的,导出的时候由于有空白格,出现自动的数据型随空白格全部变成文本型,在excel中进行数学运算的时候就出错了,我该怎么办?
解决方案 »
- 如何在登陆时根据权限表进行权限的分配
- 自动登入exchange 2003如何实现
- dbgrideh实际应用中的问题
- 函数转换,100分马上给,在线等待
- 有哪位好心人帮我将 将一个 bmp 转成 一个256 色或更高颜色的 ICO图标文件!!!!!!!!!!!!!!! 急!!!!!!!!!!
- VisiBroker为什么没有安装
- 怎样分页打印大图形
- 如何连接到SYBASE?
- 在线急救!!我将数百条纪录分屏显示,一次显示10条(用10个Label显示),但是我要随机删除某一条纪录并且保证Label显示上也要删除,后来的要随
- WINSOCK 控件问题
- delphi调用vc编写的dll,传出参数问题
- clientdataset 不能用like吗? 出错
急用 代码??? 能否给代码??? 谢谢
先做Excel对象和Workbook对象创建,然后对DBGrid中的DataSet操作:(主要看怎么插入数据的,实际上就是循环语句,里面含有页头页尾的设置方式!)function InsertGridToExcel:Boolean;
var
I,J,K: Integer;
data_Str: string;
DataField:TField;
Column_name: string;
begin
try
if (FProBar<>nil) then
FProBar.Max :=FUserGrid.RowCount;
for I:=0 to FUserGrid.RowCount-1 do
begin
if (FProBar<>nil) then
FProBaR.Position:=I;
for J:=0 to FUserGrid.ColCount-1 do
begin
if FUserGrid.Objects[J,I]<>nil then
DataField:=(FUserGrid.Objects[J,I] as TField);
if I=0 then
begin
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Value:=FUserGrid.Cells[J,I];
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].HorizontalAlignment:=$FFFFEFF4;
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].font.Name:='黑体';
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].font.size:=11;
FWorkbook_Handle.WorkSheets[1].Columns[J+1].ColumnWidth := length(FUserGrid.Cells[J,I])+10 ;
//*****************设置边框****************************//
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.LineStyle:=$FFFFEFD2;
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.LineStyle:=1;
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.Weight:=2;
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.ColorIndex:=$FFFFEFF7;
//*********************************************//
end
else
begin
if varisnull(FUserGrid.Cells[J,I]) then
data_Str:=''
else
data_Str :=FUserGrid.Cells[J,I];
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Value := data_Str;
if (DataField<>nil) and (DataField.DataType in [ftFloat,ftBCD]) then
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].NumberFormatLocal:='#,##0.00';
if (DataField<>nil) and (DataField.DataType in [ftInteger,ftFloat,ftBCD]) then
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].HorizontalAlignment:=$FFFFEFC8
else
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].HorizontalAlignment:=$FFFFEFF4;
//*****************设置边框****************************//
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.LineStyle:=$FFFFEFD2;
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.LineStyle:=1;
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.Weight:=2;
FWorkbook_Handle.WorkSheets[1].Cells[I+3, J+1].Borders.ColorIndex:=$FFFFEFF7;
//*********************************************//
end;
end;
J:=J+1;
end;
I:=I+1; //***************页头**********************
if FPageTitle<>'' then
begin
FWorkbook_Handle.WorkSheets[1].Cells[1,(FUserGrid.ColCount div 2)+1].Value:=FPageTitle;
FWorkbook_Handle.WorkSheets[1].Cells[1,(FUserGrid.ColCount div 2)+1].font.Name:='黑体';
FWorkbook_Handle.WorkSheets[1].Cells[1,(FUserGrid.ColCount div 2)+1].font.size:=12;
FWorkbook_Handle.WorkSheets[1].Cells[1, (FUserGrid.ColCount div 2)+1].HorizontalAlignment:=$FFFFEFF4;
end;
//***************页尾**********************
if FPageFooterTitle<>'' then
FWorkbook_Handle.WorkSheets[1].Cells[I,2].Value:=FPageFooterTitle; {恢复原始事件以及标志位置}
if (FProBar<>nil) then
FProBar.Position:=0;
Result := True; finally
FExcel_Handle.Visible := True;
FExcel_Handle.Application.ScreenUpdating := True;
end;
end;