|
Загрузка из эксель | ☑ | ||
---|---|---|---|---|
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) молодец какой. не постеснялся в пятницу такой знатный копрокод вывалить!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |