
Как использовать две взаимосвязанные переменные в разных функциях
#1
Отправлено 06 марта 2012 - 08:56
function ranName() //вытаскивает из произвольной строки прайс-листа товаров значения двух колонок (наименование и цена) и присваивает их строковым переменным
{
var Excel = Sys.OleObject("Excel.Application");
var rowCount, strName, strPrice;
Excel.Visible = false;
Excel.Workbooks.Open(Project.Path + "\\Stores\\tmc.xlsx");
rowCount = Excel.ActiveSheet.UsedRange.Rows.Count;
row = Math.floor( Math.random() * rowCount ) + 1;
strName = Excel.Cells(row, 1).Value.toString();
strPrice = Excel.Cells(row, 2).Value.toString();
}
Можно ли каким-то образом извлечь переменные strName и strPrice, чтобы их можно было в дальнейшем использовать в разных функциях?
Или придется написать две функции: одну, которая будет считывать из случайной строки наименование, и вторую, которая будет в том же файле искать найденное ранее наименование и считывать цену?
#2
Отправлено 06 марта 2012 - 09:08
function ranName() { var Excel = Sys.OleObject("Excel.Application"); var rowCount; var arr = new Array(); Excel.Visible = false; Excel.Workbooks.Open(Project.Path + "\\Stores\\tmc.xlsx"); rowCount = Excel.ActiveSheet.UsedRange.Rows.Count; row = Math.floor( Math.random() * rowCount ) + 1; arr[0] = Excel.Cells(row, 1).Value.toString(); arr[1] = Excel.Cells(row, 2).Value.toString(); return arr; }
#3
Отправлено 06 марта 2012 - 09:19
Это интересно,но я плохо дружу с массивами...Можно както так
function ranName() { var Excel = Sys.OleObject("Excel.Application"); var rowCount; var arr = new Array(); Excel.Visible = false; Excel.Workbooks.Open(Project.Path + "\\Stores\\tmc.xlsx"); rowCount = Excel.ActiveSheet.UsedRange.Rows.Count; row = Math.floor( Math.random() * rowCount ) + 1; arr[0] = Excel.Cells(row, 1).Value.toString(); arr[1] = Excel.Cells(row, 2).Value.toString(); return arr; }
Тогда как осуществить присвоение значений элементов массива двум разным переменным?
#4
Отправлено 06 марта 2012 - 10:12
function New()
{
var arr1 = new Array();
arr1 = ranName();
str = arr1[0];
str1 = arr1[1]; // теперь оба элемента можно использовать где необходимо
...
}
#5
Отправлено 06 марта 2012 - 10:29
var strName, strPrice; function ranName() { ... var rowCount; //, strName, strPrice; ... }
Хотя если у вас несколько скриптовых юнитов, то лучше использовать переменные проекта (в Project Explorer правый клик по проекту > Edit > Variables):
function ranName() { ... Project.Variables.strName = Excel.Cells(row, 1).Value.toString(); Project.Variables.strPrice = Excel.Cells(row, 2).Value.toString(); }
#6
Отправлено 06 марта 2012 - 11:18
Благодаря подсказке уважаемого ХХХ нашла решение:
function New()
{
var arr1 = new Array();
arr1 = ranName();
str = arr1[0];
str1 = arr1[1]; // теперь оба элемента можно использовать где необходимо
...
}
Можно проще ..не использовав посредников-массивов
function New() { var str = ranName()[0]; var str1 = ranName()[1]; ... }
#7
Отправлено 07 марта 2012 - 07:59
В данном случае скрипт отрабатывает неверно - функция ranName запускается дважды, соответственно, наименование, выбранное из файла, не соответствует стоимости.
Благодаря подсказке уважаемого ХХХ нашла решение:
function New()
{
var arr1 = new Array();
arr1 = ranName();
str = arr1[0];
str1 = arr1[1]; // теперь оба элемента можно использовать где необходимо
...
}
Можно проще ..не использовав посредников-массивовfunction New() { var str = ranName()[0]; var str1 = ranName()[1]; ... }
#8
Отправлено 07 марта 2012 - 08:08
В данном случае скрипт отрабатывает неверно - функция ranName запускается дважды, соответственно, наименование, выбранное из файла, не соответствует стоимости.
да..здесь чтото я поторопился)
ну можно сократить тогда здесь:
заменить
var arr1 = new Array(); arr1 = ranName();на
var arr1 = ranName();
#9
Отправлено 12 марта 2012 - 08:00
Дмитрий
#10
Отправлено 12 марта 2012 - 09:04
Здравствуйте. Я пробовала работать с переменными проекта, однако ни к чему хорошему это не привело.Здравствуйте.
Какое-то странное решение с массивами и дополнительными скриптовыми функциями вы обсуждаете. modbear правильно всё подсказала - используйте переменные проекта. В таких переменных вы, кстати, и таблицу/массив хранить можете без написания дополнительного кода.
В моем случае все эти переменные изначально должны быть пустыми,потом они заполняются по мере выполнения одних скриптов и используются в качестве входных параметров для других скриптов.
Мне не удалось добиться сохранения нужных значений в эти переменные. Либо я неправильно это делала, либо...
В общем, отложила я это дело в "долгий ящик".
#11
Отправлено 12 марта 2012 - 09:58
Если что-то не работает, то опишите что конкретно вы делаете (как и где сохраняете значение, как и где его потом пытаетесь использовать) и что именно не получается. Всё должно работать, я ими давно и успешно пользуюсь.
Дмитрий
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных