Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel

Ответить
Настройки темы
Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel

Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: RUVATA
Дата: 11-12-2010
Всем доброго времени суток...
Я занимаюсь переводом некоторых разделов справки (UDFs3.chm), а именно касающихся Excel.au3 и Word.au3
В процессе перевода обнаружил множество ошибок, как в тексте справки, примерах, так и багов в самом Excel.au3
И вот собственно занимаюсь их решением ... (некоторые решены своими силами, но для некоторых - знаний в AutoIT мне явно не хватает, нужна помощь коллективного разума ) (Я опытный VBA-программист, но как AutoIT-эр я новичок)

функция _ExcelNumberFormat в составе Excel.au3 - просто не работает в большинстве случаев

"разбор полетов" показал, что OLE-сервер Excel получает одним из аргументов к объекту
Excel.Application.ActiveSheet.Range(такая-то, такая-то).NumberFormat некорректные строки
(для этого аргумента существуют специальные строковые обозначения форматов для ячеек н/п "#,##0.00$" обозначает "currency" (Валюта), в данном случае валюта(по умолчанию) с двумя разрядами)

вот этот код вызовет ошибку в значении $sFormat
Код: Выделить весь код
; ***************************************************************
; Пример 1 - Изменение формата данных в целевом диапазоне ячеек
; *****************************************************************
#include <Excel.au3>

Local $oExcel = _ExcelBookNew() ;Создаем новую рабочую книгу и отображает ее

; Циклически заполняем диапазон ячеек случайнвми числами
For $y = 1 To 10
	For $x = 1 To 10
		_ExcelWriteCell($oExcel, Random(1000, 10000), $x, $y) ;Записываем в ячейку случайное целое число из диапазона от 1000 до 100000
	Next
Next

$sFormat = "#,##0.00$" ; "#,##0.00$" - условное строковое обазначение формата "currency" (Валюта)

With $oExcel.ActiveSheet
.Range(.Cells(1,1),.Cells(5,5)).NumberFormat = $sFormat
EndWith

MsgBox(0, "_ExcelNumberFormat | Пример 1", "Демонстрация завершена, нажмите ОК")
_ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Сохраняем файл в директории временных файлов, перезаписывая если необходимо.
_ExcelBookClose($oExcel) ; Закрываем рабочую книгу
а вот этот - нет (
Код: Выделить весь код
; ***************************************************************
; Пример 1 - Изменение формата данных в целевом диапазоне ячеек
; *****************************************************************
#include <Excel.au3>

Local $oExcel = _ExcelBookNew() ;Создаем новую рабочую книгу и отображает ее

; Циклически заполняем диапазон ячеек случайнвми числами
For $y = 1 To 10
	For $x = 1 To 10
		_ExcelWriteCell($oExcel, Random(1000, 10000), $x, $y) ;Записываем в ячейку случайное целое число из диапазона от 1000 до 100000
	Next
Next

$sFormat = "[$-F800]dddd, mmmm dd, yyyy" ; "[$-F800]dddd, mmmm dd, yyyy" - условное строковое обазначение формата "long date" (длинная лата)

With $oExcel.ActiveSheet
.Range(.Cells(1,1),.Cells(5,5)).NumberFormat = $sFormat 
EndWith

MsgBox(0, "_ExcelNumberFormat | Пример 1", "Демонстрация завершена, нажмите ОК")
_ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Сохраняем файл в директории временных файлов, перезаписывая если необходимо.
_ExcelBookClose($oExcel) ; Закрываем рабочую книгу
Несколько экспериментов привели меня к выводу, что не правильно обрабатываются лишь те обозначения в которых содержатся символы "#" , "?".

Мне кажется это может быть вопрос кодировки, вот я и хотел-бы спросить
1) во первых - как узнать в какой кодировке AutoIT передает строку OLE-серверу Excel?
2) во вторых - каким способом можно кодировку строк менять?
3) ну и в третьих - Ваши соображения и предложения, я могу ошибаться, что-то может еще быть связанное с OLE/COM (сложная тема)

-------
Одно дело искать сиюминутное решение, другое - искать знания...
вот и думай - что ты ищешь...


Отправлено: 12:28, 11-12-2010

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


RUVATA, ошибки madmasles, вроде как из-за языка офиса. а вообще да, та библиотека делалась под 2003.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 23:56, 12-12-2010 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для RUVATA

Старожил


Сообщения: 301
Благодарности: 16

Профиль | Отправить PM | Цитировать


kaster,
Цитата kaster:
вроде как из-за языка офиса »
вот здесь позволь не согласиться...
язык который используется для автоматизации пантеона приложений MS Office назывется VBA (Visual Basic for Applications),
фактический являтся языком Visual Basic, ныне эволюционировавший в vb.NET
Основная объектная модель приложений Office не изменяется аш с версии 97-го года.
Учитывая что язык широко используется на протяжении уже 13-лет - вероятность что в нем есть ошибки такого рода как "не верно работающий метод" - крайне мала, хотя исключать ее все таки нельзя.
Но вот что показывает моя практика(с VBA работаю уже около 7 лет), и несколько поставленных экспериментов:
1) Управление программи MS Office из вне, т.е. другими языками, осуществляется как правило через OLE-сервер (COM-сервер используется реже имеет свои особенности реализации, и применяется чаще всего тогда, когда необходимо использовать компоненты Office не запуская само приложение, например широко применялась практика использования модулей MS Word "проверка орфографии" для проверки содержимого тестовых полей программ написанных на том-же C# или vb.NET, даже видел реализацию на Java (хотя там на этот счет есть более лаконичные решения).
Взаимодействие с OLE-сервером, происходит по принципу обращения к объектной модели конкретного приложения, обработка обращений в таком случае происходит по правилам VBA но не через него, вы получаете возможность опускать прараметры методов и т.д.
Скомпилированные программы написанные на языках: С++ и C#, vb.NET, Java и даже встроенный язык 1C не имеют с этим проблем а AutoIT имеет - вывод напрашивается сам сабой.
2) Природа этой ошибки до сих пор не ясна - не понятно гна каком этапе она возникает: AutoIT передает значение, OLE-сервер обрабатывает и передает в COM, COM-объект принемает, или уже само Приложение реализует инструкции COM.
Тут необходимо обладать огромной базой знаний о технологии COM и устройстве Office Excel (у меня таких знаний нет, по крайней мере про COM)

-------
Одно дело искать сиюминутное решение, другое - искать знания...
вот и думай - что ты ищешь...


Отправлено: 15:17, 13-12-2010 | #12


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


RUVATA, я имел в виду язык локализации - русский

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 23:22, 13-12-2010 | #13



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
2003/XP/2000 - Excel 2003 | Как напечатать определённые строки таблицы? ondo Microsoft Office (Word, Excel, Outlook и т.д.) 3 13-07-2010 17:12
VBA - Excel формат ячеек - время! как определить большее?? SvetlanaK Программирование и базы данных 1 17-08-2007 15:48
Как в Omni Page распознавать файл переданый в качестве параметра командной строки madmax24 Программное обеспечение Windows 8 07-06-2007 19:59
Как определить наличие диска в CD-ROM'е из командной строки? AT Хочу все знать 1 02-01-2004 10:37




 
Переход