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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 09:42   #1
funball
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 44
По умолчанию ADO и Excel, несколько практических вопросов:)

Всем здравствуйте.

Реализовал экспорт в эксель по аналогии с предыдщиих тем форума и так как не силен в этой теме есть несколько вопросов как что реализовать:
- как реализовать экспорт в определенный файл(с нужным мне названием), в определенное место на съемном диске...а не онлайн, как у меня есть сейчас?
- как сделать в этом же Exce-ле второй лист, тритий и т.д. и туда тоже экспортировать данные?
- как задать имя листа на который экспортируем в Excele?
- как экспортировать график?
- возможно ли разукрасить Excel?,например залить все белым цветом и т.д.?
- где можно почитать подробно про эту тему?

Вот мой простинький код:
Код:
procedure TForm3.Button2Click(Sender: TObject);
var
XL, XArr: Variant;
i: Integer;
j: Integer;
begin
    begin
    ADOQuery1.Active:=false;
    ADOQuery1.SQL.Text:='select * from V_MSV_DETALNIK';
    ADOQuery1.Active:=true;
    end;
 XArr:=VarArrayCreate([1,DBGrid1.FieldCount],varVariant);
 XL:=CreateOLEObject('Excel.Application');     // Создание OLE объекта
 XL.WorkBooks.add;
 XL.visible:=true;

 for i := 0 to DBGrid1.FieldCount - 1 do begin
   XL.Cells[1,i+1].Value := DBGrid1.Fields[i].FieldName;
 end;
 XL.Range['A1',CHR(64+DBGrid1.FieldCount)+'1'].Font.Bold := True;

 j := 1;
 DBGrid1.DataSource.DataSet.First;
 while not DBGrid1.DataSource.DataSet.Eof do
  begin
   i:=1;
   while i<=DBGrid1.FieldCount do
    begin
     XArr[i] := DBGrid1.Fields[i-1].Value;
     i := i+1;
    end;
   XL.Range['A'+IntToStr(j+1),
   CHR(64+DBGrid1.FieldCount)+IntToStr(j+1)].Value := XArr;
   DBGrid1.DataSource.DataSet.Next;
   j:=j+1;
  end;
 XL.Range['A1',CHR(64+DBGrid1.FieldCount)+IntToStr(j+1)].select;
 // XL.cells.select;                     // Выбираем все
 XL.Selection.Font.Name:='Arial cur';
 XL.Selection.Font.Size:=10;
 XL.selection.Columns.AutoFit;
 XL.Range['A1','A1'].select;
end;
Буду благодарен за любую помощь.
funball вне форума
Старый 30.11.2009, 10:00   #2
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

есть просто замечательная книга, называется Программирование документов и приложений MS Office в Delphi [В. Корняков]
Тыщу раз эта тема поднималась, пользуйтесь поиском!!!
©Учиться, учиться и еще раз учиться!
quit вне форума
Старый 30.11.2009, 10:40   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как реализовать экспорт в определенный файл
Просто сохрани свой "онлайн"
XL.SaveAs('c:\temp\My.xls');
Цитата:
как задать имя листа на который экспортируем в Excele?
Если не опшибаюсь:
Код:
Xl.ActiveSheet.Name:='Лист мой';
Цитата:
- возможно ли разукрасить Excel?,например залить все белым цветом и т.д.?
- где можно почитать подробно про эту тему?
Ну как всегда:

Хелп
Гугл
Корняков В.Н. «Программирование документов и приложений MS Office в Delphi»
I'm learning to live...
Stilet вне форума
Старый 30.11.2009, 11:18   #4
funball
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 44
По умолчанию

Всем спасибо, буду разбираться.

А почему у меня автоматически не предлагается выбирать различные доступные свойства работы над XL при нажатии ctrl+пробел? и некоторый текст выделен красным, это специфика работы с удаленными приложениями? Или может чего недоустановлено у меня?
Использую codegear2007.

Последний раз редактировалось Stilet; 01.12.2009 в 10:21.
funball вне форума
Старый 01.12.2009, 10:22   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А потому что делфи не импортировала библиотеку типов экселя, она не умеет это делать налету, ей неизвесно что ты там подключаешь.
I'm learning to live...
Stilet вне форума
Старый 02.12.2009, 09:45   #6
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
Сообщение от funball Посмотреть сообщение
А почему у меня автоматически не предлагается выбирать различные доступные свойства работы над XL при нажатии ctrl+пробел? и некоторый текст выделен красным, это специфика работы с удаленными приложениями? Или может чего недоустановлено у меня?
Использую codegear2007.
Уточню для автора чтобы было понятно "почему не предлагается".
Работа с COM серверами (а установленный в Windows MS Excel - это типичный COM сервер) предполагается в двух вариантах. Один вариант называют "позднее связывание". Типичный признак - подключение к серверу через переменную типа Variant и создание некоего OLE объекта:
Код:
var
  XlApp : Variant;
