|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel |
|
Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel
|
![]() Старожил Сообщения: 301 |
Всем доброго времени суток...
Я занимаюсь переводом некоторых разделов справки (UDFs3.chm), а именно касающихся Excel.au3 и Word.au3 В процессе перевода обнаружил множество ошибок, как в тексте справки, примерах, так и багов в самом Excel.au3 И вот собственно занимаюсь их решением ... (некоторые решены своими силами, но для некоторых - знаний в 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 |
![]() Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать RUVATA, ошибки madmasles, вроде как из-за языка офиса. а вообще да, та библиотека делалась под 2003.
|
------- Отправлено: 23:56, 12-12-2010 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 301
|
Профиль | Отправить 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 |
![]() Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать RUVATA, я имел в виду язык локализации - русский
|
------- Отправлено: 23:22, 13-12-2010 | #13 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|