Срочно по Excel....(всем программистам).........
От: CO0lGirL  
Дата: 05.03.02 10:00
Оценка:
Уважаемые программисты вот такие дела!!
При составлении отчета из базы через Query делается запрос и выводится в ексел таким образом...
j:=1;
query1.close;
query1.SQL.Add('select sum(price) as SUMPRICE,Company,GroupTov, AdvrtName,ConstrType from comcon2.db where GroupTov='''+Edit1.Text+''' group by Company, AdvrtName, ConstrType,GroupTov');
query1.Open;

Query1.First;
While not Query1.Eof do
begin
XArr[5]:=Query1.FieldByName('SumPrice').AsString;
XArr[2]:=Query1.FieldByName('AdvrtName').AsString;
XArr[3]:=Query1.FieldByName('ConstrType').AsString;
XArr[4]:=Query1.FieldByName('GroupTov').AsString;
XArr[1]:=Query1.fieldbyName('Company').asstring;

// .......

XLR:= XLS.Range[XLS.Cells[j+1,2],XLS.Cells[j+1,2+9]];
XLR.Value := XArr;
XLR.Font.Bold := True;
XLR.Interior.ColorIndex := 0;
Query1.Next;
J:=J+1;
end;

end;
end.

при этом данные выводятся в столбец по такому методу
Name Type Type1 Price
1 a a1 65464
1 a a2 32154
и т.д. надо чтобы было так....
Name
1 Type
a Type1 Price
a1 3245
a2 2151
Посоветовали сделать вложенные циклы на перебор Name, Type, Type1>>>>>
сделала вот так но он не показывает данные хотя видно что цикл происходит прошу помогите в чем дело?????....
срочно надо


const
xlWBATWorksheet = $FFFFEFB9;
var
XL, XLS, XLR, XArr: Variant;
fname,st1:String;
tshor,tempstr:String;
j,i:integer;
begin
XArr:=VarArrayCreate([1,10],varVariant);
XL:=CreateOLEObject('Excel.Application');
XL.WorkBooks.add(xlWBATWorksheet); // добавляет только один лист
XLS:=XL.Workbooks[1].ActiveSheet; // рабочий лист
XL.DisplayAlerts:=false; // отключение сообщений Екселя
XL.visible:=true;

j:=1;
query1.close;
query1.SQL.Add('select sum(price) as SUMPRICE,Company,GroupTov, AdvrtName,ConstrType from comcon2.db where GroupTov='''+Edit1.Text+''' group by Company, AdvrtName, ConstrType,GroupTov');
query1.Open;
Query1.First;

tempstr:=Query1.fieldbyName('Company').asstring;
While not Query1.Eof do
begin
if Query1.fieldbyName('Company').asstring=tempstr then
begin
XArr[2]:=Query1.FieldByName('AdvrtName').AsString;
XArr[3]:=Query1.FieldByName('ConstrType').AsString;
XArr[4]:=Query1.FieldByName('GroupTov').AsString;
XArr[1]:=Query1.fieldbyName('Company').asstring;

// .......

{XLR:= XLS.Range[XLS.Cells[j+2,2],XLS.Cells[j+2,2+9]];
XLR.Value := XArr;
XLR.Font.Bold := True;
XLR.Interior.ColorIndex := 0; }
end
else
XArr[5]:=Query1.FieldByName('SumPrice').AsString;

end;
XLR:= XLS.Range[XLS.Cells[j+2,2],XLS.Cells[j+2,2+9]];
XLR.Value := XArr;
XLR.Font.Bold := True;
XLR.Interior.ColorIndex := 0;
Query1.Next;
J:=J+1;
заранее спасибо
Re: Срочно по Excel....(всем программистам).........
От: vav Россия  
Дата: 13.03.02 04:27
Оценка:
Здравствуйте CO0lGirL, Вы писали:

COGL>при этом данные выводятся в столбец по такому методу

COGL>Name Type Type1 Price
COGL>1 a a1 65464
COGL>1 a a2 32154
COGL>и т.д. надо чтобы было так....
COGL>Name
COGL>1 Type
COGL> a Type1 Price
COGL> a1 3245
COGL> a2 2151

tempstr:='';
tempstr1:='';

While not Query1.Eof do
begin
if Query1.fieldbyName('Company').asstring = tempstr then
begin
// предполагаю что ConstrType и есть Type
if Query1.fieldbyName('ConstrType').asstring = tempstr1 then
begin
XArr[2]:=' '
XArr[3]:=' ';
XArr[4]:=Query1.FieldByName('GroupTov').AsString;
XArr[1]:= ' ';
XArr[5]:=Query1.FieldByName('SumPrice').AsString;

{вставить строку в ексель}
Query1.next;
end
else
begin
tempstr1 := Query1.fieldbyName('ConstrType').asstring;
XArr[1]:=' ';
XArr[2]:=' ';
XArr[3]:=Query1.fieldbyName('ConstrType').asstring;
XArr[4]:= ' ';
XArr[5]:=' ';
{вставить строку в ексель}
end
end
else
begin
tempstr:=Query1.fieldbyName('Company').asstring;
XArr[1]:=Query1.fieldbyName('Company').asstring;
XArr[2]:=Query1.FieldByName('AdvrtName').AsString;
XArr[3]:=' ';// ну или название полей если нужны
XArr[4]:= ' ';
XArr[5]:=' ';
{вставить строку в ексель}
end

результат примерно такой.

Company AdvrtName
XXXXXXX XXXXXXXXX ConstrType
----------- -------------- XXXXXXXXXX GroupTov SumPrice
----------- -------------- ---------------- XXXXXXXX XXXXXXXX


Замечание: построчная вставка в ексель — очень долго
лучше сформировать строку в формате CVS и вставить с использованием DDE.

--
Но если срочно, то лучше медленно чем никак...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.