Показать сообщение отдельно
Старый 28.04.2004, 10:34   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Постановка задачи, из-за которой я собственно создал этот класс ставилась так:

1) Создать массив, в котором можно в любой момент вставить столбец в указанное место.
2) Массив является неким образом сетки Excel, для последующего экспорта в Excel через буфер обмена

1) Создать массив, в котором можно в любой момент вставить столбец в указанное место.

Т.е. на этапе формирования отчета я заранее не знаю ни сколько столбцов будет вообще, ни где именно они будут располагаться (порядок следования). Это выясняется в процессе сканирования результирующей выборки (query).

Делать предварительную выборку для определения количества и порядка следования столбцов нерационально, поскольку время выполнения такого запроса сопоставимо с временем выполнения основной выборки.

Если не разделять адресацию и содержимое массива (массив массивов, синтетическая адресация в одномерном массиве и т.п.), то возникают проблемы при вставке нового столбца. Потребуется фактически скопировать содержимое ранее созданного массива в новый массив с вставкой пустых элементов как нового столбца.

Я посчитал, что это будет относительно длительная по времени операция. Поэтому я разделил адреса и содержимое массива и при вставке нового столбца меняю только адресацию НЕ ИЗМЕНЯЯ содержимого. Реализовать это без введения дополнительных объектов - невозможно. Отсюда класс для хранения как собственно содержимого массива, так и их адресов, плюс методы по их обработке.

2) Массив является неким образом сетки Excel, для последующего экспорта в Excel через буфер обмена

Метод toString имеет целью прежде всего сформировать символьную строку, которую я затем впихиваю в буфер обмена (отсюда num2chr(9) и num2char(13)).

Более того, метод конвертации в строку anyValue2str использует конвертацию через strFmt() именно для того, чтобы конвертация произошла в формате настроек системы, которые и используются в Excel. Т.е. в этом случае, например, в качестве разделителя целой и дробной части числа будет использован тот символ, который и используется в Excel и не возникнет ошибки "запись числа как текста"

Т.е. по окончании формирования массива следует что-то вроде:

textBuffer.setText(rtg_2DimArray.toStrin());

И вставка этого буфера в указанную ячейку Excel, через Ваш метод InsertText()

Включение возможности хранить различные типы данных сделано для возможности выполнения расчета итогов по строкам. Т.е. крайний правый столбец должен содержать сумму по всем ячейкам данной строки. Да и появляется возможность расчета промежуточных итогов по столбцам.

Но вообще-то, возможность хранения разнотипных данных позволяет сформировать ВЕСЬ лист Excel в одном объекте не вводя дополнительные сущности.

Цитата:
= вы будете заниматься сериализацией вашего массива?
= как вы планируете передавать ваш массив между клиентом и сервером в трехуровневой конфигурации?
Честно говоря, я не понял этих вопросов. Что подразумевается под термином "сериализация"?
Передача между клиентом и сервером вообще не планируется (если я правильно понял о чем речь). Цель данного массива - это формирование символьной строки для передачи данных в Excel через буфер обмена.