RUVATA
11-12-2010, 12:28
Всем доброго времени суток...
Я занимаюсь переводом некоторых разделов справки (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 (сложная тема)
Я занимаюсь переводом некоторых разделов справки (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 (сложная тема)