Что нового

Excel, перевод раздела UDFs3.chm "Excel Managment"(тест примеров/рецензирование)

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Всем доброго времени суток :smile: и "С наступающим"!!!

С недавнего времени открыл для себя AutoIT, я обнаружил что он мне очень импонирует...
я бы охарактеризовал его так: "просто и сердито" :smile: как раз то что иной раз нужно,
простым, или углубленным пользователям, сис.админам которые не питают желаний проникаться тайнами ООП и сложных ЯП, так как оно и не их "вотчина" :smile:
Оказавшись в шкуре "новичка" соискав для себя несколько источников знаний по затронутой теме, более всего уютно "новичку" оказалось здесь(на сайте сообщества) а так-же на форуме OSZONE.net, где AutoIt выделен отдельный раздел, там-же я нашел проэкт в котором почувствовал силы учавствовать, это
"перевод офф.справки по AutoIT на русский язык" -
А именно взялся я за перевод разделов UDFs3.chm: "Excel Management" и "Word Management"
посвященных описанию функций входящих в состав базовых UDF:"Excel.au3" и "Word.au3"

Вашему вниманию представляю перевод раздела "Excel Management",
В процессе превода, мною было принято решение пререработать код примеров,
дополнить текст справки необходимыми на мой взляд дополнениями и примечаниями,
отразить в ней решения некоторых "животрепещущих" проблем.

Обращаясь к сообществу прошу помочь мне в тестировании примеров на
различных руссфицированных версиях Office и Windows (нюансы существуют, их необходимо предусмотреть)

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

Превод не претендует на аутентичность, потому с этой стороны прошу его не комментировать.

Во вложенном архиве "UDFs3(Excel Management).zip" вы найдете файл
"UDFs3(Excel Management).chm" - это заготовка файла справки UDFs3.chm
содержащая в себе всего один раздел "Excel Management",
Уже сейчас работаю над переводом раздела по Word,
а в проекте разработка UDF для работы c MS Office Access
(кстати отдельная тема для разговора - нужна ли?)

Хочу поблагодарить участника SyDr, за предоставленный
"механизм сборки" материалов в виде той самой UDFs3.chm
у меня вряд ли бы хватило уситчивости и знаний HTML чтобы
это реализовать.

С уважением,
Севостьянов Илья (RUVATA)
 

Денис

Знающий
Сообщения
35
Репутация
8
А Вы не подскажите как корректно прочитать значение типа "Дата"?

Так как считывая данные из ячейки я получаю что то вроде "19531015000000" вместо 15.10.1953
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Значение типа "Дата" в Excel это действительно огромные числа которые вы получаете на выходе, так он устроен... проще всего еще на этапе вывода данных из Excel преобразовать значение ячейки в строку.

Но лучше всего конечно объяснить на примере, попробуйте ситуацию описать.
 

Денис

Знающий
Сообщения
35
Репутация
8
Нам присылают в обработку информацию о сотрудниках, есть графа с датой рождения.
Я этот файл по ячейкам считываю, обрабатываю некоторые значения, удаляю пробелы, лишние символы и формирую в ручном режиме .csv благо структура простейшая.

Так вот в .csv мне нужны читаемые даты рождения, а не та жесть что я получаю при чтении ячейки с датой.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Денис [?]
а не та жесть что я получаю при чтении ячейки с датой
А что вас смущает? Вы считываете дату, только записанную наоборот и слитно. Последние нули, видимо, часы-минуты-секунды:
15.10.1953 = 19531015000000 или 1953/10/15_00:00:00
 

Денис

Знающий
Сообщения
35
Репутация
8
А что вас смущает? Вы считываете дату, только записанную наоборот и слитно. Последние нули, видимо, часы-минуты-секунды:
15.10.1953 = 19531015000000 или 1953/10/15_00:00:00

Меня смущает что я не знаю откуда это правило взялось? И всегда ли оно работает? Ну то есть это же частный случай, не поведет ли себя Excel с какой нибудь датой по другому?
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 Денис
Недавно столкнулся и начал писать прогу: подробнее здесь - http://autoit-script.ru/index.php/topic,13105.0.html

В которой использую данную функцию для перевода "Даты"... Пишу для девушки, в фирме, в которой работаю - жалоб на поле "Дата" пока что не поступало и как я понял файлов для обработки уже перелопачено прилично.

Код:
...
__DataEx(_ExcelReadCell($oExcel, $sRangeOrRow [, $iColumn = 1]))
...
Func __DataEx($data)
	$YEAR 	= StringLeft($data, 4)
	$MOUNT	= StringMid ($data, 5, 2)
	$DAY	= StringMid ($data, 7, 2)

	$TIMEC	= StringMid ($data, 9, 2)
	$TIMEM	= StringMid ($data, 11, 2)

	Return $DAY&"."&$MOUNT&"."&$YEAR&" "&$TIMEC&":"&$TIMEM
