Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi: экспорт из DBGrid в MS Excel - ошибка 
V
    Опции темы
Solominka
Дата 21.4.2011, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем нужен экспорт выделенной строки из DBGrid в MS Excel.
Очень хотелось бы узнать, как это реализовать.
К слову, экспорт у меня пока не работает совсем даже обычный, пишу вот такой код:

Код

procedure TForm9.BitBtn1Click(Sender: TObject);

var
i,j,index: Integer;
ExcelApp,sheet: Variant;
begin
 ExcelApp := CreateOleObject('Excel.Application');
 ExcelApp.Visible := False;
 ExcelApp.WorkBooks.Add(-4167);
 ExcelApp.WorkBooks[1].WorkSheets[1].name := 'Export';
 sheet:=ExcelApp.WorkBooks[1].WorkSheets['Export'];
 index:=1; //Загоняем с первой строки
 DBGrid1.DataSource.DataSet.First;
      for i:=1 to  DBGrid1.DataSource.DataSet.RecordCount do
      begin
      for j:=1 to DBGrid1.FieldCount do
      sheet.cells[index,j]:=DBGrid1.fields[j-1].asstring;
      inc(index);
      DBGrid1.DataSource.DataSet.Next;
      end;
 ExcelApp.Visible := true;

end;


Пишет ошибку "Undeclared identifier: 'CreateOleObject'".
В чём может быть дело?
PM MAIL   Вверх
Novichek27
Дата 21.4.2011, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



procedure Excel2();
Код

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:='Отчёт'; // + ' ' + Form1.Edit1.Text;
 Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт по запросу'].Columns;
 Colum.Columns[1].ColumnWidth:=50;
 Colum.Columns[2].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:=clBlue;
 Colum.Rows[1].Font.Size:=12;

 Sheet:=XLApp.Workbooks[1].WorkSheets['Отчёт по запросу'];
 Sheet.Cells[1,1]:=IntToStr(Form1.DBGrid1.SelectedRows.Count);
 Sheet.Cells[1,2]:='Заголовок';
 Sheet.Cells[2,1]:='Имя 1-го столбца';
 Sheet.Cells[2,2]:='Имя 2-го столбца';

 index:=3;
 Form1.ADOQuery.First;
 with Form1.DBGrid1.DataSource.DataSet do
 begin
 Form1.ADOQuery.DisableControls;
 for i:=0 to Form1.DBGrid1.SelectedRows.Count-1 do
  begin
  GotoBookmark(pointer(Form1.DBGrid1.SelectedRows.Items[i]));
   Sheet.Cells[index,1]:=Form1.ADOQuery1.Fields.Fields[0].AsString;
   Sheet.Cells[index,2]:=Form1.ADOQuery1.Fields.Fields[1].AsString;
   Inc(index);
  Form1.ADOQuery1.Next;
  end;
  end;
  fForm1..ADOQuery1.EnableControls;
end;


вот для примера, попробуй...

Добавлено @ 19:59
а вообще в uses ComObj, OleCtrls объявлены?

Это сообщение отредактировал(а) Novichek27 - 21.4.2011, 20:24
PM   Вверх
Solominka
Дата 21.4.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Novichek27, к сожалению, ошибок ещё больше... =__=

Добавлено через 1 минуту и 10 секунд
Цитата

а вообще в uses ComObj, OleCtrls объявлены?


Ээээ... Нет... А как объявить?
Я просто что-то нигде этого не нашла...
PM MAIL   Вверх
Novichek27
Дата 21.4.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в самом начале Unit'a

Код

unit Unit1;

interface

uses
  SysUtils, Classes, DB, ADODB, Messages, ComObj, OleCtrls; //здесь

PM   Вверх
~FoX~
Дата 21.4.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



Цитата(Solominka @  21.4.2011,  21:11 Найти цитируемый пост)
Ээээ... Нет... А как объявить?

 smile  smile  smile 
В третьей секции проекта

Код

unit Unit1;
//.........
interface
//...........
uses
  Windows, ComObj, OleCtrls;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Solominka
Дата 21.4.2011, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Объявила... Но выдаёт ошибки...
Почти всё поняла откуда взялось и как исправить... Но на что исправлять 

Код

 GotoBookmark(pointer(frmORDER.DBGrid1.SelectedRows.Items[i]));


Конкретно, жалуется на frmORDER
PM MAIL   Вверх
~FoX~
Дата 21.4.2011, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



Это дбгрид лежащий на форме с названием frmORDER.... Ни в твоем ни в коде Novichek27, нету объявления этой формы.... Где ты ее вообще нашел???

Добавлено через 20 секунд
Цитата(Novichek27 @  21.4.2011,  20:55 Найти цитируемый пост)
GotoBookmark(pointer(Form1.DBGrid1.SelectedRows.Items[i]));





--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Novichek27
Дата 21.4.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Конкретно, жалуется на frmORDER 



frmORDER  - это имя формы, просто переименуй на Form1 
PM   Вверх
Solominka
Дата 21.4.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



~FoX~, спасибо, убрала строчку - заработало.
Но теперь другая проблема, при открытии Excel выходит ошибка "Неверный индекс"
выделяет строчку
Код

 Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт по запросу'].Columns;

PM MAIL   Вверх
~FoX~
Дата 21.4.2011, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



Solominka, В книге должен быть лист с названием 
Цитата(Solominka @  21.4.2011,  22:26 Найти цитируемый пост)
['Отчёт по запросу']


Добавлено через 49 секунд
Проще обращаться по индексу...


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Solominka
Дата 21.4.2011, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Проще обращаться по индексу... 


А как мне это сделать, если у меня, допустим, стандартно, Лист1...?
PM MAIL   Вверх
~FoX~
Дата 21.4.2011, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

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



Код

.WorkBooks[1].WorkSheets[1]........



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Novichek27
Дата 21.4.2011, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



или вместо ['Отчёт по запросу'] пиши ['Лист1']

Это сообщение отредактировал(а) Novichek27 - 21.4.2011, 21:41
PM   Вверх
Solominka
Дата 21.4.2011, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

или вместо ['Отчёт по запросу'] пиши ['Лист1']


Спасибо, я так и сделала smile

Ещё пара вопросиков по теме. Нужно, чтобы был экспорт только выделенной строки, а не всего DBGrid-а. Как это реализовать?

PM MAIL   Вверх
Novichek27
Дата 21.4.2011, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



эту строчку верни на место

Цитата

GotoBookmark(pointer(Form1.DBGrid1.SelectedRows.Items[i]));



DBGrid1 сделай MultiSelect  в настройках Options 

и пробуй...

Добавлено через 10 минут и 39 секунд
Цитата

Ещё пара вопросиков по теме. Нужно, чтобы был экспорт только выделенной строки, а не всего DBGrid-а. Как это реализовать?


вообще-то это и был вопрос темы

Это сообщение отредактировал(а) Novichek27 - 21.4.2011, 22:02
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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