Описание #
Класс FrameReader используется для чтения данных c произвольным доступом к любому значению из:
- текстовых csv-файлов.;
- файлов в форматах Office Open XML xlsx-файлов;
- активной рабочей книги, открытой в пользовательском интерфейсе приложения almaGRID.
Для создания экземпляра класса RowReader используйте app.NewReader.
Свойства #
ColumnOffset #
Описание
Смещение текущей позиции чтения данных относительно FrameReader.FrameColumn.
ColumnOffset : Integer
Значение свойства
Тип: Integer
Значение смещения, 0-для первого столбца.
VBScript
rd.ColumnOffset = 2
EndOfData #
Описание
В текущей строке отсутствуют данные.
EndOfData ( [Detection String = '' ], [ColumnOffset Integer = 0 ] ) : Boolean
Значение свойства (ReadOnly)
Тип: Boolean
True - если в текущей строке отсутствуют данные; False - в противном случае.
Параметры
Detection | String | Необязательный параметр. Значение по умолчанию '' . Способ определения отсутствия данных: 'AllowEmpty' - данные могут принимать значения (пустая строка). Данные отсутствуют при попытки чтения за границами источника данных, 'EmptyAsNoData' или (пустая строка) - значение (пустая строка) также воспринимается, как отсутствие данных.
|
ColumnOffset | Integer | Необязательный параметр. Значение по умолчанию 0 . Смещение столбца, по значению которого будет определяться отсутствие данных при способе определения отсутствия данных 'EmptyAsNoData' или (пустая строка).
|
VBScript
if rd.EndOfData then '..... End If
EndOfRow #
Описание
В текущей позиции чтения отсутствуют данные.
EndOfRow ( [Detection String = '' ] ) : Boolean
Значение свойства (ReadOnly)
Тип: Boolean
True - если в текущей позиции чтения отсутствуют данные, False - в противном случае.
Параметры
Detection | String | Необязательный параметр. Значение по умолчанию '' . См. описание параметра в FrameReader.EndOfData
|
VBScript
if rd.EndOfRow then '..... End If
FrameColumn #
Описание
Номер начального столбца таблицы (фрейма) в источнике данных.
FrameColumn : Integer
Значение свойства
Тип: Integer
Номер строки, 1-для первого столбца.
VBScript
rd.FrameColumn = 20
FrameRow #
Описание
Номер начальной строки фрейма в источнике данных.
FrameRow : Integer
Значение свойства
Тип: Integer
Номер строки, 1-для первой строки.
VBScript
rd.FrameRow = 35
RangeFields #
Описание
Массив названий и типов полей, используемых при чтении диапазона FrameReader.ReadRange (см. параметр 'RangeFields' в app.NewReader).
RangeFields : Array
Значение свойства
Тип: Array
Массив названий и типов полей (см. параметр 'RangeFields' в app.NewReader).
VBScript
'будет выведен второй элемент массива, возвращемого свойством ag.app.MsgBox rd.RangeFields()(1)
RowOffset #
Описание
Смещение текущей позиции чтения данных относительно FrameReader.FrameRow.
RowOffset : Integer
Значение свойства
Тип: Integer
Положение строки указателя, 0-для первой строки.
VBScript
rd.RowOffset = 2
Sheet #
Описание
Имя или номер листа многостраничного источника данных (см. параметр 'Sheet' в app.NewReader).
Sheet : Variant
Значение свойства
Тип: Variant
Если источник данных является многостраничным, то при присвоении изменяет текущий лист, а также устанавливает фрейм и текущий указатель на первую строку левый столбец выбранного листа.
VBScript
rd.Sheet = "Лист2"
Методы #
AuxReader #
Описание
Создает дополнительный ридер на основе данного. Дополнительный ридер использует существенно меньше оперативной памяти.
Дополнительный ридер нельзя закрыть методом FrameReader.Close. Дополнительный ридер закрывается автоматически при закрытии ридера, на основе которого он создан.
AuxReader ( [FrameRow Integer = 1 ], [FrameColumn Integer = 1 ], [RangeFields Array = (пустой массив) ] ) : FrameReader
Возвращаемое значение
Тип: FrameReader
Экземпляр класса.
Параметры
FrameRow | Integer | Необязательный параметр. Значение по умолчанию 1 . Начальная строка таблицы (фрейма) в источнике данных. Индекс 1 у первой строки.
|
FrameColumn | Integer | Необязательный параметр. Значение по умолчанию 1 . Начальный столбец таблицы (фрейма) в источнике данных. Индекс 1 у первого столбца.
|
RangeFields | Array | Необязательный параметр. Значение по умолчанию (пустой массив) . См. параметр 'RangeFields' в app.NewReader.
|
VBScript
Set srd = rd.AuxReader(10, 1, Array("Наименование<String>", "Количество<Integer>")
Close #
Описание
Закрывает источник данных связанный с файлом, указанным в app.NewReader и освобождает используемую память.
Можно закрыть только ридер, созданный с помощью app.NewReader.
При попытке закрыть дополнительный ридер FrameReader.AuxReader ничего не произойдет.
Close
VBScript
rd.Close
Frame #
Описание
Устанавливает номер начального столбца FrameReader.FrameRow и строки FrameReader.FrameColumn фрейма в источнике данных.
Устанавливает указатель в первую строку первого столбца относительно FrameReader.FrameRow и FrameReader.FrameColumn.
Frame ( Row Integer , Column Integer )
Параметры
Row | Integer | Номер столбца, первый столбец имеет индекс 1.
|
Column | Integer | Номер строки, первая строка имеет индекс 1.
|
VBScript
rd.Frame 10, 25 'это эквивалентно: rd.FrameRow = 10 rd.FrameColumn = 25 rd.Reset
NextColumn #
Описание
Делает текущим следующее в этой же строке значение или, если указан ColumnsToSkip, значение, смещенное на ColumnsToSkip.
NextColumn ( [ColumnsToSkip Integer = 1 ] )
Параметры
ColumnsToSkip | Integer | Необязательный параметр. Значение по умолчанию 1 . Количество столбцов, на которое происходит смещение текущей позиции чтения данных.
|
VBScript
rd.NextColumn rd.NextColumn 3
NextRow #
Описание
Делает текущим первое значение в следующей строке или, если указан RowsToSkip, то строки, смещенной на RowsToSkip.
NextRow ( [RowsToSkip Integer = 1 ] )
Параметры
RowsToSkip | Integer | Необязательный параметр. Значение по умолчанию 1 . Количество строк, на которое происходит смещение текущей позиции чтения данных.
|
VBScript
rd.NextRow rd.NextRow -5
Read #
Описание
Читает текущее значение. Сдвигает текущую позицию чтения данных на значение в этой же строке, в следующем столбце.
Read ( [ValueType String = 'String' ] ) : Variant
Возвращаемое значение
Тип: Variant
Значение из текущей позиции чтения данных или null, если значение не удалось привести к заданному типу.
Параметры
ValueType | String | Необязательный параметр. Значение по умолчанию 'String' . Тип, к которому будет приведено прочитанное значение, см. app.NewReader.
|
VBScript
AttributeName = rd2.Read("String")
ReadArray #
Описание
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на количество значений, описанных в диапазоне.
ReadArray : Array
Возвращаемое значение
Тип: Array
Массив значений полей (первый индекс-0) или null, если значение не удалось привести к заданному типу.
VBScript
arr = rd.ReadArray
ReadArrayLn #
Описание
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на количество значений, описанных в диапазоне.
ReadArrayLn : Array
Возвращаемое значение
Тип: Array
Массив значений полей (первый индекс-0) или null, если значение не удалось привести к заданному типу.
VBScript
arr = rd.ReadArray
ReadRange #
Описание
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на первый столбец следующей строки.
ReadRange : Dictionary
Возвращаемое значение
Тип: Dictionary
Набор пар 'НазваниеПоля'-'Значение' или null, если значение не удалось привести к заданному типу.
Комментарии
Если обрабатываются большие массивы информации, то рекомендуется использовать более быстрый метод ReadArray.
VBScript
Set rd = ag.app.NewReader("FrameReader", _ ag.database.FolderPath & "Книга1.xlsx", "Лист1", _ Array("f1<String>", "f2<Long>", "f3<Double>", "f4<DateOLE>", "f5<Boolean>")) rd.Frame 2, 1 Do While not rd.EndOfData Set record = rd.ReadRange record("f4") = DateAdd("d", 1, record("f4")) ag.app.msgbox ag.app.stringify(ag.app.Convert(record, "HashTable")) rd.NextRow Loop rd.Close
ReadRangeLn #
Описание
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на первый столбец следующей строки.
ReadRangeLn : Dictionary
Возвращаемое значение
Тип: Dictionary
Набор пар 'НазваниеПоля'-'Значение' или null, если значение не удалось привести к заданному типу.
Комментарии
Если обрабатываются большие массивы информации, то рекомендуется использовать более быстрый метод ReadArrayLn}.
VBScript
Set rd = ag.app.NewReader("FrameReader", _ ag.database.FolderPath & "Книга1.xlsx", "Лист1", _ Array("f1<String>", "f2<Long>", "f3<Double>", "f4<DateOLE>", "f5<Boolean>")) rd.Frame 2, 1 Do While not rd.EndOfData Set record = rd.ReadRangeLn '.... Loop rd.Close
Reset #
Описание
Устанавливает текущую позицию чтения данных первую строку первого столбца источника данных относительно FrameReader.FrameRow и FrameReader.FrameColumn.
Reset
VBScript
rd.Reset
ShiftFrame #
Описание
Изменяет номер начального столбца FrameReader.FrameRow и строки FrameReader.FrameColumn фрейма в источнике данных на указанные приращения. Устанавливает текущую позицию чтения данных на первую строку левый столбец фрейма.
Устанавливает указатель на первую строку, первого столбца таблицы.
ShiftFrame ( RowShift Integer , ColumnShift Integer )
Параметры
RowShift | Integer | Количество столбцов, на которое будет сдвинут номер начальной строки фрейма.
|
ColumnShift | Integer | Количество столбцов, на которое будет сдвинут номер начального столбца фрейма.
|
VBScript
rd.ShiftFrame 35, 10 rd.ShiftFrame 12, 0 'это эквивалентно rd.FrameRow = 12
Take #
Описание
Читает значение по смещению RowOffset, ColOffset относительно FrameReader.FrameRow, FrameReader.FrameColumn. Текущая позиция чтения данных не изменяется.
Take ( ValueType String , RowOffset Integer , ColumnOffset Integer ) : Variant
Возвращаемое значение
Тип: Variant
Значение в заданном положении источника данных или null, если значение не удалось привести к заданному типу.
Параметры
ValueType | String | Тип, к которому будет приведено прочитанное значение, см. app.NewReader.
|
RowOffset | Integer | Смещение относительно FrameReader.FrameRow.
|
ColumnOffset | Integer | Смещение относительно FrameReader.FrameColumn.
|
VBScript
Name = rd.Take("String", 3, 5)
Примеры #
Пример FrameReader #
VBScript
'Чтение XLSX-файла Set rd = ag.app.NewReader("FrameReader", _ ag.database.FolderPath & "Книга1.xlsx", "Лист1", _ Array("f1<String>", "f2<Long>", "f3<Double>", "f4<DateOLE>", "f5<Boolean>")) ''Чтение CSV-файла 'Set rd = ag.app.NewReader("FrameReader", _ ' ag.database.FolderPath & "Книга1-1.csv", "", _ ' Array("f1<String>", "f2<Long>", "f3<Double>", "f4<DateOLE>", "f5<Boolean>"), "<prm csvDelimiter=','/>") ''Чтение листа текущей рабочей книги пользовательского интерфейса 'Set rd = ag.app.NewReader("FrameReader", _ ' "", "Лист1", _ ' Array("f1<String>", "f2<Long>", "f3<Double>", "f4<DateOLE>", "f5<Boolean>")) rd.Frame 2, 1 Do While not rd.EndOfData Set record = rd.ReadRange record("f4") = DateAdd("d", 1, record("f4")) ag.app.msgbox ag.app.stringify(ag.app.Convert(record, "HashTable")) rd.NextRow Loop rd.Close 'Таблица - верхний левый угол - ячейка A1: 'Строка Целое число Дробное число Дата/время Логическое 'Строка1 2147483640 0,0000 10.05.2022 10:54 ЛОЖЬ 'Строка2 -2147483640 -2.33 10.05.2022 10:54:00 True 'Результат: '{ ' "f2": 2147483640, ' "f3": 0.0, ' "f5": false, ' "f4": "2022-05-11T10:54:00", ' "f1": "Строка1" '} ' '{ ' "f2": -2147483640, ' "f3": -2.33, ' "f5": true, ' "f4": "2022-05-11T10:54:00", ' "f1": "Строка2" '}
Пример FrameReader с дополнительным ридером в блоке строк #
VBScript
'Чтение XLSX-файла Set rd2 = ag.app.NewReader("FrameReader", _ ag.database.FolderPath & "Книга1.xlsx", "Лист3", _ Array("Количество, шт.<Integer>", "Пробег, км<Double>")) ' , "<prm csvDelimiter=','/>" ''Чтение CSV-файла 'Set rd2 = ag.app.NewReader("FrameReader", _ ' ag.database.FolderPath & "Книга1.csv", "", _ ' Array("Количество, шт.<Integer>", "Пробег, км<Double>"), "<prm csvDelimiter=','/>") ''Чтение листа текущей рабочей книги пользовательского интерфейса 'Set rd2 = ag.app.NewReader("FrameReader", _ ' "", "Лист3", _ ' Array("Количество, шт.<Integer>", "Пробег, км<Double>")) rd2.Frame 2, 2 Set Data = ag.app.NewObject("HashTable") Do While Not rd2.EndOfData rd2.NextColumn : OpDate = CDate(rd2.Read("DateOLE")) : rd2.NextRow 2 Set Departments = ag.app.NewObject("HashTable") For i = 1 To 2 Dpt = rd2.Read("String") Set Parts = ag.app.NewObject("ArrayList") Do While Not rd2.EndOfRow Parts.Add ag.app.Convert(rd2.ReadRange, "HashTable") Loop Departments.Add Dpt, Parts rd2.NextRow Next Data.Add OpDate, Departments Loop rd2.Close ag.app.MsgBox ag.app.stringify(Data) ag.log.WriteLn ag.app.stringify(Data) 'Таблица - верхний левый угол - ячейка B2: 'Дата 15.04.2022 ' Количество, шт. Пробег, км Количество, шт. Пробег, км 'Отдел1 23 27,6 23 76,8 'Отдел2 27 48,7 27 73,1 'Дата 18.04.2022 ' Количество, шт. Пробег, км 'Отдел1 48 68,5 'Отдел2 32 8,96 'Результат: '{ ' "2022-04-15": { ' "Отдел2": [ ' { ' "Пробег, км": 48.7, ' "Количество, шт.": 27 ' }, ' { ' "Пробег, км": 73.1, ' "Количество, шт.": 27 ' } ' ], ' "Отдел1": [ ' { ' "Пробег, км": 27.6, ' "Количество, шт.": 23 ' }, ' { ' "Пробег, км": 76.8, ' "Количество, шт.": 23 ' } ' ] ' }, ' "2022-04-18": { ' "Отдел2": [ ' { ' "Пробег, км": 8.96, ' "Количество, шт.": 32 ' } ' ], ' "Отдел1": [ ' { ' "Пробег, км": 68.5, ' "Количество, шт.": 48 ' } ' ] ' } '}