Руководство разработчика

Метод ЭЛЕКТРОННАЯ_ТАБЛИЦА. СОЗДАТЬ_БУФЕР

Метод СОЗДАТЬ_БУФЕР позволяет создать временный буфер для подготовки значений ячеек и их форматов, которые позднее могут быть эффективно записаны в электронную таблицу офисного приложения. Установка значений и форматов ячеек в буфере не требует взаимодействия с офисным приложением и выполняется в десятки раз быстрее, чем запись без использования буфера. Передача значений и форматов из буфера офисному приложению выполняется методом ЗАПИСАТЬ_БУФЕР.

Четырехугольная область ячеек электронной таблицы, для которой следует создать буфер, определяется текущей ячейкой и размерами, задаваемыми в параметрах метода. Текущая ячейка должна быть предварительно выбрана вызовом метода УСТ_ТЕК_ПОЗ или УСТ_ТЕК_ЯЧЕЙКУ.

ФУНКЦИЯ ЛОГИКА: СОЗДАТЬ_БУФЕР(ЦЕЛОЕ: ширина;
                              ЦЕЛОЕ: высота)

Параметры

ширина
Горизонтальный размер буфера (количество ячеек).
высота
Вертикальный размер буфера (количество ячеек).

Возвращаемое значение

ДА – в случае успешного создания, НЕТ – в случае ошибки. Сообщение об ошибке может быть получено с помощью метода ПОСЛ_ОШИБКА.

Запись данных в буфер выполняется только методами УСТ_ЗНАЧ_ЯЧЕЙКИ и УСТ_ФОРМАТ_ЯЧЕЙКИ. Буфер записи содержит не только значения ячеек, но и форматы, чем отличается от буфера чтения. Выбор текущей ячейки выполняется как обычно: вызовом метода УСТ_ТЕК_ПОЗ или УСТ_ТЕК_ЯЧЕЙКУ. Если выбрана ячейка вне области буфера, то ее запись выполняется в обход буфера (т.е. медленно).

После того, как все необходимые данные записаны в буфер, их нужно передать в документ вызовом метода ЗАПИСАТЬ_БУФЕР. Метод ЗАПИСАТЬ_БУФЕР также закрывает буфер, т.е. освобождает все связанные с ним ресурсы. Закрыть буфер записи без сохранения данных можно вызовом метода ЗАКРЫТЬ_БУФЕР. При закрытии документа ресурсы буфера освобождаются автоматически без сохранения данных в документ.

Для данного документа одновременно поддерживается только один буфер (не важно – чтения или записи). Например, для записи двух несмежных столбцов можно сначала создать буфер для первого столбца, записать данные, записать буфер, а затем сделать то же для второго столбца.

Во время использования буфера запрещено переключение текущего листа методом УСТ_ТЕК_ЛИСТ.

Пример

Создается новая электронная таблица и в нее записывается 100 строк с 3-мя столбцами типов "целое", "текст" и "дата".

ПЕРЕМ ЭЛЕКТРОННАЯ_ТАБЛИЦА: т
ЕСЛИ т.СОЗДАТЬ_ДОК("Default") ТО
  т.УСТ_ТЕК_ЛИСТ(т.ИМЯ_ЛИСТА(1))
  
  // создаем буфер 3 x 100
  т.УСТ_ТЕК_ЯЧЕЙКУ("A", 1)  
  т.СОЗДАТЬ_БУФЕР(3, 100)

  ЦИКЛ ДЛЯ (стр = 1, 100)
    т.УСТ_ТЕК_ЯЧЕЙКУ("A", стр)       // выбираем ячейку в столбце "A"
    т.УСТ_ЗНАЧ_ЯЧЕЙКИ(ЭТ_ЦЕЛОЕ, стр) // записываем номер строки как целое

    т.УСТ_ТЕК_ЯЧЕЙКУ("B", стр)                // выбираем другую ячейку в столбце "B"
    т.УСТ_ЗНАЧ_ЯЧЕЙКИ(ЭТ_СТРОКА, СУММАП(стр)) // записываем номер строки прописью как строку

    т.УСТ_ТЕК_ЯЧЕЙКУ("C", стр)                // выбираем другую ячейку в столбце "C"
    т.УСТ_ЗНАЧ_ЯЧЕЙКИ(ЭТ_ДАТА, ДАТА_ТЕК + стр, НЕТ) // записываем дату
    т.УСТ_ФОРМАТ_ЯЧЕЙКИ(ЭТ_ДАТА, "YYYY-MM-DD") // нестандартный формат для даты
  КОНЕЦ_ЦИКЛА
  
  // записываем буфер в документ
  т.ЗАПИСАТЬ_БУФЕР
  т.СОХРАНИТЬ_ДОК("test.ods")
КОНЕЦ_ЕСЛИ

См. также: