2015-04-07 3 views
0

Я работаю с файлами данных XML, и у них много таблиц данных. Существует много типов таблиц, и каждый тип таблицы имеет фиксированное количество полей.Массивы строк в Excel VBA

Мне нужен общий класс таблицы. У этого класса будет строка, содержащая имя своего типа таблицы, например «условие» или «встреча». Я хотел бы, чтобы этот класс имел указатель на массив массивов Public, который был инициализирован для хранения всех ожидаемых имен полей этого типа таблицы.

Например, у меня будет:

Общественные переменные:

Public cond_fnames() As String 
Public enc_fnames() As String 

быть инициализированы как:

cond_fnames = Split("id,strName,strDesc,aFieldNames,aModifiers", ",") 
enc_fnames = Split("id,strName,strDesc,strImg,nTreasureID", ",") 

(приведенные выше примеры являются усеченной, а на самом деле гораздо больше)

Я не хочу, чтобы каждый объект table-class имел весь массив как я ожидаю, чтобы создать много объектов класса table.

Как я могу получить объект класса, указатель на открытый массив строк?

(причина, по которой я хочу, чтобы этот массив строк состоял в том, что я использую это как механизм индекса для хранения связанного значения таблицы. Поля XML-таблицы имеют имя поля и значение. Поэтому в приведенной выше таблице «условия» значение для имени поля «strDesc» будет храниться в 3-й позиции коллекции. Возможно, есть лучший способ сделать это индексирование. Я думал об использовании перечислений, но не знаю, как перечислять значения для каждого класса (разные таблицы XML могут иметь одинаковые имена полей значений в разных положениях таблицы), и я не хочу, чтобы каждый объект класса таблицы должен иметь хранилище для длинного списка имен полей.)

+0

Простите меня, но я потерял ваш вопрос. Можете ли вы проиллюстрировать, что вам нужно: предоставить исходный формат данных xml и то, что вы хотите ввести в массив? Одна из причин, которую трудно представить, - это xml не имеет макета таблицы в 2-строчных строках и формате столбца. Фактически, xml является открытым типом данных и может быть разработан неограниченным образом, а его разметка структурирована в формате дерева узлов с атрибутами и/или значениями элементов: ' elementvalue'. – Parfait

ответ

0

I закончил с использованием коллекции, чтобы держать все строки, а не массив. Таким образом, у меня может быть класс TableType, содержащий коллекцию имен полей таблицы.

Чтобы ответить на вопрос в комментарии, «таблица» характера данных связана с форматом данных XML-файла, с которым я имею дело. Он состоит из множества «таблиц» в формате:

 <table name="conditions"> 
     <column name="id">13</column> 
     <column name="strName">Heat exhaustion</column> 
     <column name="strDesc">&lt;us&gt; is suffering from heat exhaustion.</column> 
     <column name="aFieldNames">fWaterConsumptionRate,fSleepQuality,m_fMoraleHidden,m_fDefense,MinSafeTemp,MaxSafeTemp,fPassiveRewarmPerHour</column> 
     <column name="aModifiers">0.5,-0.75,-0.1,-0.02,15,15,-1</column> 
    . 
    . 
     </table> 

Это запись таблицы условий в файле XML. Существует около 25 различных типов таблиц, каждый из которых имеет свой собственный фиксированный набор имен полей, а многие имена полей являются общими для табличных типов.

Каждая запись таблицы «условия» будет иметь одинаковые имена полей, но они могут быть в любом порядке. Я заполняю Userforms, которые содержат текстовые поля для каждого из этих полей таблицы для каждого из этих типов таблиц, поэтому у меня есть много текстовых полей, и мне нужно заполнить их известным, последовательным образом, поскольку я не хочу знать «имя» или дескриптор для каждого текстового поля.

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

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

Смежные вопросы