sergvg
Интересующийся
Offline
|
|
« : 09-06-2010 12:32 » |
|
Прошу модераторов перенести тему в соответствующий раздел, если я выбрал его неправильно.
Итак, вопрос: как в скрипте (с расширением .vbs) проинициализировать одномерный и двумерный массивы известными заранее значениями?
что-то типа: одномерный (1,2,3,5,6) двумерный ((1,2,3),(4,5,6))
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 09-06-2010 12:48 » |
|
Dim Arr
Arr = Array(1, 2, 3, 4, 5, 6)
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sergvg
Интересующийся
Offline
|
|
« Ответ #2 : 10-06-2010 06:33 » |
|
Спасибо. А почему двумерный не получается?
ApExcel.Range("B3:C5").Value = Array(Array(1,2),Array(3,4),Array(5,6))
Как двумерный сделать?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 10-06-2010 06:49 » |
|
sergvg, а попробовать так же как ты записал в вопросе?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sergvg
Интересующийся
Offline
|
|
« Ответ #4 : 10-06-2010 07:25 » |
|
хм. Дык ведь не работает так. Где я обкосячился?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 10-06-2010 08:02 » |
|
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
sergvg
Интересующийся
Offline
|
|
« Ответ #6 : 10-06-2010 08:26 » |
|
Беру пример Dim sales()() As Double = New Double(11)() {} Dim month As Integer Dim days As Integer For month = 0 To 11 days = DateTime.DaysInMonth(Year(Now), month + 1) sales(month) = New Double(days - 1) {} Next month сохраняю его в expample.vbs запускаю, получаю ошибку:
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #7 : 10-06-2010 08:32 » |
|
sergvg, ты уж реши, для себя, что ты пишешь - скрипт для WSH на VBScript или программу на VB.NET. Вот так работает в скрипте: Arr = Array(Array(1, 2, 3), Array(4, 5, 6))
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
sergvg
Интересующийся
Offline
|
|
« Ответ #8 : 10-06-2010 08:53 » |
|
Цитирую первый мой пост: Итак, вопрос: как в скрипте (с расширением .vbs) проинициализировать одномерный и двумерный массивы известными заранее значениями?
С учётом всего вышесказанного делаю: Set ApExcel = CreateObject("Excel.application") 'Creates an object ApExcel.Visible = True ' So you can see Excel ApExcel.Workbooks.Add 'Adds a new book. Dim Arr Arr = Array(Array(1, 2, 3), Array(4, 5, 6)) ApExcel.Range("B3:d4").Value = Arr
В итоге, запускается эксель, создаётся книга, в ней в диапазоне B3:C4 - пусто, а в диапазоне D3:D4 - "#Н/Д". Но если определить массив двумерный так: Dim Arr(2,2) Arr(0,0)=1 Arr(0,1)=2 Arr(1,0)=3 Arr(1,1)=4
то тогда всё работает. Но у меня нет желания указывать номера индексов для всех элементов массива. Поэтому, повторяю вопрос из первого поста: Как проинициализировать ДВУМЕРНЫЙ МАССИВ известными заранее значениями?
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #9 : 10-06-2010 09:00 » |
|
Arr = Array(Array(1, 2, 3), Array(4, 5, 6)) V=Arr(1)(2) ' Здесь V=6 Массив создается и инициализируется. Перефразируй вопрос для Excel - что он там принимает для Range?
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
sergvg
Интересующийся
Offline
|
|
« Ответ #10 : 10-06-2010 09:13 » |
|
а надо, чтобы не Arr(1)(2) было 6, а Arr(1,2). Я так понял, тут существуют понятия как многомерный массив, так и вложенные массивы. В случае с Excel нужен двумерный массив. Пример, как работает - я приводил, но там каждый элемент надо присваивать с указанием всех индексов. То есть, Arr(0,0) = 1, Arr(0,1) = 2, Arr(1,0) = 3 и т.д.
Из Перла в эксель передаётся как массив массивов, но в перле нет многомерных массивов.
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #11 : 10-06-2010 10:17 » |
|
sergvg, Да, действительно, не получается.. Если нужно быстрое решение - могу посоветовать только заполнять построчно St1="1,2,3" St2="4,5,6" Set ApExcel = CreateObject("Excel.application") 'Creates an object ApExcel.Visible = True ' So you can see Excel ApExcel.Workbooks.Add 'Adds a new book. ApExcel.Range("B3:D3").Value2 = Split(St1, ",") ApExcel.Range("B4:D4").Value2 = Split(St2, ",")
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
sergvg
Интересующийся
Offline
|
|
« Ответ #12 : 10-06-2010 10:38 » |
|
построчно можно и так: ApExcel.Range("B3:E3").Value = Array(1,2,3,4)
|
|
|
Записан
|
|
|
|
|