Читаем узкую колонку Excel, получаю "################" #786888


#0 by Базис
Есть большая таблица. При просмотре текст в ячейке не умещается и показан диезами, программно читаю двумя способами Поле5 = СокрЛП(Лист.Cells(НомерСтроки,5).Value) (1 вариант) Поле5 = СокрЛП(Лист.Cells(НомерСтроки,5).Text) (2 вариант) если данные чуть короче, то получаю: СокрЛП(Лист.Cells(НомерСтроки,5).Value) = "15.11.16" СокрЛП(Лист.Cells(НомерСтроки,5).Text) = "15.11.2016 8:31" А если длинней, то СокрЛП(Лист.Cells(НомерСтроки,5).Value) = "10.11.16" СокрЛП(Лист.Cells(НомерСтроки,5).Text) = "################" Первый вариант всегда теряет время, поэтому не годится. С .Text время остаётся, но нужно интерактивно или программно увеличить ширину столбца. А другие способы есть?
#1 by DrZombi
Используй ADO, прямое чтение данных из ексельки. "Будь мужиком, освой ADO" (c)
#2 by DrZombi
+ И почему топик в админе? :)
#3 by Вафель
через адо можно только плоские таблицы читать
#4 by mistеr
.Formula попробуй.
#5 by Базис
Исходник взял в книжке Андрея Михайлова, всё заработало, это было последним (стучит деревом по голове и наоборот) багом. Добавил перед чтением строк Лист.Columns.ColumnWidth = 18; и всё стало хорошо. Не придумал, куда писать про эксель.
#6 by DailyLookingOnASunse
Кстати про ADO. Читаю даты. IMEX=1 Если запущен Excel (для визуального сравнения, что есть и что загружается), то даты через ADO читаются как число (цифры в строке). Закрываю Excel - даты начинают читаться в формате dd.mm.yyy (также в строке). Пример (взято из табло конфигуратора): "40803"    Строка "17.09.2011"    Строка
#7 by Fish
"Не придумал, куда писать про эксель." - Раз читаешь его из 1С, то однозначно в 1С.
#8 by olegves
шрифт уменьшить, но это изврат - читать текст из ячейки
#9 by Torquader
В чём проблема перевода числа в дату ? Не забываем, что даты в Excel как число и хранятся.
#10 by DailyLookingOnASunse
Дык и нет проблем. Учитывать только в коде нужно этот момент. Другой прикол вышел куда досаднее - ИНН вместо строки вышел числом с плавающей точкой и потерял последние две цифры. Так что Excel придется закрывать.
#11 by trdm
> Добавил перед чтением строк: Лист.Columns.ColumnWidth = 18; > и всё стало хорошо. И грустно и смешно...
#12 by Базис
Коллеги! Эта задача давно сдана. Пользователи обучены, благодарны, зарплата получена и увеличила экономическое могущество как моё, так и крайне-северной галактики. Единственный мой резон после был - задокументировать баг и фичу для потомков. Форматы документов из разных крупных АИС менять не мне.
#13 by Garykom
Так сложно слегка погуглить и найти без всяческих извратов с шириной колонки? Просто Range.Value2 This works the same way as Range.Value, except that it does not check the cell format and convert to Date or Currency. And thats probably why its faster than .Value when retrieveing numbers.
#14 by Garykom
+ Функции преобразования Date<>Numbers и Currency<>Numbers так же легко гуглятся
#15 by Torquader
А вот ИНН, ФСРАРИД и другие коды "умный" Excel "кушает" - то есть ему нужно объяснять, что в ячейке строка, а не число.
#16 by Zhuravlik
Попадал давно на подобное. Можно ADO, если с ним какие грабли возникнут - вот самое простое что можно сделать , сохранить xls как csv, и прочитать текст. Хотя если таблица действительно большая - то лучше ADO.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С