Если я правильно понимаю, сделайте следующее:
=COUNTIF(Sheet1!A:A,"<>")
Я полагаю, вы понимаете COUNTIF()
Условие "<>"
в основном означает «не равно пустому / ничему» , поэтому «посчитайте все, что не пусто»
Надеюсь, что поможет
Например, использование повышения:: вариант. См. http://www.boost.org/doc/libs/1_36_0/doc/html/variant.html
(Но конечно, можно создать собственное, для удовлетворения типам атрибутов XML.)
#include <map>
#include <boost/variant.hpp>
typedef boost::variant< int, std::string > MyValue ;
typedef std::map<std::string, MyValue> MyValueMap ;
Путем добавления MyValueMap как член класса можно добавить свойства согласно их именам. Что означает код:
oMyValueMap.insert(std::make_pair("newField", 44)) ;
oMyValueMap.insert(std::make_pair("newField2", "Hello World")) ;
std::cout << oMyValueMap["newField"] ;
std::cout << oMyValueMap["newField2"] ;
Путем инкапсуляции его в классе MyObject и добавления права перегрузил средства доступа в этом классе MyObject, код выше становится несколько более четким:
oMyObject.addField("newField", 44) ;
oMyObject.addField("newField2", "Hello World") ;
std::cout << oMyObject["newField"] ;
std::cout << oMyObject["newField2"] ;
Но Вы теряете несколько безопасность типов C++, делающего так. Но для XML, это неизбежно, я предполагаю.
Нет никакого способа сделать это в способе, которым Вы описали, так как компилятор должен разрешить ссылку во время компиляции - это генерирует ошибку.
Но см. Универсальный Шаблон разработки.
Вы не можете заставить тот синтаксис работать (из-за статической проверки во время компиляции), но если Вы готовы изменить синтаксис, можно достигнуть того же эффекта довольно легко. Было бы довольно легко иметь участника словаря со строкой-> отображение блоба и иметь функции членства как:
template< typename T > T get_member( string name );
template< typename T > void set_member( string name, T value );
Вы могли сделать синтаксис более компактным/хитрым, если Вы хотите (например: использование '->' переопределение оператора). Существуют также некоторые определенные для компилятора приемы, которые Вы могли возможно усилить (поддержки MSVC __ declspec (свойство), например, который позволяет Вам отображать ссылки на членскую переменную к методам определенного формата). В конце дня, тем не менее, Вы не собираетесь быть способными сделать что-то, что компилятор не принимает на языке и заставляет его компилировать.
Короткая версия: не Может сделать этого. Нет никакой собственной поддержки этого, C++ со статическим контролем типов, и компилятор должен знать, что структура каждого объекта управляется.
Рекомендация: Используйте встроенное межболее дерзкое. И не пишите свое собственное (см. ниже), получите тот, который уже работает и отлаженный.
Что можно сделать: Реализуйте как раз достаточно межболее дерзкое для Ваших потребностей.
Было бы достаточно просто установить класс с элементом данных как
std::vector<void*> extra_data;
к которому Вы могли присоединить произвольные данные во времени выполнения. Стоимость этого - то, что необходимо будет управлять теми данными вручную с методами как:
size_t add_data_link(void *p); // points to existing data, returns index
size_t add_data_copy(void *p, size_t s) // copies data (dispose at
// destruction time!), returns
// index
void* get_data(size_t i); //...
Но это не предел с немного большей осторожностью, Вы могли связать произвольные данные с именем, и можно продолжить разрабатывать эту схему насколько Вы желаете (добавьте информацию о типе, и т.д....), но то, к чему это сводится, реализует межболее дерзкое для заботы о гибкости во время выполнения.
Нет - C++ не поддерживает управления системой типов как это. Даже языки с определенной степенью отражения во время выполнения (например.NET) не поддерживали бы точно эту парадигму. Вам был бы нужен намного более динамический язык, чтобы смочь сделать это.