EndFunc


19531015000000 = ГГГГММДДччммсс (год_месяц_день_час_минут_секунд)
 

Денис

Знающий
Сообщения
35
Репутация
8
---Zak--- [?]
В которой использую данную функцию для перевода "Даты"... Пишу для девушки, в фирме, в которой работаю - жалоб на поле "Дата" пока что не поступало и как я понял файлов для обработки уже перелопачено прилично.
Благодарю, именно статистическая состовляющая меня беспокоила в этом алгоритме. В таком случаи беру код в работу, если найду исключения в работе excel - отпишусь.
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Цита из референса по VBA
Date variables are stored as IEEE 64-bit (8-byte) floating-point numbers that represent dates ranging from 1 January 100 to 31 December 9999 and times from 0:00:00 to 23:59:59. Any recognizable literal date values can be assigned to Date variables. Date literals must be enclosed within number signs (#), for example,

#January 1, 1993#

or
#1 Jan 93#

.

Date variables display dates according to the short date format recognized by your computer. Times display according to the time format (either 12-hour or 24-hour) recognized by your computer.

When other numeric types are converted to Date, values to the left of the decimal represent date information while values to the right of the decimal represent time. Midnight is 0 and midday is 0.5. Negative whole numbers represent dates before 30 December 1899.

Переменные типа "дата" хранятся как IEEE 64-bit (8-byte) числа с плавающей точкой, представляющие даты, начиная с 1 января 100 года по 31 декабря 9999 и время от 0:00:00 до 23:59:59. Любые литерально-определяемые значения даты могут быть преобразованы к такому типу движком языка VBA или приложения Excel.
Такие значения должны быть заключены в знаки номера (#).
Например
# January 1, 1993 #
или
# 1 января 93 #
.

Отображение значения такого типа как "Дата" производится в соответствии с кратким форматом даты определяемого операционной системой в зависимости от формата времени (12-часовой или 24-часовой).

При преобразовании других числовых типов к типу "Дата", значения слева от десятичной точки представляют составную дату, а значения справа от десятичной точки представляют время. Полночь 0 и полдень составляет 0,5. Отрицательные целые числа представляют даты до 30 декабря 1899 года.

Вот как-то так, по OLE/COM интерфейсу дата сливается обычно именно в виде такого числа. Отсюда вопрос как Вы эту дату получаете? Я уже не помню но если вы используете UDF, описание к которой я переводил, то там предварительной обработки по-моему не предусмотрено, хотя надо в сорцы лезть.

AutoIt работает с Экселем через OLE, а стало быть по правилам VBA
 

Денис

Знающий
Сообщения
35
Репутация
8
Добрый вечер. Столкнулся с проблемой, мне необходимо выделить строку красным цветом, но я не могу найти ничего что мне бы помогло это сделать. Кто нибудь с этим сталкивался?
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 Денис
"В :IL_AutoIt_1: можно использовать ЯП самого Excel'я"

Код:
$oExcel.Activesheet.Range("A1").Interior.ColorIndex = 3
$oExcel.Activesheet.Range("A1").Font.ColorIndex = 5


ЗЫ: только если столбцы будут "скрытые" будет заливаться другой столбец
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
---Zak--- [?]
В
I_Love_AutoIt_BigGrin.gif
можно использовать ЯП самого Excel'я
Позволю себе подправить "мат.часть":
"ЯП самого Excel" - называется VBA (Visual Basic for Applications).
Непосредственно на нем в AutoIt писать нельзя.
Из AutoIt Вы можете получить доступ к объектной модели которая что для VBA что для любого COM/OLE оператора одинаковая.
Для более детального ознакомления с самой объектной моделью - советую использовать встроенную справку в редактор VBA (В рабочем окне Excel нажмите Alt+F11, попадете в редактор кода, а там уже F1, там же в редакторе есть прокламированный список объектов их методов и свойств)
Для того чтобы грамотно использовать механизмы автоматизации Excel, вообще-то неплохо понять сам VBA основные принципы, в этом поможет Джон Уокенбах например вот здесь можно его почитать
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
2 RUVATA
OffTopic:
Как ЯП назовешь так он и поплывет...


А все остальное верно ??? Шучу))))
ЗЫ: улыбнитесь и доброе утро Вам))))
 

Денис

Знающий
Сообщения
35
Репутация
8
Коллеги, Вы просто сделали мой день, это просто нереально круто! Как я хотел в AutoIt VBA от Excel.. а тут руку протянуть!
 
Верх