Перейти к содержанию
Fire Monkey от А до Я
  • 0

OLE Automation (Excel) и FMX


i.r.khayrullin

Вопрос

Добрый вечер!

Перевожу один свой проект на FMX, и сразу же проблема - не смог найти возможности связаться с Excel. В VCL необходимые компоненты есть, а тут нет.

Есть какие-нибудь способы решить проблему? Или может я просто не там смотрел, и есть возможность использовать OLE в FMX? Кроссплатформенность не требуется, работа только под Windows.

Буду рад любому совету, проект очень важный для меня.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
6 минут назад, Vitaldj сказал:

Давно использую http://www.tmssoftware.com/site/flexcel.asp

Он использует именно подключение к Excel, или открывает файлы независимо от него? Непонятно из описания. Это важно, потому что у меня в файлах Excel для вычисления используются надстройки, которые не будут работать без самого Экселя.

И уж больно он дорогой :(

Ссылка на комментарий
  • 0

Этот компоте делает ВСЕ! И без экселя. Читает, пишет, все нативно! И очень быстро. Причем хоть в windows, хоть в маке или даже в андроиде или iOs! Везде!

Ссылка на комментарий
  • 0
3 минуты назад, Vitaldj сказал:

Этот компоте делает ВСЕ! И без экселя. Читает, пишет, все нативно! И очень быстро. Причем хоть в windows, хоть в маке или даже в андроиде или iOs! Везде!

Тогда он не подходит. Мне необходимо с Экселем, с запуском надстроек и макросов. Андроид тоже не нужен.

1 минуту назад, Vitaldj сказал:

в 125 баксов входит 2 года поддержки

Для кого-то, возможно, это и решение. Но, увы, у меня совершенно другая задача :(

Ссылка на комментарий
  • 0
Только что, i.r.khayrullin сказал:

Тогда он не подходит. Мне необходимо с Экселем, с запуском надстроек и макросов. Андроид тоже не нужен.

Для кого-то, возможно, это и решение. Но, увы, у меня совершенно другая задача :(

Что именно в надстройках и макросах? OLE для Microsoft Office в чистом виде для FMX вроде нет

Ссылка на комментарий
  • 0
Только что, Vitaldj сказал:

Что именно в надстройках и макросах? OLE для Microsoft Office в чистом виде для FMX вроде нет

Там, в общем-то, вся суть происходящего. Без этого ничего работать не будет. Надстройка - черный ящик - выдает данные, которые берет неизвестно откуда. Макрос управляет надстройкой.

Плохо если нет :(

Может есть возможность использовать OLE с поздним связыванием? 

Ссылка на комментарий
  • 1

В общем, когда писал дипломку, тоже использовал работу с Экселем. Вы можете пользоваться так же как и в ВЦЛ"е. Я кажется с этого сайта брал инфу. Все прекрасно записывало и сохраняло в файл

Ссылка на комментарий
  • 0
1 минуту назад, Сысоев Максим сказал:

В общем, когда писал дипломку, тоже использовал работу с Экселем. Вы можете пользоваться так же как и в ВЦЛ"е. Я кажется с этого сайта брал инфу. Все прекрасно записывало и сохраняло в файл

Это как раз и есть позднее связывание (по ссылке). Если это работает в Firemonkey, то будет просто замечательно. Проверю завтра утром.

Спасибо.

Ссылка на комментарий
  • 1

Щас даже зайду в вк скачаю проект скину пример как было

Вот

unit ExelExporterModel;

interface

uses

  modelDB,
  ComObj,
  ActiveX,
  Variants,
  Windows,
  Messages,
  SysUtils,
  Classes;

type
  TExelExport = Class
  private const
    ExcelApp = 'Excel.Application';
  public
    Class Function ExelExist: Boolean;
    Class procedure SaveModel(Const Model: TModelDB; FileName: String);
  End;

implementation

uses
  FMXTee.Procs;

{ TExelExport }

class function TExelExport.ExelExist: Boolean;
var
  ClassID: TCLSID;
begin
  // Ищем CLSID OLE-объекта
  Result := CLSIDFromProgID(PWideChar(WideString(ExcelApp)), ClassID) = S_OK;
end;

class procedure TExelExport.SaveModel(const Model: TModelDB; FileName: String);
var
  Excel: Variant;
  Chart: TTeeExportData;
  I: Integer;
begin
  Chart := TTeeExportData.Create;
  Excel := CreateOleObject('Excel.Application');
  try
    Excel.DisplayAlerts := False;
    Excel.Workbooks.Add;
    Excel.Range['a1'] := 'Початок етапу';
    Excel.Range['b1'] := 'Завершення етапу';
    Excel.Range['c1'] := 'Назва етапу';
    Excel.Range['d1'] := 'Кількість виконавців';
    Excel.Range['e1'] := 'Керівник робіт';
    Excel.Range['f1'] := 'Витрати';
    for I := Low(Model.ETAP_NAMES) to High(Model.ETAP_NAMES) do
    Begin
      Excel.Range['a' + (I + 2).ToString] := Model.Works[I].Start;
      Excel.Range['b' + (I + 2).ToString] := Model.Works[I].Finish;
      Excel.Range['c' + (I + 2).ToString] := Model.ETAP_NAMES[I];
      Excel.Range['d' + (I + 2).ToString] := Model.Works[I].CountExecutors;
      Excel.Range['e' + (I + 2).ToString] := Model.Works[I].PerformanceManager;
      Excel.Range['f' + (I + 2).ToString] := Model.Works[I].Expenses;
    End;
    Excel.ActiveWorkbook.SaveAs(FileName);
  finally
    Excel.ActiveWorkbook.Close;
    Excel.Application.Quit;
    Chart.Free;
  end;
end;

end.

 

Изменено пользователем Сысоев Максим
Ссылка на комментарий
  • 0
6 минут назад, Vitaldj сказал:

А можно вопрос? Зачем ты переходишь на FMX, если ты изначально написал, что программа будет использоваться только в Windows?

FMX мне нравится. Многое в нем делается удобнее и быстрее. К тому же, сейчас большую часть проектов делаю именно на нем. Из VCL остались только старые, которые хочу перевести, в том числе с целью унификации.

Плюс - тренировка. Я так то особо не программист, для меня это скорее хобби.

Ссылка на комментарий
  • 0
11 минуту назад, i.r.khayrullin сказал:

FMX мне нравится. Многое в нем делается удобнее и быстрее. К тому же, сейчас большую часть проектов делаю именно на нем. Из VCL остались только старые, которые хочу перевести, в том числе с целью унификации.

Плюс - тренировка. Я так то особо не программист, для меня это скорее хобби.

Понятно. Я тоже далеко не программист, но перешел из FMX именно из за кросплатформенности. Если бы надо было писать только для windows, остался бы на VLC))

Ссылка на комментарий
  • 0

FMX позволяет писать красивые программы, а VCL - полезные.

почувствуйте разницу ))

я вот пытаюсь сейчас FMX форму в свое старое VCL приложение вставить, чтобы задействовать DirectX для отрисовки карты

Ссылка на комментарий
  • 0

Итак, выход нашелся.

Я просто подключил VCL пакеты к FMX приложению, и создал необходимые мне компоненты динамически.

Странно, что мне не пришло это в голову сразу.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...