![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 38
|
![]()
Всем доброго дня!
У меня есть задача следующего характера - имеется большая таблица (4000 строк) вида "артикул | описание" и надо перенести описания в другую книгу Excel по совпадающему артикулу. Описание - это довольно длинная последовательность символов, среди которых встречаются т.н. "неразрывные пробелы" (CHAR(160)) Эти "неразрывные пробелы" сильно портят мне жизнь, когда я переношу в другую таблицу описание к данному артикулу, т.к. вставляется не всё описание, а лишь его часть до "неразрывного пробела". Я борюсь с этим так: - копирую таблицу описаний в Блокнот, чтобы удалить форматирование текста. - из блокнота я копирую текст в Microsoft Word, в котором делаю операцию "поиск и замена" для символа "^s" (неразрывный пробел) на символ " " (пробел) По итогам получается в среднем 7000 замен. - исправленный текст снова копирую в Блокнот, а потом уже вставляю в Excel на место предыдущей таблицы. Неприятность состоит в том, что после операции копирования туда-сюда продолжить скриптовую обработку, поэтому вместо одного скрипта, который делает всё сразу, у меня их два и промежуточная ручная операция. Можно ли как-нибудь автоматизировать операцию поиска и замены "неразрывного пробела" на обычный? Описания, которые я обрабатываю, попадают в результирующую таблицу из множества файлов *.xls. В принципе, я могу вычищать из них "неразрывные пробелы" на этапе загрузки данных, только я не знаю, как заменить отдельный символ в строке. Помогите, пожалуйста! |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]() Код:
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 38
|
![]()
Да, оно, спасибо!
А почему, когда я попытался переписать код в такой манере, Excel ругнулся в цикле на "Object required"? Код:
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
cc.Value - это что здесь?
нужно sh.Cells(i, 5).Value
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 38
|
![]()
Чёрт, спать надо больше.
Спасибо ещё раз. Такими темпами, глядишь, я научусь программировать на VBA ![]() |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Только тут Integer не годится - вдруг строк больше чем 35000 (точно не помню) будет?
Пишите Long. Ну и такой перебор небыстрый, быстрее For Each должно быть. Или брать в массив, в нём заменять, выгружать назад. Вот, с замером времени: Код:
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 03.11.2010 в 17:38. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 38
|
![]()
Ага, понял!
А могли бы вы мне посоветовать, как сделать прогресс-бар или некий, подобный ему индикатор выполнения скрипта? Дело в том, что мне сейчас приходится исполнять скрипты, которые обрабатывают файлы по 4000 - 25000 строк и дело это не быстрое, особенно, если приходится искать в этих файлах. И я слежу за ходом исполнения программы по загруженности процессора. может быыть, можно пихать в какую-нибудь сервисную консоль сообщения в духе "обрабатываю строку %d", strnum? Было бы полезно. Я, как правило, знаю, сколько строк в файле и могу понять, скоро ли закончится обработка. Что посоветуете? |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Если делать на массивах, то сам прогрессбар отнимет времени больше, чем обработка массива.
А так я обычно Application.StatusBar использую, вот нашёл в записках примеры: Код:
И да, писать сообщения в духе "обрабатываю строку %d", strnum можно, только тогда не каждую, а например 33-ю или 100-ю - меньше тормозить будет, и читать будете успевать.
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 03.11.2010 в 18:03. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
На самом деле для замены неразрывного пробела на обычный на листе никакие циклы не нужны.
Код:
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как заменить обычний пробел на неразрывный пробел | Jaroslav | Microsoft Office Excel | 2 | 05.05.2010 11:57 |
настроить при открытии Excel 2003 в окошке "Тип файлов" вывод пункта "Все файлы (*.*)" по умолчанию? | Unior | Microsoft Office Excel | 2 | 01.03.2009 02:42 |
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) | Dorvir | Microsoft Office Excel | 2 | 28.03.2008 10:03 |
Чем отличаются обычный программист и "игровой" ?? | aVague | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 22 | 11.11.2007 23:41 |