Имя: Пароль:
1C
1С v8
Не корректно выгружаются данные из эксель
0 bebibo
 
10.04.20
13:11
При чтении файла эксель колонка "ДатаРождения" (с форматом - дата) - читается как строка.
Вот данный код, который читает:

    Попытка
        Excel     = Новый COMОбъект("Excel.Application");
        WB         = Excel.Workbooks.Open(ПутьКФайлу);
        WS         = WB.Worksheets(1);
        arr     = WS.UsedRange.Value;  
        WB.Close(0);
    Исключение
        Предупреждение("Внимание! Файл не открыт."+Символы.ПС+"Попробуйте открыть и пересохранить данный файл программой Excel.");
        Возврат;
    КонецПопытки;
    
    МассивКолонок = arr.Выгрузить();
С чем это может быть связано?
1 bebibo
 
10.04.20
13:13
(0) получаю так: ДатаРождения =МассивКолонок.Получить(4).Получить(строкаТП);
и эту переменную невозможно преобразовать ни к числу, ни к дате! она строка, хотя в экселе она дата
2 Делопроизводитель
 
10.04.20
13:14
напиши парсер строки в дату
3 mikecool
 
10.04.20
13:17
(1) в начале строки нет спец или служебных символов?
4 bebibo
 
10.04.20
13:19
(3) нет
5 Делопроизводитель
 
10.04.20
13:19
Функция элВыделитьСловоТочка(ИсходнаяСтрока)
    
    Буфер = СокрЛ(ИсходнаяСтрока);
    ПозицияПослПробела = Найти(Буфер, ".");
    
    Если ПозицияПослПробела <2 Тогда
        ИсходнаяСтрока = "";
        Возврат Буфер;
    КонецЕсли;
    
    ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела-1));
    ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);
    
    Возврат ВыделенноеСлово;
    
КонецФункции


    ДатаСтр=ДатаСтр0;
    День_Стр=элВыделитьСловоТочка(ДатаСтр);
    Месяц_Стр=элВыделитьСловоТочка(ДатаСтр);
    Год_Стр=элВыделитьСловоТочка(ДатаСтр);
    
    Если СтрДлина(Год_Стр)>4 Тогда
        Если ((КодСимвола(Год_Стр,3)>=48)) и  ((КодСимвола(Год_Стр,3)<=57)) тогда
            Год_Стр = Лев(Год_Стр,4);
        Иначе
            Год_Стр = Лев(Год_Стр,2);
        Конецесли;
    КонецЕсли;
    
    Попытка
        День_Числ=Число(День_Стр);
        Месяц_Числ=Число(Месяц_Стр);
        Год_Числ=Число(Год_Стр);
        Если Год_Числ<100 Тогда
            Если Год_Числ<15 Тогда
                Год_Числ=Год_Числ+2000;
            Иначе
                Год_Числ=Год_Числ+1900;
            КонецЕсли;
        КонецЕсли;
        ДатаВвода=Дата(Год_Числ,Месяц_Числ,День_Числ,0,0,0);
    Исключение
        ОшбкаДатыввода=Истина;
    КонецПопытки;
6 bebibo
 
10.04.20
13:33
(5) не понятно как работает код ниже функции
7 bebibo
 
10.04.20
13:35
(6) вот это что:
ДатаСтр=ДатаСтр;
    День_Стр=элВыделитьСловоТочка(ДатаСтр);
    Месяц_Стр=элВыделитьСловоТочка(ДатаСтр);
    Год_Стр=элВыделитьСловоТочка(ДатаСтр);
8 Делопроизводитель
 
10.04.20
13:59
(7) разбивание строки по точкам на части.
2 + 2 = 3.9999999999999999999999999999999...