Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2018, 19:08   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Excel 2010 съедает нули в начале артикула позиции

Здравствуйте. Сегодня столкнулся со следующей проблемой, объясню на конкретном примере ...
Есть много файлов (24), которые приходят в разных форматах: какие то в CSV, какие то в XLSX, какие то в XLS.
Все файлы необходимо прочищать от всякой нечисти, вроде служебных символов (для правильного составления SQL). Прочистка выполняется для каждого файла отдельно с помощью VB-скрипта, и всё это выполняется под Excel 2010.
Ну и разумеется, для некоего упрощения жизни всё это дело сохраняется в CSV.

Теперь по примеру. Есть два файла - CSV и XLSX.
Есть артикул запчасти (она же позиция) - 03674.
Если первый файл открыть с помощью блокнота - то там присутствует артикул именно в таком виде. Если этот же файл открыть в экселе - то там артикул уже без нуля.
Второй файл блокнотом проверить затруднительно, но в экселе он изначально идёт без нуля. НО, на сайте поставщика артикул с нулём, то есть по идее, в прайс тоже изначально записывается артикул правильно.

Теперь о сути проблемы: в моём случае 03674 != 3674, а эксель так не думает. Делал формат ячеек текстовый, бесполезно.
Как подскажете бороться ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 06.09.2018, 19:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Как подскажете бороться ?
попробуйте в CSV файле задать перед нулями, которые нужно сохранить, поставить символ '
например,
Код:
1;'0012;tovar1
2;'03674;tovar2
либо, думаю, можно загружать данные с помощью макроса.

но, в любом случае, такая проблема есть и Excel будет Вам мешать изо всех сил.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.09.2018, 19:47   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
поставить символ '
Это служебный символ в SQL. Они у меня тоже прочищаются макросом в Excel.
Иначе выполнение запросов сыпется на синтаксисе.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 06.09.2018, 22:43   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а) не не проблема excel 2010, это стиль работы Excel вообще
б) есть добрый десяток если не сотни способов решения проблемы

описываете свою задачу: что делаете, что получается, а что хотите получить и, возможно, Вам смогут подсказать как это сделать.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.09.2018, 01:22   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
описываете свою задачу: что делаете, что получается, а что хотите получить и, возможно, Вам смогут подсказать как это сделать
Так описал же, может не везде не всё и не всем понятно, но увы, этого мне ну никак не избежать, ибо человеческий фактор.
Ещё раз, разложу в том порядке, в котором вы попросили:
Цитата:
Сообщение от IgorGO Посмотреть сообщение
что делаете, что получается, а что хотите получить
Что есть:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Есть много файлов (24), которые приходят в разных форматах: какие то в CSV, какие то в XLSX, какие то в XLS
< ... >
Есть два файла - CSV и XLSX.
Есть артикул запчасти (она же позиция) - 03674.
Если первый файл открыть с помощью блокнота - то там присутствует артикул именно в таком виде. Если этот же файл открыть в экселе - то там артикул уже без нуля.
Второй файл блокнотом проверить затруднительно, но в экселе он изначально идёт без нуля. НО, на сайте поставщика артикул с нулём, то есть по идее, в прайс тоже изначально записывается артикул правильно.
Предисловие о 24 файлах ведётся к тому, что мне неизвестны способы выполнить тоже самое, только без экселя. О том, что я делаю - дальше.
Что делаю:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Все файлы необходимо прочищать от всякой нечисти, вроде служебных символов (для правильного составления SQL). Прочистка выполняется для каждого файла отдельно с помощью VB-скрипта, и всё это выполняется под Excel 2010.
Ну и разумеется, для некоего упрощения жизни всё это дело сохраняется в CSV.
Что получается:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
в моём случае 03674 != 3674, а эксель так не думает
При этом, такое поведение Excel фиксируется ещё до обработки, то есть - до того, как я сделал что то.
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Если первый файл открыть с помощью блокнота - то там присутствует артикул именно в таком виде. Если этот же файл открыть в экселе - то там артикул уже без нуля.
Что хочу получить:
должно быть понятно исходя из сути проблемы
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Теперь о сути проблемы: в моём случае 03674 != 3674, а эксель так не думает
Если перефразировать - то мне необходимо, что бы эксель не приравнивал эти два в данном случае различных текста, и что бы это соответствовало заданным требованиям:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Все файлы необходимо прочищать от всякой нечисти, вроде служебных символов (для правильного составления SQL)
Тезис о тексте:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Делал формат ячеек текстовый, бесполезно.
Среди служебных символов та самая одинарная кавычка, о чём я упомянул выше:
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Это служебный символ в SQL. Они (одинарные кавычки) у меня тоже прочищаются макросом в Excel.
Иначе выполнение запросов сыпется на синтаксисе.
Можно пожалуйста с этого места по подробней ?
Цитата:
Сообщение от IgorGO Посмотреть сообщение
не не проблема excel 2010, это стиль работы Excel вообще
P. S. Как вы могли догадаться - линейного мышления здесь не хватит, для того что бы понять суть проблемы. Так как я уже имею определённые наработки, в которых что то из чего то следует.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 07.09.2018 в 01:32.
OmegaBerkut вне форума Ответить с цитированием
Старый 07.09.2018, 02:37   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

0. Скопируйте файлы во вложении себе на диск.
1. откройте Excel
2. откройте file.SCV. Видите нули в артикулах?
3. закройте file.SCV
4. откройте файл ОткрытьCSVFile
5. жмите кнопку Открыть file.csv. Видите нули в артикулах??
Вложения
Тип файла: rar Example.rar (12.4 Кб, 15 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.09.2018, 02:44   #7
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

IgorGO, вы кажется забыли вложить сам макрос ... =)
В файле CSV нули видны в блокноте, а в экселе не видны ни при втором, ни при пятом пунктах.
P. S. При пятом пункте я открывал файл из папки, а не по кнопке, ибо см. скриншот.
Изображения
Тип файла: png lol.png (27.9 Кб, 134 просмотров)
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 07.09.2018, 02:47   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Упс сори.
Забыл "Разрешить редактирование".
Щас нули появились. Где фокус-покус ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 07.09.2018, 02:55   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см. макрос в файле ОткрытьCSVFile (там всего пара строк)
а вообще фокус в том, что достаточно понимать что делать и сделать это
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.09.2018, 03:02   #10
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

В принципе, разобрался ...
Хорошо, едем дальше по моей ситуации.
Есть 24 файла, и в каждом файле есть колонка с артикулом, её расположение зависит исключительно от фантазии того, кто писал генератор каждого отдельного файла прайса.
В прочем, как и содержимое этих колонок тоже зависит далеко не от меня, и даже не от поставщиков, а от тех, кто эти артикулы создаёт. В частности, довольно большое количество артикулов начинаются с нуля, а иногда этих нулей может быть несколько.
Таким образом я имею две проблемы:
1) колонки с нужными данными для редактирования могут располагаться не в фиксированном месте;
2) сами артикулы могут быть изначально проблемными, но, не все.

То есть, мне в самом простом случае нужно под каждый файл прайса подбивать данные, где нужно выставить эти апострофы, и они будут не только там, где нужно, но это ладно.
Суть в том, что это довольно таки затратная процедура, а прайсы обновлять нужно каждый день.

1. Есть ли возможность отключить эту дикую дичь в экселе, типа "вот я тут подумал, а нафига тебе тут нули, когда это число". Мы уже разобрались, что это текст.
2. Или: есть ли возможность обойтись без экселя ?

По поводу второго пункта: я пытался накодить собственный парсер с использованием библиотек для работы с файлами Excel. Но на практике выясняется, что парсинг нескольких миллионов позиций - довольно затратная операция, макрос в экселе работает наиболее быстро (от пары секунд до пол минуты в зависимости от количества позиций в одном прайсе). С чем это связано - мне пока что не понятно.
Собственный парсер с одним файлом работал больше трёх минут, на этом я программу закрыл, и больше не открывал (вроде как даже удалил проект).
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 07.09.2018 в 03:07.
OmegaBerkut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выставить артикула друг напротив друга в ms excel Djshap Помощь студентам 1 31.01.2017 20:48
text-overflow: ellipsis - как сделать, чтобы он обрезал предложение в начале и ставил многоточие в начале? orion1212 HTML и CSS 4 06.11.2016 20:01
Нули заменить пустыми ячейками. Excel ДТВ Помощь студентам 0 16.04.2013 18:23
Excel обрезает нули W0LF Общие вопросы Delphi 1 14.02.2013 22:57
Расцепить 18 столбцов и убрать нули в Excel 2003 явген Microsoft Office Excel 10 17.08.2011 23:46