我将查询的结果显示在grid中后在导出到excel中打印,发现导出到excel中的时候数据型的,全部变成的文本型的,原因是在查询的时候是将查询的结果逐条的插入的grid中的,也就出现了,没有数据的栏位
就是空白的,导出的时候由于有空白格,出现自动的数据型随空白格全部变成文本型,在excel中进行数学运算的时候就出错了,我该怎么办?

解决方案 »

  1.   

    从Dataset.Fields[i].DataType找到字段类型然后将Excel相应的字段做设置.
      

  2.   

    请问:怎么把 grid 中的 数据 导出到 excel 中的???
      急用 代码???  能否给代码??? 谢谢
      

  3.   

    我还是不懂,我导出的字段类型应该是和dataset中一致的,比如说我其他界面也有将grid中的数值型数据导出,不同的是其他界面的grid没有空白格,所以导出时默认的全是数值型的,可以进行数学计算,但是我现在遇到的是grid中有空白格,导出时就默认excel中的对应列是文本型的了,我不知道怎么将excel中相应的字段设置
      

  4.   

    在grid中是数据型的,导出到excel中就变成文本了
      

  5.   

    呵呵!这个工程就比较浩大了!你可以搜索一下相关的论坛!我提供一个我写的代码给你,不过是思路,不能完全照抄!
     先做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;