Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [delphi] dbgrid


Автор: devyshko 26.12.2007, 14:14
есть dbgrid, в котором табличка. подскажите, как обратиться к конкретной ячейке и извлечь из неё данные.

Автор: Rodman 26.12.2007, 17:29
обрабатываешь событие OnCellsClick и там пишешь 
Код

showmessage(Query.Fields.Fields[1].asstring);//Query контрол из которого тянуться данные

Автор: devyshko 27.12.2007, 21:42
Rodman,  спасибо...

теперь я пыталась всё что в гриде..перекинуть в excel
к нему всё нормально подключилась..как записать в excel тоже знаю

поняла, что инфа извлекается из квери, а не напрямую из грида, ну вот что-то ничего не получилось :(

Автор: Данкинг 27.12.2007, 23:41
Как-то примерно так:  smile 
Код

for j:=0 to zapros.FieldCount-1 do
 excel.activeworkbook.activesheet.cells.item[1,j+1]:=zapros.Fields[j].AsString;


А вообще - ищи топики про экспорт из таблиц в Excel, примеров достаточно.

Автор: devyshko 27.12.2007, 23:52
сейчас нет возможности проверить, а он не выведет ли всего одну строку (или столбец)?

Автор: Данкинг 28.12.2007, 00:56
Цитата(devyshko @ 27.12.2007,  23:52)
сейчас нет возможности проверить, а он не выведет ли всего одну строку (или столбец)?

Мой пример просто первую строчку в Excel заполняет, но это же именно пример. smile 

Автор: devyshko 28.12.2007, 01:27
smile спасибо конечно, но проблема именно в том..как перейти на следуюшую строку
нашла вот примерчег, но что есть table (если это компонент Ttable...то да.кидала я его на форму, но чё там с ним дальше делать не знаю) в общем вот так smile
Код

  Table1.First;
      i1:=1;
   for i:=1 to Table1.RecordCount do begin
   ProgressBar1.Position := 100* i div Table1.RecordCount;
      for j:=1 to DBGrid1.Columns.Count do
      Sheet.Cells(i1,j):=DBGrid1.Fields[j-1].Value;
      col:=XLApp.WorkBooks[1].WorkSheets[1].Columns.autoFit;
      i1:=i1+1;
      Table1.Next;
   end;


а...ну и что такое ProgressBar1 он тоже не знает)

Автор: Данкинг 28.12.2007, 02:15
ProgressBar1 - это строка прогресса, в моём нижеследующем примере она "gauge" (можно её вообще выкинуть пока что). В твоём примере (ИМХО не самом наглядном) Table1 - это именно таблица, её надо подключить к таблице в базе данных (я подключаюсь через ADO).
Переход на следующую строку в твоём примере - Table1.Next; (переход в таблице к следующей строке, "next"). А для перехода на следующую строку на листе ёкселя следует завести переменную (в твоём примере i1) и соответственно увеличивать её на единицу при каждом Table1.Next.

Мой пример выдран из программы, которая из DBF экспортирует в XLS с нужными мне условиями (ex - типа variant). Разбирайся... smile 
Код

zapros.Close;
zapros.SQL.Clear;
zapros.SQL.Text:=sq;
zapros.Open;
ex:=createoleobject('excel.application');
ex.visible:=false;
ex.DisplayAlerts:=False;
ex.workbooks.add;
ex.activeworkbook.sheets[1].activate;
try
Ex.ActiveSheet.PageSetup.centerfooter:=bsSkinEdit1.Text;
ex.ActiveSheet.PageSetup.Orientation := xlLandscape;
ex.ActiveSheet.PageSetup.topmargin:=0;
ex.ActiveSheet.PageSetup.leftmargin:=0;
ex.ActiveSheet.PageSetup.rightmargin:=0;
Ex.ActiveSheet.PageSetup.rightfooter:='&P';
Ex.ActiveSheet.PageSetup.PrintTitleRows := '$1:$1';

except
end;
ex.activeworkbook.activesheet.Rows[1].Font.Bold := True;
ex.activeworkbook.activesheet.Rows[1].HorizontalAlignment := 3;
for i:=0 to zapros.FieldCount-1  do
  begin
  ex.activeworkbook.activesheet.cells.item[1,i+1]:=zapros.Fields[i].FieldName;
  ex.activeworkbook.activesheet.Cells[1,i+1].Borders.lineStyle := 1;
  if (zapros.Fields[i].FieldName='recno2') or (zapros.Fields[i].FieldName='ves') then ex.activeworkbook.activesheet.cells.item[1,i+1].ColumnWidth := 5 else ex.activeworkbook.activesheet.cells.item[1,i+1].ColumnWidth := 30;
  end;

zapros.First;
for i:=1 to zapros.RecordCount do
 begin
 gauge.Value:=i;
 application.ProcessMessages;
 ex.activeworkbook.activesheet.Rows[i].HorizontalAlignment := 3;
 for j:=0 to zapros.FieldCount-1 do
  begin
  ex.activeworkbook.activesheet.cells.item[i+1,j+1]:=zapros.Fields[j].AsString;
  ex.activeworkbook.activesheet.Cells[i+1,j+1].Borders.lineStyle := 1;
  ex.activeworkbook.activesheet.Cells[i+1,j+1].WrapText:=true;
  end;
 zapros.Next;
 end;


fn:=extractfilepath(opener.FileName)+'ves_'+trim(bsSkinEdit1.Text);
Ex.ActiveWorkbook.SaveAs(fn);
ex.application.quit;
ex:=unassigned;
bsSkinMessage1.MessageDlg ('Работа окончена!',mtinformation,[mbyes],0);
gauge.Visible:=false;
end;


Автор: devyshko 28.12.2007, 21:27
спасиб..спасиб..спасиб...
это поняла, чёт даже вопросов пока нет   smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)