Перейти к содержимому

Фотография

F1Book.Writeне работает на машине "где нет дельфи"


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1
Лоэрта

Лоэрта
  • Завсегдатай
  • 250 сообщений
в общем, обычное дело - на моей машине работает, на той, "где нет дельфи" не работает :mad:

в компоненте F1Book создаётся отчёт, после чего его нужно сохранить в файл.
делаю:
SomeFileName := 'Some File Name.xls';
F1Book1.Write('C:\Directory\' + SomeFileName, F1FileExcel5);

не ругается, полное впечатление, что всё работает... а файла на месте нет :)

PS: на моей машине стоит wХР, на той, где не работает - w98
  • 0

#2
chainyk

chainyk
  • Частый гость
  • 79 сообщений
Я что за компонент та такой F1Book???
  • 0

#3
Jus

Jus
  • В доску свой
  • 6 402 сообщений
может, какой-нить DLL или OCX не хватает?
Может, к этому компоненту надо еще за собой какое-нибудь файло за собой тащить?
  • 0

#4
Лоэрта

Лоэрта
  • Завсегдатай
  • 250 сообщений
не, все OCX и DLL я перетащила, класс зарегистрировала - это всё работает.
в результате экспериментов выяснила, в чём проблема: F1Book создает OLE object, который пользует WideString, а в w98 всё, что остаётся от строки такого типа - только один первый символ,
т.е. имя файла получается 'С'. такой файл у меня и получается в текущей директории...
кто-нибудь может посоветовать, что с этим можно сделать?
преобразование имени файла к string не помогает - параметр pPathName всё равно WideString.
может, в более новых версиях F1Book это исправлено как-то? у меня версия 3.0.4
  • 0

#5
Jus

Jus
  • В доску свой
  • 6 402 сообщений
Тяжелый случай.....
попробуй отчеты сохранять в текстовом формате :)
  • 0

#6
Лоэрта

Лоэрта
  • Завсегдатай
  • 250 сообщений
В том-то и фишка, что задание как раз "облегчить труд" тех кто до сих пор делал эти отчёты в тхт, вставлял в excel и т.д.
Попробовала через CreateOLEObject - тоже какая-то ерунда. Свойство NumberFormat для Range не поддерживается (не на моей машине, конечно). может, это как-то решается?
  • 0

#7
Diesel_x34

Diesel_x34
  • В доску свой
  • 1 005 сообщений

не, все OCX и DLL я перетащила, класс зарегистрировала - это всё работает.
в результате экспериментов выяснила, в чём проблема: F1Book создает OLE object, который пользует WideString, а в w98 всё, что остаётся от строки такого типа - только один первый символ,
т.е. имя файла получается 'С'. такой файл у меня и получается в текущей директории...
кто-нибудь может посоветовать, что с этим можно сделать?
преобразование имени файла к string не помогает - параметр pPathName всё равно WideString.
может, в более новых версиях F1Book это исправлено как-то? у меня версия 3.0.4

Что то я не совсем понимаю... Как 98 винда может вот так вот отрезать строку до одного символа? Ну и что что WideString, разница? String в вашем случае ничем не лучше. Помоему дело не в типе строки. Можно поподробней описать как это вообще происходит?! Тоесть создается OLE object и уже при создании все нафиг режется? Так чтоль? :)

Сообщение отредактировал Diesel_x34: 07.01.2005, 12:00:42

  • 0

#8
Лоэрта

Лоэрта
  • Завсегдатай
  • 250 сообщений
может, не винда, скорее всего это компонент так работает...
не могу сказать в какой момент строка обрезается, потому как всё, что я смогла придумать - проставить Showmessage(pPathName) до и после процедуры DefaultInterface.Write внутри TF1Book.Write из VCF1, оба раза появилось сообщение 'C:\Directory\Some File Name.xls'. ...и создался файл с именем 'С'.
опять же всё, что могу предположить на этот счёт - Showmessage требует параметр string и спокойно преобразует к нему pPathName: Widestring.
а почему так не делает этот ActiveX, даже предположить не могу.
  • 0

#9
Diesel_x34

Diesel_x34
  • В доску свой
  • 1 005 сообщений

может, не винда, скорее всего это компонент так работает...
не могу сказать в какой момент строка обрезается, потому как всё, что я смогла придумать - проставить Showmessage(pPathName) до и после  процедуры DefaultInterface.Write внутри TF1Book.Write из VCF1, оба раза появилось сообщение 'C:\Directory\Some File Name.xls'. ...и создался файл с именем 'С'.
опять же всё, что могу предположить на этот счёт - Showmessage требует параметр string и спокойно преобразует к нему pPathName: Widestring.
а почему так не делает этот ActiveX, даже предположить не могу.

Да уж, задачка конечно интересная. Но без непосредственного просмотра кода скорее всего не разобраться. Может LowerCase попробовать. Ну так, на всякий случай. Или пойти вообще хитрым путем... Просто напросто копировать этот файл 'C' в 'C:\Directory\Some File Name.xls', как только вы будете уверены что он уже создался. Эко конечно не есть правильно, но пока можно обойтись и этим. А как разберетесь, код не долго закомментарить! :)
  • 0

#10
Лоэрта

Лоэрта
  • Завсегдатай
  • 250 сообщений
забыла раньше сказать, попробовала переименовать - но все текстовые данные внутри отчёта тоже обрезаны до 1 символа :)
пока сделала всё-таки через CreateOLEObject, просто убрала форматирование ячеек (NumberFormat). немного некрасиво, конечно когда суммы выводятся с разным количеством цифр поле запятой, зато пока работает ;) благо, офис на той машине такой же, что и у меня.

Но без непосредственного просмотра кода скорее всего не разобраться.

procedure TForm1.Button1Click(Sender: TObject);
begin
F1Book1.Write('C:\Directory\Some File Name.xls', F1FileExcel5);
end;

собственно, весь код тестовой проги. на форме - кнопка и F1Book.
скомпилить в хр, запусить в 98.
спасибо всем за ответы :mad: если узнаете, как решить проблему с F1book - пожалуйста, напишите, мне это всё ещё нужно...

Сообщение отредактировал Лоэрта: 08.01.2005, 13:20:14

  • 0

#11
Коляныч

Коляныч
  • В доску свой
  • 2 773 сообщений
просто в линейке Win95/98/ME нету unicode, отсюда и все проблемы
или компоненту перекомпилируй в ansi, или ставь нормальную винду
  • 0

#12
EagleEye

EagleEye
  • Гость
  • 5 сообщений
Насколько я понял суть проблемы, то она заключается в следующем: несовпадение типов данных в Delphi и параметров процедур ActiveX компонента. Говоря обобщенно: технология ActiveX не является родной для среды разработки Delphi. Отсюда и вытекают все неприятности, связанные с использованием ActiveX компонентов. Родной же для Delphi является технология VCL. Отсюда вытекает такое решение проблеммы: найти VCL аналог данного ActiveX компонента. Коих, насколько я знаю, огромное количество. К примеру, я знаю с десяток VCL компонентов, которые выгружают данные в формате MS Excel. И не надо будет таскать никакие DLL и OCX! Насколько я знаю, Delphi есть даже стандартные VCL компоненты для работы с Excel. :-)
  • 0

#13
Crush_k12

Crush_k12
  • Случайный прохожий
  • 3 сообщений

в общем, обычное дело - на моей машине работает, на той, "где нет дельфи" не работает :)

в компоненте F1Book создаётся отчёт, после чего его нужно сохранить в файл.
делаю:
  SomeFileName := 'Some File Name.xls';
  F1Book1.Write('C:\Directory\' + SomeFileName, F1FileExcel5);

не ругается, полное впечатление, что всё работает... а файла на месте нет :lol:

PS: на моей машине стоит wХР, на той, где не работает - w98


Мне кажется дело не в наличии делфи потомучто конечный файл скомпилирован и не важно где его запускать.
А дело может быть в разных структурах файловой системы ведь у WinXP & Win98
они разные.
  • 0

#14
Лоэрта

Лоэрта
  • Завсегдатай
  • 250 сообщений

Мне кажется дело не в наличии делфи  потомучто конечный файл скомпилирован и не важно где его запускать.
А дело может быть в разных  структурах файловой системы ведь у WinXP & Win98 они разные.

сейчас я уже понимаю, что дело не в наличии дельфи на машине

Насколько я понял суть проблемы, то она заключается в следующем: несовпадение типов данных в Delphi и параметров процедур ActiveX компонента. Говоря обобщенно: технология ActiveX не является родной для среды разработки Delphi. Отсюда и вытекают все неприятности, связанные с использованием ActiveX компонентов. Родной же для Delphi является технология VCL. Отсюда вытекает такое решение проблеммы: найти VCL аналог данного ActiveX компонента. Коих, насколько я знаю, огромное количество. К примеру, я знаю с десяток VCL компонентов, которые выгружают данные в формате MS Excel. И не надо будет таскать никакие DLL и OCX! Насколько я знаю, Delphi есть даже стандартные VCL компоненты для работы с Excel. :lol:

Совершенно нет проблемы выгрузить что-то в Excel, для этого даже компоненты какие-то особые не нужны. Но мне нравится F1book именно наличием у него своих собственных библиотек и отсутствием потребности в наличии офиса на клиентской машине.

просто в линейке Win95/98/ME нету unicode, отсюда и все проблемы или компоненту перекомпилируй в ansi, или ставь нормальную винду

спасибо :), всё никак руки не дойдут попробовать - вот если взять VCF1.dcu из w98 и скомпилировать с ней, то будет работать?
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.