экспорт в Excel 2007
От: MishaMW Россия  
Дата: 26.07.07 09:25
Оценка:
Есть проиложения, написанные на Delphi? В данный моемент репорт осуществляется путем экспорта в Excel с использованием Excel2000.pas и вариантного типа.
Но прогресс не стоит на месте и требуется переход на Excel 2007.

Как в Delphi 2006 организовать экспорт данных в Excel 2007?
Re: экспорт в Excel 2007
От: silentroach Россия  
Дата: 26.07.07 14:59
Оценка:
У меня в проекте код старый остался, в Висте на Excel 2007 все выгружается без проблем
... << RSDN@Home 1.2.0 alpha rev. 685>>
Re: экспорт в Excel 2007
От: Vodyamba Россия  
Дата: 26.07.07 22:54
Оценка:
Здравствуйте, MishaMW, Вы писали:

MMW> Есть проиложения, написанные на Delphi? В данный моемент репорт осуществляется путем экспорта в Excel с использованием Excel2000.pas и вариантного типа.

MMW> Но прогресс не стоит на месте и требуется переход на Excel 2007.

MMW> Как в Delphi 2006 организовать экспорт данных в Excel 2007?


Всё будет работать... Мы используем старые компоненты XLSReadWriteII , неохото под новые переделывать всё... Они вообще знают только про Офис 97. А на 2003 всё работает хорошо...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: экспорт в Excel 2007
От: LuciferArh Россия  
Дата: 27.07.07 05:03
Оценка:
Здравствуйте, MishaMW, Вы писали:

MMW> Есть проиложения, написанные на Delphi? В данный моемент репорт осуществляется путем экспорта в Excel с использованием Excel2000.pas и вариантного типа.

MMW> Но прогресс не стоит на месте и требуется переход на Excel 2007.

MMW> Как в Delphi 2006 организовать экспорт данных в Excel 2007?


Я вообще пользую конструкции типа
function CreateApp: Boolean;
begin
  Result := True;
  try
    xlApp := CreateOleObject('Excel.Application');
  except
    Result := False;
  end;
end;

...

procedure PrintExcel( ... );
    if CreateApp then ...


И вообще не заморачиваюсь на тему, какая версия офиса стоит у конечного пользователя.
Планета бибисяка: пива нэт, ФидоHэт, населена юзвеpями
Re[2]: экспорт в Excel 2007
От: MishaMW Россия  
Дата: 27.07.07 05:17
Оценка:
Здравствуйте, silentroach, Вы писали:

S>У меня в проекте код старый остался, в Висте на Excel 2007 все выгружается без проблем


Экспорт производится из SQL Server с использованием компонентов ADO.
На местах с установленным MS Office 2007 при передаче данных в Excel вылетает такая ошибка:
"Использован старый формат, либо библиотека имеет неверный тип"
Re[3]: экспорт в Excel 2007
От: silentroach Россия  
Дата: 28.07.07 14:48
Оценка:
Здравствуйте, MishaMW, Вы писали:

MMW>Экспорт производится из SQL Server с использованием компонентов ADO.

MMW>На местах с установленным MS Office 2007 при передаче данных в Excel вылетает такая ошибка:
MMW>"Использован старый формат, либо библиотека имеет неверный тип"

А кусочек кода глянуть можно?
Re[4]: экспорт в Excel 2007
От: MishaMW Россия  
Дата: 30.07.07 05:28
Оценка:
Здравствуйте, silentroach, Вы писали:

S>А кусочек кода глянуть можно?


Да. Вот:

uses
... OleServer,  Excel2000, ComObj;

...

var
  Template, Client_Name,Contract_Name,
    Period:String;
...
begin

...

Template := ExtractFilePath(Application.ExeName) + 'Templates\Balans.xls';

      with TExcelApplication.Create(nil) do
      begin
        AutoConnect := False;
        AutoQuit := False;
        ConnectKind := ckNewInstance;

        Connect;
        Workbooks.Add(Template, 1);
        Cells.Replace('?имя', Format('%s', [Client_Name]), xlWhole, xlByRows, false, EmptyParam);
        Cells.Replace('?договор', Format('%s', [Contract_Name]), xlWhole, xlByRows, false, EmptyParam);
        ADOQuery1 := TADOQuery.Create(nil);
        with ADOQuery1 do
        begin
          try
            Connection := DataModule2.ADOConnection1;
           ...
           //и далее запрос и вставка, запрос и вставка
           ...
        Visible[1] := true;
        Disconnect;
        Free;


это шаблон.

Точно так же и новый документ:
...
Workbooks.Add(EmptyParam, 1);
...
Re[2]: экспорт в Excel 2007
От: MishaMW Россия  
Дата: 30.07.07 11:59
Оценка:
Здравствуйте, LuciferArh, Вы писали:

LA>Я вообще пользую конструкции типа

LA>
LA>function CreateApp: Boolean;
LA>begin
LA>  Result := True;
LA>  try
LA>    xlApp := CreateOleObject('Excel.Application');
LA>  except
LA>    Result := False;
LA>  end;
LA>end;

LA>...

LA>procedure PrintExcel( ... );
LA>    if CreateApp then ...
LA>


LA>И вообще не заморачиваюсь на тему, какая версия офиса стоит у конечного пользователя.


Таким образом, конечгно работает, но гораздо медленнее. А если учесть, что и отчеты формируются значительное время, то не хотелось бы использовать такой способ.
Re[3]: экспорт в Excel 2007
От: LuciferArh Россия  
Дата: 30.07.07 12:34
Оценка:
Здравствуйте, MishaMW, Вы писали:

MMW>Таким образом, конечгно работает, но гораздо медленнее. А если учесть, что и отчеты формируются значительное время, то не хотелось бы использовать такой способ.


Это да. Есть такой минус. Но я с ним мирюсь в силу универсальности решения. Можно, конечно, формировать отчет в другом потоке, чтобы основную программу не занимать. Но это уж на вкус и цвет...
Планета бибисяка: пива нэт, ФидоHэт, населена юзвеpями
Re[5]: экспорт в Excel 2007
От: silentroach Россия  
Дата: 30.07.07 20:33
Оценка:
А валится на какой строчке?
Re[6]: экспорт в Excel 2007
От: MishaMW Россия  
Дата: 31.07.07 05:11
Оценка:
Здравствуйте, silentroach, Вы писали:

S>А валится на какой строчке?



Workbooks.Add(Template, 1);
Re[7]: экспорт в Excel 2007
От: silentroach Россия  
Дата: 31.07.07 14:29
Оценка:
А если до нее пихнуть

DisplayAlerts := False;


Здравствуйте, MishaMW, Вы писали:

MMW>
MMW>Workbooks.Add(Template, 1);
MMW>
Re[8]: экспорт в Excel 2007
От: MishaMW Россия  
Дата: 01.08.07 05:24
Оценка:
Здравствуйте, silentroach, Вы писали:

S>А если до нее пихнуть


S>
DisplayAlerts := False;


Эта команда отключает только сообщения при выполнении макросов Excel
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.