Как передать одномерный массив из Excel в VB.NET?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Estilla
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 27.09.2006 (Ср) 21:07
Откуда: Москва

Как передать одномерный массив из Excel в VB.NET?

Сообщение Estilla » 28.11.2007 (Ср) 0:04

сабж. плиз хелп ми.

Функция в Excel такая:
Код: Выделить всё
Function AddNumbers() As Variant
AddNumbers = Worksheets(1).Range("F1:F10322")
End Function


Вызов в VB.NET:

Код: Выделить всё

Dim arrCo(,) As Object = ex.Run("AddNumbers")

но получаю двумерный массив.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.11.2007 (Ср) 8:01

Чего хотел, то и получил собственно
Весь мир матрица, а мы в нем потоки байтов!

Estilla
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 27.09.2006 (Ср) 21:07
Откуда: Москва

Сообщение Estilla » 28.11.2007 (Ср) 10:36

Viper писал(а):Чего хотел, то и получил собственно


это да. но какой вариант с отправкой одномерного массива есть?
пока приходится в vb.net перепаковывать его в одномерный.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.11.2007 (Ср) 11:08

Вариант раз:
Код: Выделить всё
Dim arrCo() As Object = ex.Run("AddNumbers")


Не одномерным ли будет полученный массив? Или VB ругаецца?

Мыстль два:
А Range по сути своей не двумерный ли массив?

Насчет преобразования двумерного в одномерный:

Посмотри в сторону Array.Copy

З.Ы. Ничего из предложенного не тестировалось и не проверялось.
Весь мир матрица, а мы в нем потоки байтов!

Estilla
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 27.09.2006 (Ср) 21:07
Откуда: Москва

Сообщение Estilla » 28.11.2007 (Ср) 11:59

Viper писал(а):Вариант раз:
Код: Выделить всё
Dim arrCo() As Object = ex.Run("AddNumbers")


Не одномерным ли будет полученный массив? Или VB ругаецца?

Мыстль два:
А Range по сути своей не двумерный ли массив?

Насчет преобразования двумерного в одномерный:

Посмотри в сторону Array.Copy

З.Ы. Ничего из предложенного не тестировалось и не проверялось.


по первому: ругается
по второму(Array.Copy): Ответ vb.net: "The specified arrays must have the same number of dimensions"

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.11.2007 (Ср) 12:10

Нды... и действительно, размерности должны быть одинаковы
З.Ы. Однако вроде есть какой то метод...
Весь мир матрица, а мы в нем потоки байтов!

Estilla
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 118
Зарегистрирован: 27.09.2006 (Ср) 21:07
Откуда: Москва

Сообщение Estilla » 28.11.2007 (Ср) 12:25

Viper писал(а):Нды... и действительно, размерности должны быть одинаковы
З.Ы. Однако вроде есть какой то метод...


вот и меня такое чувство одолевает. Пока приходится тупо через For прогонять двумерный а заполнять одномерный + автоматом конвертится тип. Пока устраивает и по скорости и по результату.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 28.11.2007 (Ср) 14:07

Можно грубо через API-функцию CopyMemory или через методы класса Marshal, но это скажем так несовсем кошерно для NET.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 2

    TopList