Используйте Rows.Add
без параметра, и новая строка будет вставлена в конец таблицы. Параметр (как указано в разделе справки для Rows.Add
) позволяет коду вставлять новые строки перед конкретной строкой.
Чтобы работать с новой строкой, объявите переменную объекта и присвойте ей строку при ее создании. Это также хорошая идея сделать это с объектом Table
. Таким образом, можно обращаться к объектам напрямую, вместо того, чтобы всегда использовать что-то вроде rng.Tables(index).Rows(index)
, это не только проще читать и писать, он также выполняется быстрее.
Итак, основываясь на коде в вопросе, моя рекомендация:
Dim tbl as Word.Table, rw as Word.Row
Set tbl = rng.Tables(1)
Set rw = tbl.Rows.Add
rw.Cells(1).Range.Text = "cell content"
rw.Cells(2).Range.Text = "other cell content"
Да, я соглашаюсь с Richard. Вы никогда не должны использовать 'int'
как переменная подсчета в цикле как те. Следующее - то, как Вы могли бы хотеть сделать различные циклы с помощью индексов (хотя существует мало причины для, иногда это может быть полезно).
for(std::vector<int>::size_type i = 0; i < someVector.size(); i++) {
/* ... */
}
Можно сделать это, которое отлично определяется behaivor:
for(std::vector<int>::size_type i = someVector.size() - 1;
i != (std::vector<int>::size_type) -1; i--) {
/* ... */
}
Скоро, с C++ 1x (следующая версия C++) приходящий приятно, можно сделать это как это:
for(auto i = someVector.size() - 1; i != (decltype(i)) -1; i--) {
/* ... */
}
Постепенное уменьшение ниже 0 заставит i повторяться, потому что это не подписано.
Это никогда не должно быть аргументом для создания этого неправильным путем (использование 'int'
).
Стандарт C++ определяет в 23.1 p5 Container Requirements
, это T::size_type
, для T
быть некоторыми Container
, то, что этот тип является некоторой реализацией, определило неподписанный целочисленный тип. Теперь, использование std::size_t
для i
выше позволит ошибкам хлебать в тихо. Если T::size_type
меньше или больше, чем std::size_t
, затем это переполнится i
, или даже не доберитесь (std::size_t)-1
если someVector.size() == 0
. Аналогично, условие цикла было бы нарушено полностью.
Не происходите публично из контейнеров STL. У них есть невиртуальные деструкторы, который вызывает неопределенное поведение, если кто-либо удаляет один из Ваших объектов через указатель - для базирования. Если необходимо произойти, например, из вектора, сделайте это конфиденциально и выставьте части, с которыми необходимо выставить using
объявления.
Здесь, я просто использовал бы a size_t
как переменная цикла. Это просто и читаемо. Плакат, кто прокомментировал то использование int
индекс подвергает Вас, поскольку n00b корректен. Однако использование итератора для цикличного выполнения по вектору подвергает Вас как немного более опытный n00b - тот, кто не понимает, что нижний оператор для вектора является постоянным временем. (vector<T>::size_type
точный, но напрасно подробный IMO).
В то время как я не думаю "итераторы использования, иначе Вы смотрите, n00b" является хорошим решением проблемы, происходящей из станд.:: вектор кажется намного хуже, чем это.
Во-первых, разработчики действительно ожидают, что вектор будет std:.vector и отобразится, чтобы быть станд.:: карта. Во-вторых, Ваше решение не масштабируется для других контейнеров, или для других классов/библиотек, которые взаимодействуют с контейнерами.
Да, итераторы ужасны, циклы итератора не являются очень хорошо читаемыми, и определениями типов, только покрывают путаницу. Но по крайней мере, они действительно масштабируются, и они - каноническое решение.
Мое решение? stl-each макрос. Это не без проблем (главным образом, это - макрос, фу), но это объясняет значение. Это столь не совершенствуется как например, этот, но делает задание.
Вы сверхдумаете проблема.
Используя size_t переменную предпочтительно, но если Вы не доверяете своих программистов для использования неподписанный правильно, пойдите с броском и просто имейте дело с уродством. Заставьте интерн изменять их всех и не волноваться об этом после этого. Включите предупреждения как ошибки, и никакие новые не закрадутся. Ваши циклы могут быть "ужасными" теперь, но можно понять что как последствия религиозной позиции по со знаком по сравнению с неподписанным.
Определенно используйте итератор. Скоро Вы сможете использовать 'автоматический' тип для лучшей удобочитаемости (одна из Ваших проблем) как это:
for (auto i = someVector.begin();
i != someVector.end();
++i)
vector.size()
возвраты a size_t
var, поэтому просто изменитесь int
кому: size_t
и это должно быть прекрасным.
Ответ Richard более корректен, за исключением того, что это - большая работа для простого цикла.