begin
  XLApp:= CreateOleObject('Excel.Application');
  ...
end;
Другой - "раннее связывание". Признак: непосредственное подключение к серверу на этапе компиляции:
Код:
var
  XL: TExcelApplication;
begin
  XL := TExcelApplication.Create(nil);
  ...
end;
Вся эта терминологистика, на самом деле немного сложнее, но для некоторых базовых понятий сгодится и приведенная.

Тогда понятно, почему Дельфи не может предложить методы сервера при кодировании, если используется позднее связывание - методы сервера будут доступны только при работе программы. Другое дело раннее связывание. Здесь компилятор Дельфи уже "знает" с чем он работает и может предложить все то, что экспортирует COM сервер.

В общем виде, где то так. Все это описание более подробно можно найти в Сети, в частности на http://www.delphikingdom.com/ при поиске по КС или статьям.
Скандербег вне форума
Старый 02.12.2009, 09:47   #7
funball
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 44
По умолчанию

Спасибо Скандербег, теперь все понянтно.
Вложения
Тип файла: rar не идет.rar (217.9 Кб, 20 просмотров)

Последний раз редактировалось funball; 02.12.2009 в 09:52. Причина: поздний ответ...
funball вне форума
Старый 02.12.2009, 09:58   #8
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Все про Excel через Delphi: "Excel ЧаВо"
http://www.delphikingdom.com/asp/users.asp?ID=1262

Последний раз редактировалось Скандербег; 02.12.2009 в 10:03. Причина: Виноват, ссылка получилась несуразная, теперь правильная
Скандербег вне форума
Старый 03.12.2009, 10:50   #9
funball
Пользователь
 
Регистрация: 13.04.2009
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
Все про Excel через Delphi: "Excel ЧаВо"
Скандербег, в чем может быть причина что не именуется лист, код вроде верно написал:
Код:
procedure TForm3.Button3Click(Sender: TObject);
begin
  EEE := TExcelApplication.Create(nil);
  //try
    EEE.ConnectKind := ckNewInstance;
    EEE.Connect; // подключение
    EEE.AutoQuit := False; // по умолчанию это свойство True только в unit ExcelXP
    EEE.Visible[lcid] := True;
    EEE.SheetsInNewWorkbook[lcid]:=5;
    EEE.Workbooks.Add(EmptyParam,lcid);
    ASheet.ConnectTo(EEE.ActiveWorkbook.Sheets[1] as _Worksheet);
    ASheet.Name:='Книhjjhjhjh';

    // здесь работаем с Excel'ем
(*  finally
    // отсоединяемся
    EEE.UserControl := True; // отдадим управление пользователю
    EEE.Quit; // закрыть Excel
    EEE.Disconnect;
    FreeAndNil(EEE);
  end;   *)
end;
и ошибку еще приписывает:Access violation at address 004DDAE2 in modul...
funball вне форума
Старый 03.12.2009, 13:12   #10
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Так переименовывает и без ошибок:
Код:
    ...
  (EEE.ActiveWorkbook.ActiveSheet as _Worksheet).Name := 'Привет';
//    ASheet.ConnectTo(EEE.ActiveWorkbook.Sheets[1] as _Worksheet);
//    ASheet.Name:='Книjjhjhjh';
  //а так для листа с указанным номером
    (EEE.ActiveWorkbook.Sheets[2] as _Worksheet).Name := 'Hello';

Последний раз редактировалось Скандербег; 03.12.2009 в 13:26. Причина: добавлено для нумерованных листов
Скандербег вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несколько вопросов по C Horus92 Общие вопросы C/C++ 2 15.11.2009 16:08
БД - Несколько вопросов lutdan БД в Delphi 3 11.10.2009 20:22
несколько вопросов fitc Общие вопросы Delphi 28 14.07.2009 21:20
Несколько вопросов Зубоскалик Общие вопросы Delphi 14 20.11.2008 14:28
Несколько Вопросов Дорст Общие вопросы Delphi 3 12.11.2007 09:18