Overview #

Класс FrameReader используется для чтения данных c произвольным доступом к любому значению из:

  • текстовых csv-файлов.;
  • файлов в форматах Office Open XML xlsx-файлов;
  • активной рабочей книги, открытой в пользовательском интерфейсе приложения almaGRID.

Для создания экземпляра класса RowReader используйте app.NewReader.

Свойства #

ColumnOffset #

Overview
Смещение текущей позиции чтения данных относительно FrameReader.FrameColumn.

ColumnOffset   : Integer

Значение свойства
Тип: Integer
Значение смещения, 0-для первого столбца.

VBScript

rd.ColumnOffset = 2

almaGRID API

EndOfData #

Overview
В текущей строке отсутствуют данные.

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

almaGRID API

EndOfRow #

Overview
В текущей позиции чтения отсутствуют данные.

EndOfRow  ( [Detection  String  = '' ] )Boolean

Значение свойства (ReadOnly)
Тип: Boolean
True - если в текущей позиции чтения отсутствуют данные, False - в противном случае.

Параметры

Detection String Необязательный параметр. Значение по умолчанию '' .

См. описание параметра в FrameReader.EndOfData

VBScript

if rd.EndOfRow then
  '.....
End If

almaGRID API

FrameColumn #

Overview
Номер начального столбца таблицы (фрейма) в источнике данных.

FrameColumn   : Integer

Значение свойства
Тип: Integer
Номер строки, 1-для первого столбца.

VBScript

rd.FrameColumn = 20

almaGRID API

FrameRow #

Overview
Номер начальной строки фрейма в источнике данных.

FrameRow   : Integer

Значение свойства
Тип: Integer
Номер строки, 1-для первой строки.

VBScript

rd.FrameRow = 35

almaGRID API

RangeFields #

Overview
Массив названий и типов полей, используемых при чтении диапазона FrameReader.ReadRange (см. параметр 'RangeFields' в app.NewReader).

RangeFields   : Array

Значение свойства
Тип: Array
Массив названий и типов полей (см. параметр 'RangeFields' в app.NewReader).

VBScript

'будет выведен второй элемент массива, возвращемого свойством
ag.app.MsgBox rd.RangeFields()(1)

almaGRID API

RowOffset #

Overview
Смещение текущей позиции чтения данных относительно FrameReader.FrameRow.

RowOffset   : Integer

Значение свойства
Тип: Integer
Положение строки указателя, 0-для первой строки.

VBScript

rd.RowOffset = 2

almaGRID API

Sheet #

Overview
Имя или номер листа многостраничного источника данных (см. параметр 'Sheet' в app.NewReader).

Sheet   : Variant

Значение свойства
Тип: Variant
Если источник данных является многостраничным, то при присвоении изменяет текущий лист, а также устанавливает фрейм и текущий указатель на первую строку левый столбец выбранного листа.

VBScript

rd.Sheet = "Лист2"

almaGRID API

Методы #

AuxReader #

Overview
Создает дополнительный ридер на основе данного. Дополнительный ридер использует существенно меньше оперативной памяти.

Дополнительный ридер нельзя закрыть методом 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>")

almaGRID API

Close #

Overview
Закрывает источник данных связанный с файлом, указанным в app.NewReader и освобождает используемую память.

Можно закрыть только ридер, созданный с помощью app.NewReader.
При попытке закрыть дополнительный ридер FrameReader.AuxReader ничего не произойдет.

Close  

VBScript

rd.Close

almaGRID API

Frame #

Overview
Устанавливает номер начального столбца 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

almaGRID API

NextColumn #

Overview
Делает текущим следующее в этой же строке значение или, если указан ColumnsToSkip, значение, смещенное на ColumnsToSkip.

NextColumn  ( [ColumnsToSkip  Integer  = 1 ] )

Параметры

ColumnsToSkip Integer Необязательный параметр. Значение по умолчанию 1 .

Количество столбцов, на которое происходит смещение текущей позиции чтения данных.

VBScript

rd.NextColumn
rd.NextColumn 3

almaGRID API

NextRow #

Overview
Делает текущим первое значение в следующей строке или, если указан RowsToSkip, то строки, смещенной на RowsToSkip.

NextRow  ( [RowsToSkip  Integer  = 1 ] )

Параметры

RowsToSkip Integer Необязательный параметр. Значение по умолчанию 1 .

Количество строк, на которое происходит смещение текущей позиции чтения данных.

VBScript

rd.NextRow
rd.NextRow -5

almaGRID API

Read #

Overview
Читает текущее значение. Сдвигает текущую позицию чтения данных на значение в этой же строке, в следующем столбце.

Read  ( [ValueType  String  = 'String' ] )Variant

Возвращаемое значение
Тип: Variant
Значение из текущей позиции чтения данных или null, если значение не удалось привести к заданному типу.

Параметры

ValueType String Необязательный параметр. Значение по умолчанию 'String' .

Тип, к которому будет приведено прочитанное значение, см. app.NewReader.

VBScript

AttributeName = rd2.Read("String")

almaGRID API

ReadArray #

Overview
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на количество значений, описанных в диапазоне.

ReadArray   : Array

Возвращаемое значение
Тип: Array
Массив значений полей (первый индекс-0) или null, если значение не удалось привести к заданному типу.

VBScript

arr = rd.ReadArray

almaGRID API

ReadArrayLn #

Overview
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на количество значений, описанных в диапазоне.

ReadArrayLn   : Array

Возвращаемое значение
Тип: Array
Массив значений полей (первый индекс-0) или null, если значение не удалось привести к заданному типу.

VBScript

arr = rd.ReadArray

almaGRID API

ReadRange #

Overview
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на первый столбец следующей строки.

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

almaGRID API

ReadRangeLn #

Overview
Читает диапазон полей текущей строки начиная с текущей позиции чтения данных. Сдвигает текущую позицию чтения данных на первый столбец следующей строки.

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

almaGRID API

Reset #

Overview
Устанавливает текущую позицию чтения данных первую строку первого столбца источника данных относительно FrameReader.FrameRow и FrameReader.FrameColumn.

Reset  

VBScript

rd.Reset

almaGRID API

ShiftFrame #

Overview
Изменяет номер начального столбца 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

almaGRID API

Take #

Overview
Читает значение по смещению 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)

almaGRID API

Examples #

Пример 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"
'}

almaGRID API

Пример 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
'      }
'    ]
'  }
'}

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: