Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Отчеты в Excel – несоответствие между Exc97 и 2003


Автор: Оленька 4.7.2005, 18:08
Добрый день.
Я обращалась недавно к вам с вопросом о формировании отчетов в excel. Все отлично работает. Но возникла заковыка – есть еще такие компьютеры на планете, которые тянут Windows98 и Office97. И как не прискорбно, мне нужно ставить программу именно на такой машине.
Сразу же вылезли глюки, связанные с тем, что СУБД у меня – Access2003. Я не отчаялась – создала на свое машине виртуальный диск с Windows98 и Office97, Delhi поставила 7-ой.
Но возникла ошибка с которой я не представляю – как бороться smile
Код

ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(ex_file2, 1));

Ошибка типа EOleException «использован старый формат, либо библиотека имеет неверный тип».
Заранее благодарю. smile


Автор: YurikGL 5.7.2005, 08:48
Работаю через компоненты для Office2000 и проблем нет.

Автор: ~FoX~ 5.7.2005, 09:01
Оленька
Не юзай VCL работай через ComObj

Код

uses
  ComObj;

var
  ExApp: OLEVariant;
begin
  try
    ExApp := CreateOleObject('Excel.Application');
  except
    Exit;
  end;

И поехали. А вообще аксес сам умеет экспорт таблиц делать.

Автор: Оленька 5.7.2005, 09:14
YurikGL, а сам офис у тебя установлен 97 или 2000?
FoX, я работаю через ComObj:
Код

uses
  OleServer, ComObj, Excel97;
var
    ExcelApplication1: TExcelApplication;
    ExcelWorkbook1: TExcelWorkbook;
    ExcelWorksheet1: TExcelWorksheet;
begin
    try
      begin
        ExcelApplication1.Connect;
        fl_rep:=true;
      end;
    except
      ShowMessage('Нет доступа к серверу Excel');
    end;
    if fl_rep = true then
      begin
          [color=red]ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(ex_file, 1)); //ошибка тут [/color]
          ExcelApplication1.Visible[1]:=true;
        end;
end;

Автор: offline 5.7.2005, 10:05
Код


interface

uses
  ..., excel97, excel2000, excelXP, ...

...

procedure TfrmObmen.butToExcelClick(Sender: TObject);
var
  MyExcel: Variant;
begin
  MyExcel:=CreateOleObject('Excel.Application');//переменная Экселя
  MyExcel.WorkBooks.Add;//Добавить документ
  ...
  ну и здесь твари что хочешь через MyExcel
  MyExcel.Columns['A:E'].NumberFormat := '@';//истановить диапазон как текст
  ...
end;

Автор: Оленька 5.7.2005, 10:30
Большое спасибо, kirilllius. smile

Автор: offline 5.7.2005, 10:44
Ну что, заработало или smile ?

Автор: Оленька 5.7.2005, 16:00
да вроде заработало, но так все прийдеться переделывать. Вот так всегда - начинаешь использовать стандартные компоненты, а потом все равно приходиться писать все вручную smile

Автор: offline 5.7.2005, 16:17
Красота и работоспособность, требуют жертв smile

Автор: Akella 5.7.2005, 16:47
kirilllius
Цитата(kirilllius @ 5.7.2005, 10:05)
uses
  ..., excel97, excel2000, excelXP, ...

в этом случае всё будет прихватываться из excel97 в первую очередь, что не найдено - в excel2000, а уж потом в excelXP - каша получается

Автор: YurikGL 5.7.2005, 20:26
У меня установлены компоненты для Office2000. А экспорт вроде работает и в 97 и в 2000 и в XP....
Хотя именно с Excel я бы посоветовал работать через CreateOleObject

Автор: Akella 6.7.2005, 10:02
Через ранее связывание работает быстрее, хотя бы потому, что ошибки проверяются уже на стадии компилирования

Автор: Оленька 6.7.2005, 13:14
а что за ранее связывание?

Автор: Akella 6.7.2005, 14:26
Ну, когда ты кладёшь компоненту TExcelApplicatin - это раннее связывание


Цитата(kirilllius @ 5.7.2005, 10:05)
var
  MyExcel: Variant;
begin
  MyExcel:=CreateOleObject('Excel.Application');//переменная Экселя

это позднее связывание
все проверки на ошибки, например, на соответствие типов проверяются на стадии выполнения проги

Автор: Оленька 6.7.2005, 15:53
так вот у меня возникла ошибка, когда я пыталась сделать ранее связывание в excel97. Я вначале так и делала, намного удобнее и в excel2003 все отлично работало, а теперь приходиться переписывать smile(((((((

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)