что я использую:
VB.NET, NET 3.5, OpenXML SDK 2.0
что я хочу сделать:
Ясоздание программы чтения / записи xlsx для моего приложения (на основе OpenXML SDK 2.0).Я хочу прочитать файлы xlsx и сохранить данные, содержащиеся в каждой строке, в DTO / PONO.Далее я хочу прочитать файл xlsx, а затем изменить его и сохранить.
мои мысли:
Теперь моя проблема не связана с OpenXML SDK, я могу делать то, что мне нужноделать.
Моя проблема заключается в том, как структурировать мои компоненты.В частности, у меня проблемы с полиморфизмом на самом низком уровне электронной таблицы, ячейка.
С ячейкой в Excel / OpenXML могут быть связаны разные типы данных.Как время, дата, число, текст или формула.Эти различные типы необходимо обрабатывать по-разному при чтении / записи из / в электронную таблицу.
Я решил создать общий интерфейс для всех подтипов, таких как TextCell, NumberCell, DateCell и т. Д.
Я прочитал ячейку из электронной таблицы, которую Метод / Фабрика может решить, какой тип ячейки создать.
Теперь, поскольку ячейка является абстракцией от реальной реализации, она не знает / не должна знать, какого типаэто.Для записи / изменения ячейки я решаю эту проблему, вызывая .write (ICellWriter) для ячейки, которую я хочу сохранить.Поскольку сама ячейка знает, какой тип данных она содержит, она знает, какой метод ICellWriter необходимо вызвать (статический полиморфизм).
Моя проблема:
Запись в файл xlsxне проблемаМоя проблема в том, как мне получить данные из моей ячейки в мой DTO / PONO, не прибегая к проверке типов -> If TypeOf variable is ClassX then doesomething End If
.Так как методы / свойства должны иметь разные сигнатуры, а различение только с использованием другого типа возврата не допускается.
Редактировать:
Держатель (коллекция, в данном случае строка таблицы /электронная таблица) объектов (ссылающихся на ячейки) не знает конкретных реализаций.Поэтому для написания ячейки я передаю ее Cellwriter.Этот Cellwriter имеет перегруженные методы, такие как Write(num as Integer)
, Write(text as String)
, Write(datum as Date)
.Объект ячейки, который получает это переданное ему, затем вызывает метод Write()
с типом данных, который он содержит.Это работает, так как возвращаемое значение не передается обратно.
Но что мне делать, когда мне нужен конкретный тип возвращаемых данных?
Любые идеи, советы, понимание?
Спасибо
Редактировать:
Глоссарий:
- DTO: Объект передачи данных
- PONO: Простой старый объект .Net
- xlsx: ссылка на окончание файла в файлах книги Excel
Редактировать:
"Подтипы" ячейки реализуют общий интерфейс и не наследуются от общего суперкласса.
Редактировать:
Подумав о проблеме, я понял, что это невозможно без размышлений или знаний о том, какого типа ячейку я ожидаю.По сути, я пытался воссоздать электронную таблицу или что-то похожее по функциональности и слишком абстрактное / конфигурируемое для моих нужд.Спасибо за ваше время и усилия, вложенные в написание ответа.Я принял ответ, который был ближе всего к тому, что я понял.