Использование внешней DLL для работы с M$ Word

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Использование внешней DLL для работы с M$ Word

Сообщение vicvala » 14.12.2011 22:41:33

Будите править, поправьте -> осталась ссылка в тексте pdf и odt на uworddll.pas

Добавлено спустя 25 минут 2 секунды:
формат ячейки настроен как дата.
Выполняю SetCellValueDate(xls, CellName, DM.DOGData.FieldValues['DOG_DATE']); получаю в ячейке: dd.mm.yyyy так и написано буквами!
Выполняю SetCellValue(xls, CellName, DM.DOGData.FieldValues['DOG_DATE']); получаю в ячейке: 01.05.2011 - всё нормально!
т.е. не работает SetCellValueDate!?
vicvala
новенький
 
Сообщения: 27
Зарегистрирован: 11.06.2011 17:55:25

Re: Использование внешней DLL для работы с M$ Word

Сообщение ViruZ » 15.12.2011 11:40:53

vicvala писал(а):осталась ссылка в тексте pdf и odt на uworddll.pas

Поправил.
vicvala писал(а):не работает SetCellValueDate!?

Какая версия офиса? Я тестировал только на 2003, все работало нормально.

Добавлено спустя 5 минут 29 секунд:
Код: Выделить всё
SetCellValueDate(_xl,'D2',Now);

выводит и отображает нормально.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Использование внешней DLL для работы с M$ Word

Сообщение vicvala » 15.12.2011 22:57:27

Офис 2007 SP3
После присвоения ячейке значения:
Изображение
изначально формат ячейки - краткая дата, т.е. "затирается" формат и становится "Все форматы"
если поменять формат с "Все форматы" на "Краткая дата", то всё нормально!!!

с такой строкой SetCellValueFloat(xls, CellName, DM.CSTData.FieldByName('CST_COST').AsFloat) - программа вообще "падает"!!!

Кстати, SetCellValueInteger работает!

Добавлено спустя 35 минут 20 секунд:
может без этого: Xls.ActiveSheet.Range[CellName].NumberFormat:='dd.mm.yyyy'; или поменять местами (на 2 место).
А почему SetCellValueCurrency за комментирован?
vicvala
новенький
 
Сообщения: 27
Зарегистрирован: 11.06.2011 17:55:25

Re: Использование внешней DLL для работы с M$ Word

Сообщение ViruZ » 16.12.2011 12:53:13

vicvala писал(а):может без этого: Xls.ActiveSheet.Range[CellName].NumberFormat:='dd.mm.yyyy';

Без этого тоже работает.
vicvala писал(а):почему SetCellValueCurrency за комментирован?

Не работает правильно - у меня всегда в ячейку записывает ноль. Пока не разобрался, почему.
Хотя в книге В.Корнякова "Программирование документов и приложений MS Office в Delphi" написано
Свойство Value обьекта Range имеющее тип Variant, допускает запись данных разного типа, что позволяет изменить формат ячейки в дальнейшем.
Это утверждение относится и к обьекту Cells... Независимо от того, какой формат имело заисанное в ячейку значение, мы можем изменить формат ячейки в любой момент.

