Форум: "Начинающим";
Текущий архив: 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.046 c