nikitos_EKB
Дата: 14.05.2011 22:08:30
У меня такой вопрос.
Моя программа должна создавать определенную отчетность в Excel. К программе подключенны 2 базы данных Access с названиями: BD1, BD2.
BD1-состоит из 5 таблиц( Table1, Table2...)
BD2-состоит из 1 таблицы (newTable).
Программно выбираются некоторые данные из таблиц BD1 и передаются в BD2 в newTable.Список всех таблиц BD1 отображен в комбобоксе, так же я сохраняю в newTable в столбец numtb и название таблицы, которую выбрал из комбобокса. Так как данные из BD1 выбираются из разных таблиц, то соответственно в newTable (BD2) они могут быть сохраненными не по порядку ( т.е. newTable будет состоять из : строка из Table1, строка из Table3, строка из Table5 ну и т.д.), так вот как сделать передачу данных из newTable в Excel, но что бы строки переданные из Table1 были записаны в диапазоне А1:А10,строки переланные из Table2 в дипозоне ячеек А11:А20 ,и так все 5 таблиц????
Я немного написал код, пожалуйста подправте и добавте что сможите. Вот так я вывожу данные в Excel:
procedure TForm1.Excel1Click(Sender: TObject);
var
i: integer;
Sheet: variant;
begin
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:= ' select * from '+ sEdit1.Text +' where numtb="Общеобразовательные_дисциплины"';
ADOQuery2.Open;
if ADOQuery2.RecordCount > 0 then
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Visible:=True;
Workbook:=Excel.Workbooks.Open('C:\Лист.xlsx');
Sheet:= WorkBook.Sheets[1];
i:=6;
ADOQuery2.First;
while not ADOQuery2.Eof do
begin
Sheet.Range['B1', EmptyParam].EntireRow.AutoFit;
Sheet.Range'B'+IntToStri)]:=ADOQuery2.FieldByName'Предмет').AsString;
Sheet.Range['C' + IntToStr(i)]:= ADOQuery2.FieldByName('Экзамены').AsString;
Sheet.Range['D' + IntToStr(i)]:= ADOQuery2.FieldByName('Зачеты').AsString;
Sheet.Range['E' + IntToStr(i)]:= ADOQuery2.FieldByName('Курсовые').AsString;
Sheet.Range['G' + IntToStr(i)]:= ADOQuery2.FieldByName('Всего').AsString;
Sheet.Range['H' + IntToStr(i)]:= ADOQuery2.FieldByName('Теоритические').AsString;
Sheet.Range['I' + IntToStr(i)]:= ADOQuery2.FieldByName('Лабораторные').AsString;
Sheet.Range['J' + IntToStr(i)]:= ADOQuery2.FieldByName('Курсовое проектиров').AsString;
ADOQuery2.Next;
i:=i+1
end;
ADOQuery2.Close;
end;
end;
///////
ADOQuery2.SQL.Text:= ' select * from '+ sEdit1.Text +' where numtb="Общеобразовательные_дисциплины"';//Общеобразовательные_дисциплины- это запись с комбобокса, получается что в Excel выводятся данные где есть эта запись.
соответственно мне так же нужно добавить и остальные записи с комбобокса, но только я незнаю куда их вписать в код, и как указать диапазон для каждой записи, подскажите.
nikitos_EKB
Дата: 15.05.2011 01:37:03
Johnmen,
вообще то я просто обратился за советом, и если не чем человек не в состоянии помочь, то совсем не обязательно писать сообщения про "тараканов", можно просто ни чего не отвечать, то что это мои тараканы я и без него вкурсе.