Век живи — век учись, а дураком помрешь. Еще раз убеждаюсь в правдоподобности поговорки. Меня попросили о помощи, при поиске ни в учетной системе, ни в выгрузке в Excel не находился номер накладной. Как выяснилось, мешался невидимый символ в тексте, первый раз вижу такое. Интересный случай. Я решил даже написать отдельную статью.
Предыстория. Был короткий список накладных, которые надо было проверить. Этот список в теле письма переслали клиенту. Клиент, судя по всему при помощи копировать/вставить, проверял наличие номера уже в своей системе. Затем после проверки номер одной накладной клиент прислал обратно по почте. После чего такой номер накладной уже не искался во внутренней учетной системе, из которой изначально появился. В чем же дело? Попробуем разобраться.
Как найти невидимый символ в тексте Excel и Word?
Когда мне позвонили, чтобы спросить совет, я сразу предположил, что в номере есть лишние пробелы или ноль заменен на букву «О». Узнав, что это не так, попросил скорее прислать файл.
Визуально, ничего не находится. Проверив длину текста, оказалось, что первая строка длиннее аж на 2 символа — т.е. состоит из 10 символов.
Я сразу разрезал текст на кусочки.
Подумал, что наверно — это символы-пустышки 30 или 152, но тоже нет.
Пробежал макросом, сравнивая символ ячейки со всеми символами через Chr(). Тоже нет совпадений. В общем, пока загадка. Возможно, кто-то знает ответ. Еще поищу в интернете.
Файл прикладываю.
Выводы
Судя по всему, символ добавился либо при пересылке, либо при использовании в учетной системе клиента. В целом, случай довольно редкий, какой-то защиты придумать сложно, тем более я так и не нашел мешающийся символ. Но в любом случае полезно знать, что такая трудность может случится, и как искать ошибку.
Удобный макрос
Спасибо Николаю nickmitch за небольшой макрос, который показывает символы строки и их коды в юникоде:
Sub see_token() str1 = Cells(1, 1) str2 = Cells(2, 1) For i = 1 To Len(str1) Cells(1, 3 + i) = Mid(str1, i, 1) Cells(2, 3 + i) = AscW(Mid(str1, i, 1)) Next i For i = 1 To Len(str2) Cells(3, 3 + i) = Mid(str2, i, 1) Cells(4, 3 + i) = AscW(Mid(str2, i, 1)) Next i End Sub
Комментарии:
( 2 Comments )
Очень интересно! Спасибо!
Лишний пробел перед первой 1