Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отчет в Excele, Из DBGrid в Excel 
:(
    Опции темы
Demo
  Дата 12.12.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.10.2006

Репутация: нет
Всего: нет



Здавствуйте, уважаемые программисты! Очень срочно нужна ваша помощь!!!
В DBGrid создаю таблицу из БД при помощи запроса, а затем необходимо данные из DBGrid отправить в Excel. НО!!! Тут возникла проблема... 
Пишу код:

 index:=2;
  DBGrid1.SelectedField.Value;
  for i:=0 to DBGrid1.FieldCount do
   begin
     Sheet.Cells[3,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[1].AsString;
     Sheet.Cells[4,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[3].AsString;
     Sheet.Cells[5,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[5].AsString;
     Sheet.Cells[7,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[8].AsString;
     Inc(index);
     DBGrid1.SelectedField.NewValue;
   end;

Я переворчиваю таблицу - строки становятся столбцами..... 
Но столбцов всего 11, а строк 200, в Итоге получается таблица 11х11, и то построчно повторяются данные...
Скажите, пожалуйста, как лучше это сделать?
Была попытка с использованием промежуточного компонента Memo, но пришлось отказаться...Много всталяю формул, объединяю поля, шрифты везде разные... Из DBGrid отправляю в Excel не все поля, а только те, которые нужны...
Пожалйста! Очень срочно нужен совет!!!
PM MAIL   Вверх
SergeBS
Дата 12.12.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Demo, 
Цитата

for i:=0 to DBGrid1.FieldCount do

Цикл выполнится FieldCount раз. Если FieldCount = 11 - получишь 11 строк.
Несколько раз нажмешь на кнопку - получишь 11* несколько.
Пиши цикл правильно.

Добавлено @ 17:49 
Ой. Ошибся. В Excel - Row,Col, т.е. получишь 3.4.5.7 строки заполненными.
PM MAIL   Вверх
Savek
Дата 12.12.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Цитата(Demo @  12.12.2006,  14:01 Найти цитируемый пост)
Я переворчиваю таблицу - строки становятся столбцами..... 

Так действительно надо или это случилось непроизвольно?
PM MAIL   Вверх
Albinos_x
Дата 12.12.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 1
Всего: 108



Цитата(Demo @  12.12.2006,  14:01 Найти цитируемый пост)
в Итоге получается таблица 11х11

Цитата(SergeBS @  12.12.2006,  17:42 Найти цитируемый пост)
Если FieldCount = 11 - получишь 11 строк.


Цитата(Demo @  12.12.2006,  14:01 Найти цитируемый пост)
и то построчно повторяются данные

значит нет перехода на новую запись...

Цитата(Demo @  12.12.2006,  14:01 Найти цитируемый пост)
Скажите, пожалуйста, как лучше это сделать?

думаю лучше будет получать данные для экселя оттуда же, откуда формируешь запрос...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
x77
Дата 13.12.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



Код

index:=2;
  DBGrid1.SelectedField.Value; // в чём сакральный смысл этой строчки?
  for i:=0 to DBGrid1.FieldCount do // ошибка, должно быть FieldCount - 1, и лучше не грида, а таблицы
   begin
     // на мой взгляд - бессмысленный цикл.
     Sheet.Cells[3,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[1].AsString;
     Sheet.Cells[4,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[3].AsString;
     Sheet.Cells[5,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[5].AsString;
     Sheet.Cells[7,index]:=DBGrid1.SelectedField.DataSet.Fields.Fields[8].AsString;
     Inc(index);
     // и что, это строка откомпилировалась??? если да, то что она делает?
     DBGrid1.SelectedField.NewValue;
   end;


пример ниже копирует ВСЕ поля текущего запроса (или таблицы - неважно) в Sheet. если хочешь копировать выборочно, то просто вместо цикла for ACol поставь несколько операторов присваивания, как у тебя.
Код

  ARow := 0;
  with DbGrid1.DataSource.Dataset do begin
    DisableControls;
    try
      Row := 0;
      First;
      while not Eof do begin
        for ACol := 0 to FieldCount - 1 do
          Sheet.Cells [ACol, ARow] := Fields [ACol].AsString;
        Inc (ARow);
        Next;
      end;
    finally
      EnableControls;
    end;
  end;


з.ы. код не копилировал и не проверял.

Это сообщение отредактировал(а) x77 - 13.12.2006, 13:54


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Sansa
Дата 18.12.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 2
Всего: 6



В JVCL есть компонент TJvDBGridExcelExport, которому надо указать DBGrid, имя файла, и выполнить метод ExportGrid

Это сообщение отредактировал(а) Sansa - 18.12.2006, 16:45
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.