Перейти к содержимому

Фотография

Как использовать две взаимосвязанные переменные в разных функциях


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 10

#1 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 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, чтобы их можно было в дальнейшем использовать в разных функциях?

Или придется написать две функции: одну, которая будет считывать из случайной строки наименование, и вторую, которая будет в том же файле искать найденное ранее наименование и считывать цену?
  • 0

#2 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 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; 
}

  • 1

#3 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 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; 
}

Это интересно,но я плохо дружу с массивами...
Тогда как осуществить присвоение значений элементов массива двум разным переменным?
  • 0

#4 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 06 марта 2012 - 10:12

Благодаря подсказке уважаемого ХХХ нашла решение:

function New()
{
var arr1 = new Array();
arr1 = ranName();
str = arr1[0];
str1 = arr1[1]; // теперь оба элемента можно использовать где необходимо
...
}
  • 0

#5 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 06 марта 2012 - 10:29

Можно определить strName и strPrice как глобальные переменные:
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();
 }

  • 1

#6 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 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]; 
...
}

  • 0

#7 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 07 марта 2012 - 07:59


Благодаря подсказке уважаемого ХХХ нашла решение:

function New()
{
var arr1 = new Array();
arr1 = ranName();
str = arr1[0];
str1 = arr1[1]; // теперь оба элемента можно использовать где необходимо
...
}



Можно проще ..не использовав посредников-массивов
function New()
{
var str = ranName()[0];
var str1 = ranName()[1]; 
...
}

В данном случае скрипт отрабатывает неверно - функция ranName запускается дважды, соответственно, наименование, выбранное из файла, не соответствует стоимости.
  • 0

#8 XXX

XXX

    Опытный участник

  • Members
  • PipPipPipPip
  • 284 сообщений
  • ФИО:Денис Викторович
  • Город:Санкт-Петербург


Отправлено 07 марта 2012 - 08:08

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


да..здесь чтото я поторопился)
ну можно сократить тогда здесь:
заменить
var arr1 = new Array();
arr1 = ranName();
на
var arr1 = ranName();

  • 0

#9 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 12 марта 2012 - 08:00

Здравствуйте.


Какое-то странное решение с массивами и дополнительными скриптовыми функциями вы обсуждаете. modbear правильно всё подсказала - используйте переменные проекта. В таких переменных вы, кстати, и таблицу/массив хранить можете без написания дополнительного кода.
  • 0
С уважением,
Дмитрий

#10 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 12 марта 2012 - 09:04

Здравствуйте.


Какое-то странное решение с массивами и дополнительными скриптовыми функциями вы обсуждаете. modbear правильно всё подсказала - используйте переменные проекта. В таких переменных вы, кстати, и таблицу/массив хранить можете без написания дополнительного кода.

Здравствуйте. Я пробовала работать с переменными проекта, однако ни к чему хорошему это не привело.
В моем случае все эти переменные изначально должны быть пустыми,потом они заполняются по мере выполнения одних скриптов и используются в качестве входных параметров для других скриптов.
Мне не удалось добиться сохранения нужных значений в эти переменные. Либо я неправильно это делала, либо...
В общем, отложила я это дело в "долгий ящик".
  • 0

#11 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 12 марта 2012 - 09:58

Если переменные по умолчанию должны быть пустыми, то вам надо использовать переменные типа Temporary. Их значения обнуляются при окончании выполнения проекта, в отличие от переменных типа Persistent. В редакторе проектных переменных эти два типа переменных находятся в разных табличках, чтобы их не путать.

Если что-то не работает, то опишите что конкретно вы делаете (как и где сохраняете значение, как и где его потом пытаетесь использовать) и что именно не получается. Всё должно работать, я ими давно и успешно пользуюсь.
  • 1
С уважением,
Дмитрий


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных