|
Читаем узкую колонку Excel, получаю "################" | ☑ | ||
---|---|---|---|---|
0
Базис
naïve
08.12.16
✎
12:06
|
Есть большая таблица. При просмотре текст в ячейке не умещается и показан диезами, программно читаю двумя способами
Поле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
DrZombi
гуру
08.12.16
✎
12:08
|
(0) Используй ADO, прямое чтение данных из ексельки.
"Будь мужиком, освой ADO" (c) http://catalog.mista.ru/public/163640/ |
|||
2
DrZombi
гуру
08.12.16
✎
12:09
|
+ И почему топик в админе? :)
|
|||
3
Вафель
08.12.16
✎
12:10
|
(1) через адо можно только плоские таблицы читать
|
|||
4
mistеr
08.12.16
✎
12:23
|
(0) .Formula попробуй.
|
|||
5
Базис
naïve
08.12.16
✎
12:24
|
(1) Исходник взял в книжке Андрея Михайлова, всё заработало, это было последним (стучит деревом по голове и наоборот) багом.
Добавил перед чтением строк Лист.Columns(5).ColumnWidth = 18; и всё стало хорошо. (2) Не придумал, куда писать про эксель. |
|||
6
DailyLookingOnA Sunse
15.12.16
✎
10:10
|
(1)
Кстати про ADO. Читаю даты. IMEX=1 Если запущен Excel (для визуального сравнения, что есть и что загружается), то даты через ADO читаются как число (цифры в строке). Закрываю Excel - даты начинают читаться в формате dd.mm.yyy (также в строке). Пример (взято из табло конфигуратора): "40803" Строка "17.09.2011" Строка |
|||
7
Fish
15.12.16
✎
10:15
|
(5) "Не придумал, куда писать про эксель." - Раз читаешь его из 1С, то однозначно в 1С.
|
|||
8
olegves
15.12.16
✎
10:24
|
(0) шрифт уменьшить, но это изврат - читать текст из ячейки
|
|||
9
Torquader
15.12.16
✎
14:19
|
(6) В чём проблема перевода числа в дату ?
Не забываем, что даты в Excel как число и хранятся. |
|||
10
DailyLookingOnA Sunse
15.12.16
✎
16:07
|
(9)
Дык и нет проблем. Учитывать только в коде нужно этот момент. Другой прикол вышел куда досаднее - ИНН вместо строки вышел числом с плавающей точкой и потерял последние две цифры. Так что Excel придется закрывать. |
|||
11
trdm
15.12.16
✎
16:48
|
(5) > Добавил перед чтением строк: Лист.Columns(5).ColumnWidth = 18;
> и всё стало хорошо. И грустно и смешно... |
|||
12
Базис
naïve
15.12.16
✎
17:05
|
Коллеги!
Эта задача давно сдана. Пользователи обучены, благодарны, зарплата получена и увеличила экономическое могущество как моё, так и крайне-северной галактики. Единственный мой резон после (5) был - задокументировать баг и фичу для потомков. Форматы документов из разных крупных АИС менять не мне. |
|||
13
Garykom
гуру
15.12.16
✎
17:32
|
Так сложно слегка погуглить и найти https://fastexcel.wordpress.com/2011/11/30/text-vs-value-vs-value2-slow-text-and-how-to-avoid-it/ без всяческих извратов с шириной колонки?
Просто 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
Garykom
гуру
15.12.16
✎
17:35
|
(13)+ Функции преобразования Date<>Numbers и Currency<>Numbers так же легко гуглятся
|
|||
15
Torquader
16.12.16
✎
01:23
|
А вот ИНН, ФСРАРИД и другие коды "умный" Excel "кушает" - то есть ему нужно объяснять, что в ячейке строка, а не число.
|
|||
16
Zhuravlik
16.12.16
✎
01:28
|
(0) Попадал давно на подобное. Можно ADO, если с ним какие грабли возникнут - вот самое простое что можно сделать http://catalog.mista.ru/public/149994/, сохранить xls как csv, и прочитать текст. Хотя если таблица действительно большая - то лучше ADO.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |