Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 13:38   #1
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию Импорт из дбгрида в эксель

Подключала базу интербейс к делфи.
хочу сделать импорт данных из дбгрида в эксель. пишу код, компилирую, компилируется, открывается эксель и и все вылетает и не переносит данные в него. пишет ошибку "Неверный индекс"
раньше делала базу с подключением аксеса через адо и все работало. сейчас сделала по аналогии и получается такая фигня.
Прошу посмотрите плз код, не могу найти ошибку. Вроде все верно указывала. Заранее спасибо.

Код:
procedure TTBL.Button1Click(Sender: TObject);
 var
xlapp, sheet, colum: variant;
index,i: integer;
begin
xlapp:= CreateOleObject('excel.application');
 xlapp.visible:= true;
 xlapp.workbooks.add(-4167);
 xlapp.workbooks[1].worksheets[1].name:= 'Формуляр лекарств';
 colum:=xlapp.workbooks[1].worksheets['Отчет'].columns;
 colum.columns[1].columnwidth:=20;
 colum.columns[2].columnwidth:=20;
 colum.columns[3].columnwidth:=20;
 colum.columns[4].columnwidth:=20;
 colum.columns[5].columnwidth:=20;
 colum.columns[6].columnwidth:=20;
 colum.columns[7].columnwidth:=20;


  colum:=xlapp.workbooks[1].worksheets['Отчет'].rows;
  colum.rows[2].font.bold:= true;
  colum.rows[1].font.bold:= true;
   colum.rows[1].font.color:= clred;
   colum.rows[1].font.size:= 13;

   sheet:= xlapp.workbooks[1].worksheets['Отчет'];
   sheet.cells[1,2]:= 'Ведомость лекарств аптеки';
   sheet.cells[2,1]:= 'ИД_лекарства ';
   sheet.cells[2,2]:= 'Название лекарства ';
   sheet.cells[2,3]:= 'Код группы';
   sheet.cells[2,4]:= 'Цена';
   sheet.cells[2,5]:= 'Дата поставки';
   sheet.cells[2,6]:= 'Показания к применению';
   sheet.cells[2,7]:= 'Противопоказания';
   sheet.cells[2,8]:= 'Нехорошие последствия';


   index:=3;
   DataModule1.meds.First;
   for i:=0 to DataModule1.meds.RecordCount-1 do
   begin
   sheet.cells[index,1]:= DataModule1.meds.Fields.Fields[1].AsString;
   sheet.cells[index,2]:= DataModule1.meds.Fields.Fields[2].AsString;
   sheet.cells[index,3]:= DataModule1.meds.Fields.Fields[3].AsString;
   sheet.cells[index,4]:= DataModule1.meds.Fields.Fields[4].AsString;
   sheet.cells[index,5]:= FormatDateTime('dddddd', DataModule1.meds.Fields.Fields[5].AsDateTime);
    sheet.cells[index,6]:= DataModule1.meds.Fields.Fields[6].AsString;
    sheet.cells[index,7]:= DataModule1.meds.Fields.Fields[7].AsString;
      sheet.cells[index,8]:= DataModule1.meds.Fields.Fields[7].AsString;
   Inc(index);
   DataModule1.meds.Next;


end;


 end;
Структура таблицы

* ИД_лекарства
Название лекарства
(fk) Код фарм группы
Цена
Дата поставки
Показания к применению
Противопоказания
Нехорошие последствия

Последний раз редактировалось Ake; 22.12.2010 в 13:45.
Ake вне форума Ответить с цитированием
Старый 22.12.2010, 13:45   #2
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Index - зарезервированное дельфями слово, назовите переменную по-другому.
ZaRDaK вне форума Ответить с цитированием
Старый 22.12.2010, 13:48   #3
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

Странно, но с адо и аксесом "индекс" прокатил. В данном случае обозначает стоку в экселе, в которую вводится поле. хотя и там тоже.
Ake вне форума Ответить с цитированием
Старый 22.12.2010, 14:00   #4
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

А может быть ошибка из-за того что в в строчке
Код:
sheet.cells[index,3]:= DataModule1.meds.Fields.Fields[3].AsString;
указала текущую таблицу (meds) вместо той, на которую ссылается это поле?
Ake вне форума Ответить с цитированием
Старый 24.12.2010, 22:51   #5
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

Нашла ошибку. В строчке
Код:
 colum:=xlapp.workbooks[1].worksheets['Отчет'].columns;
нужно было вместо "Отчет" написать 1. изза этого не работало. и еще там индексы расставить правильно. Оказывается в ДБГриде столбцы с нуля нумеруются.. Не знала.
Если котото еще будет делать эспорт, выкладываю код.
Код:
procedure TTBL.Button3Click(Sender: TObject);
var
xlapp, sheet, colum: variant;
a,i: integer;
begin
xlapp:= CreateOleObject('excel.application');
 xlapp.visible:= true;
 xlapp.workbooks.add(-4167);
 xlapp.workbooks[1].worksheets[1].name:= 'Склад';
 colum:=xlapp.workbooks[1].worksheets[1].columns;
 colum.columns[1].columnwidth:=7;
 colum.columns[2].columnwidth:=10;
 colum.columns[3].columnwidth:=15;
 colum.columns[4].columnwidth:=10;
 colum.columns[5].columnwidth:=10;



  colum:=xlapp.workbooks[1].worksheets[1].rows;
  colum.rows[2].font.bold:= true;
  colum.rows[1].font.bold:= true;
  colum.rows[1].font.color:= clblue;
  colum.rows[1].font.size:= 13;

   sheet:= xlapp.workbooks[1].worksheets[1];
   sheet.cells[1,2]:= 'Сведения о лекарствах на складе';
   sheet.cells[2,1]:= 'Количество';
   sheet.cells[2,2]:= 'Код лекарства';
   sheet.cells[2,3]:= 'Срок годности';
   sheet.cells[2,4]:= 'Код поставщика';
   sheet.cells[2,5]:= 'Стоимость';

   a:=3;
   DataModule1.sclad.First;
   for i:=0 to DataModule1.sclad.RecordCount-1 do
   begin
   sheet.cells[a,1]:= DataModule1.sclad.Fields.Fields[0].AsString;
   sheet.cells[a,2]:= DataModule1.sclad.Fields.Fields[1].AsString;
    sheet.cells[a,3]:= FormatDateTime('dddddd', DataModule1.sclad.Fields.Fields[2].AsDateTime);
   sheet.cells[a,4]:= DataModule1.sclad.Fields.Fields[3].AsString;
   sheet.cells[a,5]:= DataModule1.sclad.Fields.Fields[4].AsString;

   Inc(a);
   DataModule1.sclad.Next;


end;
end;

ПС. Ссори немного не та таблица. Но все же)))

Последний раз редактировалось Ake; 24.12.2010 в 22:52. Причина: упс))
Ake вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заголовки столбцов ДБГрида из чисел календаря qwertytol БД в Delphi 2 28.10.2010 10:07
из дбэдита в конкретный столбец Дбгрида? Милана666 БД в Delphi 4 25.05.2010 08:10
импорт в эксель Demonmov Microsoft Office Excel 2 28.04.2010 10:07
Как сделать,так что бы запись в из одного ДБГрида добавлялась в другой ДБгрид Hito БД в Delphi 10 19.04.2009 21:14