Имя: Пароль:
1C
1С v8
Загрузка из эксель
0 Живаго
 
15.06.12
10:37
Есть файл эксель в нем в ячейках цифры, которые рассчитываются по формуле. При попытке получить свойство value для некоторых ячеек система возвращает какое то  безумное число, пробую получать свойство text там для некоторых ячеек возвращает "#?Имя". При этом когда копирую только значения в другой файл все нормально читается в обоих свойствах.

Как с этим бороться?
1 Живаго
 
15.06.12
10:52
Если что могу скинуть файл пример.
2 YF
 
15.06.12
10:53
(0) Ты до последнего будешь скрывать как берешь данные?
3 Живаго
 
15.06.12
10:56
Попытка
       Эксель = Новый COMОбъект("Excel.Application");
   Исключение
       Сообщить(ОписаниеОшибки() + "Ошибка создания COMОбъекта");
       Возврат;
   КонецПопытки;

   Книга = Эксель.WorkBooks.Open(ПолноеИмяФайла);
   //Выбрать лист. Можно по имени или по порядковому номеру
   Лист = Книга.WorkSheets(1);
   //Получить значение ячейки с координатами А,1 (колонку можно указывать как буквой, так и порядковым номером)
   //НомерСтроки = 5;
   //НомерКолонки = 1;
   //Сообщить(Лист.Cells(НомерСтроки, НомерКолонки).Value);
   
   // очистим табличную часть сдесь во избежание всяких казусов
    Расходы.Очистить();
   
   //Получить количество строк и колонок
   КолС=Лист.UsedRange.SpecialCells(11).Row;
   Для НомСтр = 1 По КолС Цикл
       Значение = СокрЛП(Лист.Cells(НомСтр, 1).text);
       //Ищем коды справочника Статьи затрат, а они у нас бывают только девятизначные
       Если СтрДлина(Значение) = 9 Тогда
           //Проверим заполнена ли статья
           Статья = Справочники.СтатьиЗатрат.НайтиПоКоду(Значение);
           Если не (Статья  = Неопределено или Статья = Справочники.СтатьиЗатрат.ПустаяСсылка()) Тогда
               //Проверим указана ли сумма, ее мы проверяем в колонке "на партию"
               ТекстСуммы = Лист.Cells(НомСтр, 4).text;
               СуммаИзФайла = ПреобразоватьВЧисло(ТекстСуммы,Статья);
               Если не СуммаИзФайла = 0 Тогда
                   НоваяСтрока = расходы.Добавить();
                   НоваяСтрока.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
                   НоваяСтрока.Кратность = 1;
                   НоваяСтрока.Курс = 1;
                   НоваяСтрока.СтатьяЗатрат = Статья;
                   
                   НоваяСтрока.Сумма = СуммаИзФайла;
                   НоваяСтрока.СуммаВВалюте = СуммаИзФайла;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   
   Эксель.Quit();
Вот код
4 Живаго
 
15.06.12
10:57
ТекстСуммы = Лист.Cells(НомСтр, 4).text;
Вот в этой строке возвращает бред то что я описал в 0
5 Живаго
 
15.06.12
10:59
И еще обратил внимание что неверные значения возвращет только для полей с формулой типа =СУММ(D41:D54)
6 Живаго
 
15.06.12
11:16
Что я делаю не так?
7 shuhard
 
15.06.12
11:18
(6) [Что я делаю не так]
1 - используешь Application вместо ADODB
2 - пытаешься импортировать формулу
8 Живаго
 
15.06.12
11:33
(7) понял попробую через ADODB
9 shuhard
 
15.06.12
11:35
(8) формулу и ADODB  импортировать не умеет
10 Живаго
 
15.06.12
11:42
(9) Понял :(
11 Живаго
 
15.06.12
11:43
(10) Т.е. значение из ячейки рассчитаной по формуле мне не получить?
12 shuhard
 
15.06.12
11:45
(11) через ADODB можно получить текст формулы, но считать придётся самому
13 Живаго
 
15.06.12
11:46
(12) Спасибо большое за помощь.
14 shuhard
 
15.06.12
11:47
(13) благодарность за дурные вести - что то новое для мисты =)
15 Живаго
 
15.06.12
11:56
(14)Благодарность вам и низкий поклон :), невежество хуже в любом случае.
16 Живаго
 
15.06.12
11:57
+(14)Кстати ADO посчитало все правильно ЛОЛ
17 Живаго
 
15.06.12
11:58
Щас буду сидеть тестить разные варианты формул, но блин на первый взгляд все работает.
18 aleks-id
 
15.06.12
12:02
19 soldatkin
 
15.06.12
12:42
Вот пример кода,

   Если НайтиФайлы(ПутьКФайлу).Количество() = 0 Тогда
       Предупреждение("Не найден файл экспорта");
       Возврат;
   КонецЕсли;
   Сообщить("Инициализация ...");
   Попытка
       Excel = Новый COMОбъект("Excel.Application");
   Исключение
       Предупреждение("Не удалось инициализировать");
       Возврат;
   КонецПопытки;
       
   Excel.Workbooks.Open(ПутьКФайлу);
   ОшибкиКоличество = 0;
   ОчиститьСообщения();
   ВремяСтарта = ТекущаяДата();

//РодительНоменклатураСоСкидкой = Справочники.Номенклатура.НайтиПоКоду("0020185");    //0020185
   РодительНоменклатураСоСкидкой = Справочники.Номенклатура.НайтиПоКоду("0020185");    //0020185
   Для каждого Лист Из Excel.Sheets Цикл
       ИмяЛиста    = ВРег(СокрЛП(Лист.Name));
       //МетаДанные    = Метаданные.НайтиПоПолномуИмени("Справочники.Номенклатура");
       
       тАртикул    = СокрЛП(Лист.Cells(1,1).Value);
       // 872    флак
       
       //Если МетаДанные = Неопределено Тогда
       //    Предупреждение("Не найден тип справочника " + МетаДанные);
       //    ЗавершениеОбработки();
       //    Возврат;
       //КонецЕсли;
       
       Для ии = 2 По 500 Цикл
           состояние(ии);
           тАртикул            = СокрЛП(Лист.Cells(ии,01).Value);
           тНаименование        = СокрЛП(Лист.Cells(ии,02).Value);
           тНаименованиеПолное    = СокрЛП(Лист.Cells(ии,03).Value);
           тНаименованиеАнгл    = СокрЛП(Лист.Cells(ии,04).Value);
           тКлон                = СокрЛП(Лист.Cells(ии,05).Value);
           тНДС                = СокрЛП(Лист.Cells(ии,08).Value);

...
20 aleks-id
 
15.06.12
14:00
(19) молодец какой. не постеснялся в пятницу такой знатный копрокод вывалить!