20.12.2004, 18:48 | #1 |
Участник
|
Пару вопросов по отчетам Excel
Привет, All
Пишу отчет. Вот пару вопросов 1. Можно ли программно определить версию (язык) Excel? Потому что пишу в ячейки формулы, типа СУММ(), а на англ. оно будет SUM(). Нужно знать, что вставлять. Через А+В+С ... долго, бо цикл нужно гонять 2. Мне нужна функция, которая бы возвращала true/false, а на вход принимала 2 строки. Первое - значение текущее какого-то поля, а второе - значение фильтра на это поле. Типа ("Номенк1","Номенк1-Номенк8,Номенк11") Мне нужно определить, подходит ли текущее значение. - сам думал уже писать, но решил сначало спросить. Может есть что-то типа в sysQuery или еще где-то А фильтр именно наложить не представляется возможным. 3. В поиске посмотрел, но конкретно этого не нашел. Мне нужно закрасить задний фон строки в Excel. А метода у COM для этого не знаю. Кто может подсказать. И вообще, где можно почитать о том, какие методы есть у COM связанные к примеру, для конкретности с ExcelWorkSheet или Range? Спасибо за ответы (будущие) Кашперук Ваня |
|
20.12.2004, 18:55 | #2 |
NavAx
|
Справка по Microsoft Visual Basic, в Excel:
"LanguageSettings Property Returns the LanguageSettings object, which contains information about the language settings in Microsoft Excel. Read-only"
__________________
Isn't it nice when things just work? |
|
20.12.2004, 18:57 | #3 |
Участник
|
А в Аксапте ты этого не пробовал? Как обратиться к нему? С VB просто давно очень работал, но справку посмотрю
|
|
20.12.2004, 19:18 | #4 |
NavAx
|
К нему не пробовал, к другим функциям обращаюсь без проблем. Вряд ли этот метод уникален. А вообще, проще использовать шаблоны с готовыми формулами и форматированием.
__________________
Isn't it nice when things just work? |
|
21.12.2004, 10:21 | #5 |
Участник
|
Вообще-то, работать с Excel достаточно просто, если уяснить его основную иерархию:
Application - WorkBook - WorkSheet - Range (Cell) Application - это собственно тот COM-объект, который создается в памяти WorkBook - это файл, открытый в этом COM-объекте WorkSheet - это лист одного файла Range - область листа (набор ячеек) к которому идет обращение Если работа идет через класс ComExcelDocument_RU, то Application - это переменная m_comApplication WorkBook - это переменная m_comDocument Чтобы вытащить эти переменные во вне надо создать специальные методы в этом классе, которые будут просто возвращать значение этих переменнх. Причем следует помнить, что для AXAPTA все эти переменные типа COM. Ну, что-то вроде PHP код:
PHP код:
С возвращаемым значением полегче. Есть список констант в Word PHP код:
Чтобы уточнить синтаксис какой-либо команды непосредственно в Excel, используют встроенный в Excel макрорекодер. Т.е. запись всех действий пользователя, совершаемых в Excel. Пункт меню Сервис -> Макрос -> Начать запись. Выполняешь все необходимые действия, далее останавливаешь запись, открываешь макрос на редактирование и смотришь, какая именно команда была использована. Правда, переносить один-к-одному код макрорекодера не нужно. Все эти Selection() явно лишние. Но, думаю, сообразишь как там что перевести. Ничего сложного. |
|
21.12.2004, 11:11 | #6 |
Участник
|
Спасибо, Володя.
Да, я вчера тоже посмотрел help, так вот я наоборот нашел, какие параметры передаются - возможные значения, а вот где ты нашел возвращаемые? А передается одно из 5 значений: (по предположению первое - 1, и дальше по возростанию до 5): msoLanguageIDExeMode, - этот не знаю, но тоже что-то близко к остальным msoLanguageIDHelp, - хелп msoLanguageIDInstall, - при установке msoLanguageIDUI, - интерфейс с пользователем msoLanguageIDUIPrevious - пред интерфейс ?? Вот. Спасибо еще раз за участие |
|
21.12.2004, 11:41 | #7 |
Участник
|
Цитата:
Вот с константами беда Какое именно значение имеют константы msoLanguageIDExeMode, msoLanguageIDHelp, msoLanguageIDInstall, msoLanguageIDUI, or msoLanguageIDUIPrevious я не в курсе. Методом тыка поставил единицу.
|
|
21.12.2004, 15:14 | #8 |
Участник
|
Цитата:
Изначально опубликовано Ace of Database
В Экселе в редакторе Visual Basic откройте броузер объектов (клавиша F2), встаньте на поле "поиск" и введите туда нужную Вам консатанту - получите ее значение и место в иерархии объектов. |
|
21.12.2004, 22:44 | #9 |
Участник
|
А кто подскажет по второму и третьему пунктам вопроса?
|
|
22.12.2004, 09:36 | #10 |
Участник
|
По третьему я же уже сказал, включай макрорекодер и смотри какой метод делает то, что тебе нужно. В частности, цает фона - это Range.Interior.ColorIndex или так (как метод ComExcelDocument_RU):
PHP код:
bookMark - это адрес диапазона вроде "A1" или "A5:D10" Какое значение colorIndex соответсвует какому цвету смотри в Help к Excel |
|
22.12.2004, 09:44 | #11 |
Участник
|
по поводу третьего вопроса: если я не знаю как через COM сделать что-то, что я знаю как сделать руками, я записываю макрос.
PS. с сайта майкрософт можно скачать утилиту OleView которая показывает что внутри библиотеки типов |
|
22.12.2004, 10:26 | #12 |
Роман Долгополов (RDOL)
|
Ребята, а вам еще не надоело постоянно гадать как называется тот или иной метод экселе или какое значение имеет константа? Писать все эти методы SetЭтоТуда() и GetЭтоОттуда()?
Если надоело, то может проще все таки сгенерировать мастером оболочек для com-объектов классы-оболочки для всей объектной модели экселя (ворда, любой другой active-x хрени, с которой приходится работать). За мастером приходится малость подчищать, что требует некоторых минимальных знаний про COM как таковую и ее реализацию в Аксапте. Что в результате? 1. Типизированные классы, представляющие все объекты нужного приложения (проверка типов и параметров при компиляции, а не во время выполнения) 2. Список методов будет выпадать списком, как при работе с обычным классом аксапты 3. Нормальная объектная модель, являющаяся копией объектной модели поставщика active-x сервера, а не разработанная толпой разношерстных разработчиков библиотека ф-ий, каждый из которых норовит все методы назвать по своему и наделить их всеми мыслимыми и немыслимыми обязанностями. 4. Хелпом, поставляемый вместе с active-x сервером можно будет пользоваться один в один Да, это потребует некоторых дополнительных усилий по сравненинию с написанием очередной супер-пупер функции-затычки, но по моему оно того стоит |
|
27.12.2004, 17:22 | #13 |
Administrator
|
А зачем? Оно есть. Неполное, конечно, но обычно хватает. Называется сие класс SysExcel.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
28.12.2004, 12:53 | #14 |
Роман Долгополов (RDOL)
|
Цитата:
Изначально опубликовано Maxim Gorbunov
А зачем? Оно есть. Неполное, конечно, но обычно хватает. Называется сие класс SysExcel. |
|
29.12.2004, 15:49 | #15 |
Участник
|
Цитата:
Изначально опубликовано db
Ребята, а вам еще не надоело постоянно гадать как называется тот или иной метод экселе или какое значение имеет константа? Писать все эти методы SetЭтоТуда() и GetЭтоОттуда()? включаешь в екселе запись макроса... делаешь в ручную все что тебе нужно... в результате получаешь готовый сценарий на VBA... затем переводишь в хе-плюс-плюс, объявляя каждый объект или коллецию иерархии за аксаптовский ком интерфейс... вот и все страдания... |
|
30.12.2004, 05:44 | #16 |
Участник
|
Цитата:
Изначально опубликовано simply2double
хм... можно вообще делать все проще... включаешь в екселе запись макроса... делаешь в ручную все что тебе нужно... в результате получаешь готовый сценарий на VBA... затем переводишь в хе-плюс-плюс, объявляя каждый объект или коллецию иерархии за аксаптовский ком интерфейс... вот и все страдания... Вчера вот записывал макросы установки типа ячейки - в VB код для ячейки генерится с NumberFormat = "#,##0.00", а в X++ NumberFormat("#,##0.00") ругается "не могу мол установить такой бредовый формат ячейки. Путём проб и ошибок выяснилось что на самом деле надо использовать маску поля "# ##0,00". |
|
30.12.2004, 08:54 | #17 |
Участник
|
Цитата:
Изначально опубликовано Alks
И вот что хочу заметить - что ЭТО НЕ ВСЕГДА РАБОТАЕТ. Вчера вот записывал макросы установки типа ячейки - в VB код для ячейки генерится с NumberFormat = "#,##0.00", а в X++ NumberFormat("#,##0.00") ругается "не могу мол установить такой бредовый формат ячейки. Путём проб и ошибок выяснилось что на самом деле надо использовать маску поля "# ##0,00". Но в большинстве случаев все прокатывает. И сохраняет массу времени. |
|
30.12.2004, 08:59 | #18 |
Участник
|
Цитата:
Изначально опубликовано db
Если надоело, то может проще все таки сгенерировать мастером оболочек для com-объектов классы-оболочки для всей объектной модели экселя (ворда, любой другой active-x хрени, с которой приходится работать). За мастером приходится малость подчищать, что требует некоторых минимальных знаний про COM как таковую и ее реализацию в Аксапте. |
|
30.12.2004, 10:11 | #19 |
Роман Долгополов (RDOL)
|
Цитата:
Изначально опубликовано simply2double
О чем идет речь??? Что есть такое "мастер оболочек" ???? Это из какой оперы... можно в двух словах.. или где об этом можно почитать Есть только в 3.0, но с некоторыми доработками код можно "опустить" до версии 2.5. Читать там нечего - надо запускать и смотреть результаты |
|
30.12.2004, 10:50 | #20 |
Участник
|
Цитата:
Изначально опубликовано db
"Сервис\Средства разработки\Мастера\Мастер оболочек для COM-объектов" Есть только в 3.0, но с некоторыми доработками код можно "опустить" до версии 2.5. Читать там нечего - надо запускать и смотреть результаты |
|