
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.141.157] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Выполняю простейший скрипт:
![]() ![]() require 'win32ole' ExcelApplication = WIN32OLE.new('Excel.Application') ExcelApplication.WorkBooks.Add ActiveSheet = ExcelApplication.ActiveSheet ActiveSheet.Cells(1, 1).Value = 1 ActiveSheet.Cells(2, 1).Value = 2 ActiveSheet.Cells(3, 1).Value = 3 ActiveSheet.Cells(4, 1).Value = 4 ActiveSheet.Cells(5, 1).Value = 5 ActiveSheet.Cells(6, 1).FormulaR1C1 = '=СУММ(A1:A5)' ExcelApplication.Visible = TRUE Почему-то формула преобразуется в ![]() ![]() =СУММ('A1':'A5') Пробовал подставлять такую формулу: ![]() ![]() ActiveSheet.Cells(6, 1).FormulaR1C1 = '=SUBTOTAL(9,R[-5]C:R[-1]C)' ![]() ![]() test.rb:11: in 'method_missing': (WIN32OLERuntimeError) OLE error code:800A03EC in <Unknown> <No description> HRESULT error code:0x80020009 ╬°шсър. from test.rb:11 Как подставить формулу так, чтобы в ячейку попадало именно то, что я туда передаю и не производился вызов неведомого метода? |
Сообщ.
#2
,
|
|
|
Скорее всего, вам нужно использовать не FormulaR1C1, а FormulaR1C1Local
И тестеруйте предварительно в VBA |
Сообщ.
#3
,
|
|
|
xNut, давали бы хоть дельные советы...
Код рабочий, он же на VBScript замечательно работает. Тут, как я понимаю, вся проблема в символе "=". |
Сообщ.
#4
,
|
|
|
Вот тут точно ошибка
![]() ![]() ActiveSheet.Cells(6, 1).FormulaR1C1 = '=СУММ(A1:A5)' Я проверил, VB делает тоже самое, что и Ruby |
Сообщ.
#5
,
|
|
|
Действительно, что-то я не то написал, скопировал, видимо, из кривого исходника, приношу извинения... Аналогичный код на VBScript тоже неведомо откуда вставляет кавычки. Непонятно, да ладно, будем считать, что с этим разобрались.
Вот замечательно работающий код на VBScript: ![]() ![]() Set ExcelApplication = CreateObject("Excel.Application") ExcelApplication.WorkBooks.Add Set ActiveSheet = ExcelApplication.ActiveSheet ActiveSheet.Cells(1, 1).Value = 1 ActiveSheet.Cells(2, 1).Value = 2 ActiveSheet.Cells(3, 1).Value = 3 ActiveSheet.Cells(4, 1).Value = 4 ActiveSheet.Cells(5, 1).Value = 5 ActiveSheet.Cells(6, 1).FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)" ExcelApplication.Visible = True Если на Ruby пытаться подставить формулу =SUM(R[-5]C:R[-1]C), то почему-то в ячейку попадает =SUM(A1:A5), хотя на VBScript записывается правильно: =СУММ(A1:A5). Это первое. Второе и главное: формулу =SUBTOTAL(9,R[-5]C:R[-1]C) на Ruby записать в ячейку не удается вовсе, так как генерируется вышеописанное исключение, а на VBScript все замечательно срабатывает. |
Сообщ.
#6
,
|
|
|
Я вам уже говорил, используйте LOCAL! Ruby только его понимает
|
Сообщ.
#7
,
|
|
|
Цитата xNut @ используйте LOCAL ![]() ![]() ActiveSheet.Cells(6, 1).FormulaR1C1Local = '=SUM(R[-5]C:R[-1]C)' ![]() ![]() ActiveSheet.Cells(6, 1).FormulaR1C1Local = '=SUBTOTAL(9,R[-5]C:R[-1]C)' Цитата xNut @ Не понимаю, как Ruby может понимать и не понимать свойства интерфейсов... Они либо есть, либо их нет. Ruby только его понимает |
![]() |
|
|
А это в VB работает?
![]() ![]() ActiveSheet.Cells(6, 1).FormulaR1C1Local = '=SUM(R[-5]C:R[-1]C)' ActiveSheet.Cells(6, 1).FormulaR1C1Local = '=SUBTOTAL(9,R[-5]C:R[-1]C)' Ruby вместо FormulaR1C1 вызывает FormulaR1C1Local, он не учитывает некоторых особенностей национальных настроек COM |
Сообщ.
#9
,
|
|
|
Цитата xNut @ Нет. Получается результат как в Ruby. Для первой строчки: =SUM(A1:A5); для второй: А это в VB работает? Цитата А вот это уже совсем интересно. Получается, ошибка на совести MS? --------------------------- Сервер сценариев Windows --------------------------- Сценарий: C:\test.vbs Строка: 10 Символ: 1 Ошибка: Неизвестная ошибка выполнения Код: 800A03EC Источник: Ошибка выполнения Microsoft VBScript --------------------------- ОК --------------------------- ![]() А вот так на VBScript замечательно работает: ![]() ![]() ActiveSheet.Cells(6, 1).FormulaR1C1Local = "=СУММ(R[-5]C:R[-1]C)" ActiveSheet.Cells(6, 1).FormulaR1C1Local = "=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[-5]C:R[-1]C)" На Ruby заработало в таком виде: ![]() ![]() ActiveSheet.Cells(6, 1).FormulaR1C1Local = '=ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;R[-5]C:R[-1]C)' Блин, свихнешься с этим ![]() Я, признаться, в сторону национальных настроек даже не подумал. Спасибо, xNut ![]() |
Сообщ.
#10
,
|
|
|
Есть еще неприятное свойство NumberFormatLocal, с ним вообще сложно бороться, т.к. на разных компьютерах могут быть разные системные настройки разделителей, а Excel может быть настроен как на использование системных, так и на использование своих региональных настроек
Проще тестировать Excel скрипты непосредственно в VBA, а не в VBScript |
Сообщ.
#11
,
|
|
|
xNut, так ведь код, который я писал на Ruby, я переводил именно с VBA...
Еще такая неприятность имеется: такое решение, насколько я понимаю, работать будет только в русской Windows, так как подставляется русскоязычный вариант названия формулы. Использование свойства FormulaR1C1 и англоязычных названий формул избавляет от этой проблемы. Но вот как обратиться именно к FormulaR1C1, чтобы вместо него не шло обращение к FormulaR1C1Local? |
Сообщ.
#12
,
|
|
|
Цитата Domino @ xNut, так ведь код, который я писал на Ruby, я переводил именно с VBA... тогда откуда Цитата Domino @ Сервер сценариев Windows Да, не плохо бы подправить win32ole. Там нужно в GetIDsOfNames четвертым параметром подставлять 0. Во всяком случае, такое прошло с LuaCom. А почему вы выбрали Ruby, а не Lua? |
Сообщ.
#13
,
|
|
|
Цитата xNut @ Цитата Domino @ xNut, так ведь код, который я писал на Ruby, я переводил именно с VBA... тогда откуда Цитата Domino @ Сервер сценариев Windows Код поначалу я писал на VBA, потом переводил на Ruby, когда столкнулся с проблемой, проверил в VBScript, а когда увидел, что там работает, обратился на форум за помощью. Цитата xNut @ А почему вы выбрали Ruby, а не Lua? Никаких особых причин. Захотил изучить какой-нибудь динамический язык, выбор пал на Ruby. Впечатлили возможности Python, но он показался сложноватым для первого шага. Lua... А почему Lua? ![]() Посмотрел описание языка и его возможностей в Википедии, понравилось, что Lua - "достаточно быстрый и нетрудный в освоении скриптовый язык программирования". Если считаете, что Lua заслуживает внимания, я легко могу переключиться на него. Почему Ruby? Мне понравился синтаксис языка, относительная простота и мощные возможности. То есть, если вдуматься, то просто понравился. Так как сейчас Ruby использую только в простых вещах (делать сложные мне пока не хватает квалификации), то с моими задачами справится любой язык. xNut, почему рекомендуете Lua? |
Сообщ.
#14
,
|
|
|
Сам на нем пишу и радуюсь
![]() |
Сообщ.
#15
,
|
|
|
И всё?
![]() |