Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > проверка типа содержимого ячейки


Автор: ksili 18.4.2006, 10:37
Читаю данные с ячейки на листе Excel'я в переменную типа Variant. Как проверить, что ячейка содержит целое число? 
Как проверить тип я знаю. Но ведь тип может быть и строковый, но содержать число, записанное как текст. 

И вообще какой тип будет иметь пременная типа Variant, если в неё скопировать содержимое ячейки, формат которой задан в Excel'e как общий или текстовый? 

Автор: _hunter 18.4.2006, 10:57
Цитата(ksili @  18.4.2006,  10:37 Найти цитируемый пост)
Но ведь тип может быть и строковый, но содержать число, записанное как текст.

тогда пытаемся IntToStr/FloatToStr перевести эту строку в число; если поймали исклбчение -- там не число.

Цитата(ksili @  18.4.2006,  10:37 Найти цитируемый пост)
какой тип будет иметь пременная типа Variant, если в неё скопировать содержимое ячейки, формат которой задан в Excel'e как общий или текстовый?

текстом оно и будет 

Автор: ksili 18.4.2006, 11:32
Цитата

текстом оно и будет

Так там не один текстовый тип - 
varOleStr
varString
varArray

Более того, сейчас обнаружил, что целое число может иметь тип varDouble 

Автор: _hunter 18.4.2006, 12:02
Цитата(ksili @  18.4.2006,  11:32 Найти цитируемый пост)
Так там не один текстовый тип - 
varOleStr
varString
varArray

и что? всеравно к AnsiString ( WideString ) они все должны приводится.

Цитата(ksili @  18.4.2006,  11:32 Найти цитируемый пост)
Более того, сейчас обнаружил, что целое число может иметь тип varDouble

значит нужно искать разницу между этим числом и округленным. если она меньше какого-то порога -- считать его целым 

Автор: ksili 19.4.2006, 05:55
Получилось очень просто

Код

int n;
Variant vExcel, vSheet, cur, vnum;

vExcel=Variant::CreateObject("Excel.Application");
vExcel.OlePropertyGet("WorkBooks").OleProcedure("Open",OpenDialog1->FileName.c_str());
vSheet = vExcel.OlePropertyGet("WorkSheets", 1);

     cur = vSheet.OlePropertyGet("Cells",1,4);
     vnum = cur.OlePropertyGet("Value");

     try
        {
         n = vnum;
        }
     catch(...)
        {
         n = 0;
        }
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)