В примерах, которые приводятся в книге, обьект Range автоматически определяет тип записываемого значения и соответственно изменяет формат ячейки. Но у меня почему-то это не работает :(
Так что пробую со всем этим "хозяйством" разобраться.

Добавлено спустя 12 минут 20 секунд:
Попробовал добавить функцию SetCellValueFormat для принудительного задания формата ячейки, пробуйте тестить.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Использование внешней DLL для работы с M$ Word

Сообщение vicvala » 16.12.2011 23:27:10

Похоже в этой сборке dll заработало, офис 2007. Проверял string, date, integer, float - работают!!! Спасибо!
SetCellValueFormat не использовал, формат ячейки был задан изначально, в шаблоне!
vicvala
новенький
 
Сообщения: 27
Зарегистрирован: 11.06.2011 17:55:25

Re: Использование внешней DLL для работы с M$ Word

Сообщение ViruZ » 19.12.2011 10:35:29

vicvala писал(а):формат ячейки был задан изначально, в шаблоне!

Есть необходимость протестить с созданым програмно файлом функции SetCellValueFloat() и SetCellValueCurrency() - у меня не всегда правильно отрабатывают (иногда значения после точки не отображаются).

Добавлено спустя 4 часа 55 минут 48 секунд:
Пробую перенести весь функционал библиотеки в отдельный модуль - кажется, в последней версии FPC более-менее реализовано работу с COM/OLE обьектами.

Добавлено спустя 21 минуту 31 секунду:
Проверил работу полученого модуля на рабочем проэкте - почему-то не работает SetColWidth() :(
Закомментировал - остальное отработало нормально.

Добавлено спустя 4 минуты 53 секунды:
Все изменения доступны по SVN.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Использование внешней DLL для работы с M$ Word

Сообщение ViruZ » 21.12.2011 12:47:34

В SVN добавил пример формирования отчета из файла DBF (CP866) в M$Word
Код: Выделить всё
svn checkout http://msofficedll.googlecode.com/svn/trunk/ msofficedll-read-only
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Использование внешней DLL для работы с M$ Word

Сообщение VinSS » 06.01.2012 21:54:57

А может кто-нибудь скинуть эту библиотеку на почту sergey.s.vinogradov@gmail.com в архиве запароленном (пароль 1). А то у меня прав на скачавание на работе нет и библиотеки спам фильтр удалит, если не запаролить. Спасибо!
VinSS
новенький
 
Сообщения: 26
Зарегистрирован: 29.12.2011 04:23:46

Re: Использование внешней DLL для работы с M$ Word

Сообщение whs » 07.01.2012 15:12:06

Думал что у меня пример не работает выложенный, при открытии DBF файла (которые хранятся с одной старой программой), а проблема в пути к файлу оказалась (Не любит изначально на кириллице файлы видеть) Путь вида :
E:\Софтина бугалтерская\UMC_XBK\DBF\DOKU0508.dbf
Аватара пользователя
whs
новенький
 
Сообщения: 28
Зарегистрирован: 03.04.2010 18:07:44

Re: Использование внешней DLL для работы с M$ Word

Сообщение alexs » 08.01.2012 11:15:49

UTF8 - кодировка?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Использование внешней DLL для работы с M$ Word

Сообщение VinSS » 09.01.2012 15:07:19

А может быть проблема в пробеле в пути, у меня такое было. Считал до пробела путем, а все после параметром. Помогло заключить путь в двойные кавычки.

Добавлено спустя 13 часов 13 минут 47 секунд:
А я не последнюю версию скачал или действительно можно открыть эксель, записать в ячейки значения, а вот сохранить и выйти уже нельзя?
И хотелось бы видимость выбирать и при открытии, а не только при создании (хотя без возможности програмно сохранить и выйти из экселя, пока не очень актуально :).
Автору спасибо, очень помогло!
VinSS
новенький
 
Сообщения: 26
Зарегистрирован: 29.12.2011 04:23:46

Re: Использование внешней DLL для работы с M$ Word

Сообщение ViruZ » 10.01.2012 11:30:12

whs писал(а):Думал что у меня пример не работает выложенный, при открытии DBF файла (которые хранятся с одной старой программой), а проблема в пути к файлу оказалась (Не любит изначально на кириллице файлы видеть) Путь вида :
E:Софтина бугалтерскаяUMC_XBKDBFDOKU0508.dbf

Замените в исходнике:
Код: Выделить всё
Dbf1.FilePathFull:=UTF8ToSys(ExtractFilePath(OpenDialog1.FileName));


Добавлено спустя 1 час 45 минут 38 секунд:
VinSS писал(а):можно открыть эксель, записать в ячейки значения, а вот сохранить и выйти уже нельзя?И хотелось бы видимость выбирать и при открытии, а не только при создании

Добавил указанные функции. Изменения высылаю Вам на почту (пароль для архива - 1)
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Использование внешней DLL для работы с M$ Word

Сообщение VinSS » 11.01.2012 05:08:51

Не хватает аналога таких функций для excel:
Function CloseDoc(var wrd : Variant):boolean; stdcall; external 'msofficedll.dll' name 'CloseDoc';
{*закрыть документ}
Function CloseWord(var wrd : Variant):boolean; stdcall; external 'msofficedll.dll' name 'CloseWord';
{*выход из Word'a}
А то документ невидимый, сохраненный, но занятый и в памяти висит :(
За:
procedure SetExcellVisible, procedure SaveXlsDocument и procedure SaveXlsDocumentAs спасибо.
VinSS
новенький
 
Сообщения: 26
Зарегистрирован: 29.12.2011 04:23:46

Re: Использование внешней DLL для работы с M$ Word

Сообщение ViruZ » 12.01.2012 15:34:27

VinSS писал(а):Не хватает аналога таких функций для excel:Function CloseDoc(var wrd : Variant):boolean; stdcall; external 'msofficedll.dll' name 'CloseDoc';{*закрыть документ}Function CloseWord(var wrd : Variant):boolean; stdcall; external 'msofficedll.dll' name 'CloseWord';{*выход из Word'a}

Добавил, см. документацию
VinSS писал(а):документ невидимый, сохраненный, но занятый и в памяти висит

Такое возникает, если файл уже существует и использовалась функция SaveXlsDocumentAs

Добавлено спустя 10 минут 18 секунд:
Хотелось бы знать, кто в каких проектах и каким образом использует библиотеку. Если не затруднит, отпишитесь.
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Использование внешней DLL для работы с M$ Word

Сообщение VinSS » 14.01.2012 00:39:09

У меня контроль выработки (создание отчета), с начала я создавал *.csv, но нужно было условное форматирование, поэтому я ручками копировал, а теперь все автоматом.
Еще раз спасибо!
VinSS
новенький
 
Сообщения: 26
Зарегистрирован: 29.12.2011 04:23:46

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 239

Рейтинг@Mail.ru