|
Проблема с индексами массивов
|
|||
---|---|---|---|
#18+
Добрый день. Заметил какую то странную аномалию с индексами считываемого массива с листа Excel. считываю массив: Public Sub READALLDATAFAST(ByRef DATA_ALL) Dim adres, stroka As String Dim ii, jj As Integer 'ищем файл в проводнике Me.OpenFileDialog1.Filter = "Все файлы (*.*)|*.*|MS Excel 2010 (*.xlsx)|*.xlsx|MS Excel 2003 (*.xls)|*.xls|Текстовые файлы (*.txt)|*.txt" Me.OpenFileDialog1.FilterIndex = 1 Me.OpenFileDialog1.RestoreDirectory = True Me.OpenFileDialog1.ShowDialog() adres = Me.OpenFileDialog1.FileName 'считываем данные с листа EXCEL Dim xlsApp As New Microsoft.Office.Interop.Excel.Application With {.Visible = False} Dim xlsBook As Microsoft.Office.Interop.Excel.Workbook Dim xlsSheet As Microsoft.Office.Interop.Excel.Worksheet xlsBook = xlsApp.Workbooks.Open(adres) xlsSheet = xlsBook.Sheets(1) ii = FunLenRow2(xlsSheet, 1, 1) jj = FunLenClm2(xlsSheet, 1, 1) DATA_ALL = xlsSheet.Range(xlsSheet.Cells(1, 1), xlsSheet.Cells(ii, jj)).Value xlsBook.Close() End Sub Далее делаю операцию поиска максимального и минимального значения в выбранном столбце массива: 'ПОИСК МАКСИМАЛЬНОГО и МИНИМАЛЬНОГО значений в n-мерном массиве ' ValueMass() - двумерный массив данных Sub SearchMaxMinValueND(ByVal ValueMass(,) As Object, _ ByVal StartRow As Integer, _ ByVal indexClm As Integer, _ ByRef MaxValue As Object, _ ByRef MinValue As Object) Dim I As Integer 'Dim L As Integer = ValueMass.GetLength(0) - 1 Dim L As Integer = UBound(ValueMass, 1) - 1 MaxValue = -(10) ^ 12 MinValue = (10) ^ 12 For I = StartRow To L 'ValueMass(0, 0) If ValueMass(I, indexClm) <> 0 Then If MaxValue < ValueMass(I, indexClm) Then MaxValue = ValueMass(I, indexClm) If MinValue > ValueMass(I, indexClm) Then MinValue = ValueMass(I, indexClm) End If Next I End Sub Так вот. Первый индекс в массиве ValueMass(I, J) (I=1), задаваемый мною при помощи StartRow =1 в массиве ссылается на I=0.......... Смещение. В чем может быть причина? Может что-то в настройках системы засело? Впервые с таким столкнулся. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2016, 10:23 |
|
Проблема с индексами массивов
|
|||
---|---|---|---|
#18+
MAGRAV, а чему равно LBound(ValueMass, 1), LBound(ValueMass, 2) ? Для нахождения мин и макс можно использовать функции приложения, примерно так Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2016, 10:56 |
|
Проблема с индексами массивов
|
|||
---|---|---|---|
#18+
Казанский, Я работаю в VB.NET. Мне только данные загрузить. А весь это экселевский функционал в данной задаче не нужен. К томе считаю что Ubound куда элегантнее и минималистичнее.а если ближе к делу недавно на своём компутере запускал VBA макрос в котором один "хороший" "макросист" без особой нужды испольсовал следующее: Option Base 0 могло это как то повлиять в моём случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2016, 11:46 |
|
Проблема с индексами массивов
|
|||
---|---|---|---|
#18+
Казанский, чет поторопился с ответом. про другое начал) Тем не менее данное смещение индексов i меня сильно озадачило. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2016, 11:55 |
|
Проблема с индексами массивов
|
|||
---|---|---|---|
#18+
Казанский, С массовом получаемым из Excel и присваемым в динамическую переменную DATA_ALL = xlsSheet.Range(xlsSheet.Cells(1, 1), xlsSheet.Cells(ii, jj)).Value такая ситуация: -если этот код непосредственно в самом редакторе VBA Excel. То массив индексируется начиная с единицы; -если я это делаю из VS то массив индексируется с нуля. И когда я в VS пытаюсь получить один из элементов этого массива то я i-подразумеваю как индекс, но по смыслу получается что это не индекс а порядковый номер. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2016, 12:09 |
|
|
start [/forum/topic.php?fid=60&fpage=18&tid=2155383]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 121ms |
0 / 0 |