Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Экспорт из 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.045 c
2-1164277824
mkmkm
2006-11-23 13:30
2006.12.10
Console + TNotifyEvent (... of Object)


15-1163994028
Slider007
2006-11-20 06:40
2006.12.10
С днем рождения ! 19 ноября


2-1164536274
Ded222
2006-11-26 13:17
2006.12.10
Программа занимает 20 мб памяти в Диспетчере задач.


15-1163914709
Tirael
2006-11-19 08:38
2006.12.10
крыша едет...


6-1153729806
KyRo
2006-07-24 12:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский