Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Экспорт из TBDGridEh в Excel   Найти похожие ветки 

 
Kostafey ©   (2006-11-23 22:39) [0]

Уважаемые мастера ! Прошу помощи в следующем вопросе. Я экспортировал данные из TDBGridHe  в Excel. В сетке были в том числе столбцы с цифрами, содержащими 2 знака после запятой. После экспорта они преобразовались в денежный формат. Т.е. после каждого значения появились символы "р."
А смысл этих цифр - проценты !

Что до самой процедуры экспорта, то сложно описать ее происхожление, словом Internet.

Ее текст:

unit Unit_DBGridToExcelApp;

interface

uses DBGridEh, Classes, DB, SysUtils, Variants, ComObj;

procedure ExportToExcel_App(DBGrid:TDBGridEh;Header:String="";footer:String="");

implementation

procedure ExportToExcel_App(DBGrid:TDBGridEh;Header:String="";footer:String="");
var
XL, XArr,Xformat: Variant;
i : Integer;
j,l,rk : Integer;
Query:TDataSet;
FieldCount:integer;

Function GetExelColumn(indX,indY:integer):String;
Begin
    if indX>25 then
    Result:=CHR(65+(indX DIV 26)-1)+CHR(65+indX MOD 26)+inttostr(indY+1)
    Else Result:=CHR(65+indX)+inttostr(indY+1);
End;

begin
    FieldCount:=0;
    Query:=TDataSet(DBGrid.DataSource.DataSet);
    for i:=0 to Query.FieldCount-1 do if Query.Fields[i].Visible then inc(FieldCount);
    Begin
         XArr:=VarArrayCreate([1,FieldCount],varVariant);
         Xformat:=VarArrayCreate([1,FieldCount],varVariant);
         try
           XL:=CreateOLEObject("Excel.Application");
         except
              raise exception.Create("I?iecioea ioeaea i?e auciaa i?ia?aiiu EXCEL!");
         End;
         XL.WorkBooks.add;
         XL.Range[GetExelColumn(0,0),GetExelColumn(0,0)].Value :=Header;
         j:=0;
         For i:=0 to Query.FieldCount-1 do
          if Query.Fields[i].Visible then
          Begin
               inc(j);
              XArr[j] := Query.Fields[i].DisplayName;
          End;
         XL.Range[GetExelColumn(0,1),GetExelColumn(FieldCount-1,1)].Value := XArr;
         rk:=Query.RecordCount;
         l:=0;
         For i:=0 to Query.FieldCount-1 do
         Begin
         if Query.Fields[i].Visible then
          Begin
             Case Query.Fields[i].DataType of
                  ftString:XL.Range[GetExelColumn(l,2),GetExelColumn(l,rk+1)].NumberFormat:="@";
                  ftDateTime:XL.Range[GetExelColumn(l,2),GetExelColumn(l,rk+1)].NumberFormat:="@";
             End;
             inc(l);
          End;
         End;
         Query.First;
         j := 2;
         while not Query.Eof do
         begin
              i:=0;
              l:=0;
              while i<Query.FieldCount do
              begin
                  if Query.Fields[i].Visible then
                  Begin
                      inc(l);
                      if (Query.Fields[i].DataType=ftDateTime)
                      or (Query.Fields[i].DataType=ftString) then
                        XArr[l] := Query.Fields[i].asString
                      Else XArr[l] := Query.Fields[i].Value;
                  end;
                  inc(i);
              end;
              XL.Range[GetExelColumn(0,j),GetExelColumn(FieldCount-1,j)].Value := XArr;
              Query.Next;
              inc(j);
         end;
         XL.Range[GetExelColumn(0,j),GetExelColumn(0,j)].Value :=Footer;
         XL.Range[GetExelColumn(0,1),GetExelColumn(FieldCount-1,rk+1)].Borders.LineStyle := 1;
         XL.ActiveSheet.Range[GetExelColumn(0,1),GetExelColumn(FieldCount-1,rk+1)].Select;
         XL.Selection.Columns.AutoFit;
         XL.visible:=true;
   End;
end;

end.



 
Kostafey ©   (2006-11-24 17:51) [1]

Возвращаю вопрос к обсуждению.
Совершенно не могу в этом разобраться.
Может быть как-то возможно жестко задать типы полей ?


 
zdm ©   (2006-11-24 17:54) [2]

по моему, DBGridEh (да не важно) на прямую привязана к DataSorce (попробую в Query добавить все поля и нужному задать тип поля Currency=true)


 
Kostafey ©   (2006-11-24 17:58) [3]

> [2] zdm ©   (24.11.06 17:54)


Добавить все поля - проблеммно, т.к. Query (вернее DataSet) будут приниать разные запросы. Кроме того, мне наоборот нужно, чтобы значения были не денежными, а числовыми с 2 знаками после запятой (смысл этих цифр - проценты).
Говоря о жесткой привязке типов я иел в виду привязку в самой процедуре указанной выше.


 
umbra ©   (2006-11-24 18:22) [4]

XL.Range[GetExelColumn(0,j),GetExelColumn(0,j)].NumberFormatLocal := "0,00";


 
Kostafey ©   (2006-11-24 20:19) [5]

>
>
> [4] umbra ©   (24.11.06 18:22)


Не помогло. Формат по прежнему женежный


 
Kostafey ©   (2006-11-24 21:53) [6]

Вообще непонятно. Изменяю округление (до 0, 1, 3 знаков после запятой) - не помогает.


 
EvS ©   (2006-11-24 23:14) [7]

Формат вроде бы нужно устанавливать до того как вводишь данные.


 
Kostafey ©   (2006-11-24 23:27) [8]

> Формат вроде бы нужно устанавливать до того как вводишь
> данные.

Наверное да. Просто я сам ничего в этой процедуре не понимаю (взял с инета).
Что б вней такое исправить ? Пока я пойму как она работает пройдет целая вечность.



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
15-1164126797
Ламот
2006-11-21 19:33
2006.12.10
КПК + Приближающиеся морозы...


15-1164298836
Mr. D
2006-11-23 19:20
2006.12.10
Посоветуйте простенький DHCP-сервер


2-1164014010
One_More_Slon
2006-11-20 12:13
2006.12.10
что то не уничтожилось :(


2-1164278966
vtur
2006-11-23 13:49
2006.12.10
Как передать DLL-процедуре указатель на Owner (TComponent)


2-1164264763
loooo1
2006-11-23 09:52
2006.12.10
Консоль и таймер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский