Страницы: 1 2 След.
RSS
Excel 2016 не открывает штрих-коды, Проблема со штрих-кодами в Excel
 
Добрый день, уважаемые эксперты форума! Обращаюсь к вам впервые, т.к. раньше ответы удавалось найти в уже существующих темах. Но не в этот раз. Проблема в следующем:

Присылает нам поставщик накладные, предположительно, из 1С. На всех компах, кроме новых, они открываются корректно, а на новых стоит MS Office 2016 (лицензия) и вместо штрих-кода открывается набор символов. Шрифт в систему установлен. В Word 2016 все работает. А в Excel 2016 даже вручную назначить этот шрифт не дает. При этом, в MS Office 2003 (лицензия) открывается все без проблем. Переставить офис на старый не вариант, ибо все лицензия на определенное количество машин. Все настройки безопасности отключали - не помогает. Отправил друзьям - выяснилось, что проблема на всех машинах с офисом  2016. При этом, другие штрих-коды открываются без проблем. Проблема в  том, что в данном документе штрих-код в отдельном модуле, а Excel 2016  по какой-то причине не позволяет ставить в "Надписях" нестандартные  шрифты. Может кто с этим сталкивался? Файлы прилагаю: в архиве пример файла и шрифт.

 
whitemanehorsey,
Ну первое что напрашивается, так это поставщику привет и порекомендовать накладные пересылать в PDF, или вы их далее правите?
По вопросам из тем форума, личку не читаю.
 
 БМВ,
Правим, импортируем и отправляем далее. Поставщик - очень крупная контора и не будет ничего менять. Все подстраиваются под них.
Изменено: whitemanehorsey - 24.07.2018 17:13:23
 
Где штрих код то должен быт, я и на 2013 его не наблюдаю.
По вопросам из тем форума, личку не читаю.
 
БМВ, в шапке. Скрин прилагаю.  
 
У меня не вызвал проблем: Excel 2016(64, En) Win10 (windows-1252)
Владимир
 
sokol92, у нас разрядность офиса - 32 бита, язык - русский Win7 и Win10 x64. В остальном все так же.Вы никакие дополнительные настройки после установки офиса не производили?
 
Такое впечатление, что проблема в файле. Именно к фигуре шрифт не применяется, зато к ячейкам - без проблем. Можете просто скопировать текст из фигуры в ячейку и назначить шрифт Barcode. Все будет отображаться нормально.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, данные файлы выгружаются массово (несколько десятков тысяч в день). Если каждый открывать и править, то рабочего дня не хватит. А многие конечные получатели с экселем на Вы, а то и просто печатают и от руки заполняют. Потом присылают обратно в бумажном виде, а поставщик отказывается принимать из-за отсутствия штрих-кода. И тут проблема не в файле. Можете попробовать создать новый документ, в нем вставить "Надпись" и попробовать применить этот шрифт или другие нестандартные — результат тот же - не применяет, по крайней мере у меня. Мне больше интересно, почему Эксель 2003 спокойно применяет шрифт к фигуре, а 2016-й наотрез отказывается? Может эту функцию можно как-то включить?
 
Цитата
whitemanehorsey написал:
Можете попробовать создать новый документ, в нем вставить "Надпись" и ...
Все дело в том, что попробовал и все работает. Штрих-код именно в фигуре. Так что дело-таки в файле изначально. Что, правда, совсем не означает, что наряду с этим нет проблем в самом офисе - это может быть связано воедино. Косяк в файле, который не учтен в офисе. Отправьте в Microsoft с описанием бага, может чего исправят.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
У меня и в 2010м ШК только в ячейке можно задать.
Как вариант - макрос на событие приложения использовать, пусть показыввает этот штрихкод где-то правее, ну или пусть на это место кладёт картинку.
 
Дмитрий(The_Prist) Щербаков, хотя да, приношу свои извинения, не работает только если скопировать из исходного файла. Если набивать с нуля, то работает. Мне начинает казаться, что глюк может скрываться или в @ на конце штрих-кода, или в самом процессе выгрузки этих накладных из 1С, которая любит сыпать всякими метаданными и псевдообъектами... Может ли быть такое, что типы данных объектов "Надпись" в структуре файла в 2003-м и в 2016-м экселях разные?

Про запрос к мелкомягким уже на втором форуме советуют... Наверное все-таки придется. Хотя мне кажется, что они на 1С валить начнут...
Изменено: whitemanehorsey - 24.07.2018 19:29:00 (дополнил)
 
Цитата
whitemanehorsey написал:
Может ли быть такое, что типы данных объектов "Надпись" в структуре файла в 2003-м и в 2016-м экселях разные?
легко. Но и неверную выгрузку тоже нельзя исключать, т.к. вновь созданные объекты поддерживают эти шрифты. Так что я бы делал ставку именно на косяк выгрузки.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Hugo, правее нельзя, у поставщика автоматизированная обработка при получении с распознаванием рукописного ввода. Поэтому штрих-код, его размеры и расположение здесь основное. А вот про картинку вопрос интересный... Вот только что считать событием и как извлечь данные из этой автофигуры?
 
Чисто теоретически, можно написать код, который будет перебирать все файлы, забирать текст из этой фигуры и в новой книге создаст фигуру таких же размеров, вставит текст, применит шрифт и заменит в исходном файле "глючную" фигуру.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Событие - открытие или активация листа с такими объектами, или с такой формой, или вообще любого после включения "крыжика" где как придумаете.
Код берёт объект, генерит по данным штрихкод, делает из этого картинку, ставит куда нужно, сохраняет файл в нужном месте в нужном виде.
Есть вариант кода, который просто рисует набор линий, тоже можно использовать как вариант решения.
А можно просто не мудрить, а обработать указанный каталог и всё.
Изменено: Hugo - 24.07.2018 19:46:02
 
Дмитрий(The_Prist) Щербаков, про косяк выгрузки представители поставщика отвечают, что у них все работает. А у них офис 2003 у всех. На 2003-м действительно работает без проблем. Вот потому я тему тут и создал - ищу решение проблемы, возможно, с их косяком, но как я писал выше, поставщик очень крупный и все подстраиваются как могут.
 
А может проще поставить 2003 и открывать в нём?
 
Попробуйте такой код:
Код
'---------------------------------------------------------------------------------------
' Author : The_Prist(Щербаков Дмитрий)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          https://www.excel-vba.ru
'          info@excel-vba.ru
' Purpose:
'---------------------------------------------------------------------------------------
Sub FixBarcodeText()
    Dim sFolder As String, sFiles As String
    Dim wb As Workbook, ws As Worksheet
    Dim shptmpl As Shape, shp As Shape
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    'отключаем обновление экрана, чтобы наши действия не мелькали
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        If sFiles <> ThisWorkbook.Name Then
            'открываем книгу
            Set wb = Application.Workbooks.Open(sFolder & sFiles)
            Set ws = wb.Sheets(1)
            Set shp = ws.Shapes(1)
            If shptmpl Is Nothing Then
                Set shptmpl = ThisWorkbook.Sheets(1).Shapes.AddLabel(1, shp.Left, shp.Top, shp.Width, shp.Height)
                shptmpl.Name = "_tmplbarcode_"
            End If
            shptmpl.TextEffect.Text = shp.TextEffect.Text
            shptmpl.TextEffect.FontName = "Barcode"
            shptmpl.TextEffect.FontSize = 16
            shptmpl.Copy
            ws.Paste
            With ws.Shapes("_tmplbarcode_")
                .Left = shp.Left
                .Top = shp.Top
            End With
            shp.Delete
            'Закрываем книгу с сохранением изменений
            wb.Close True 'если поставить False - книга будет закрыта без сохранения
        End If
        sFiles = Dir
    Loop
    If Not shptmpl Is Nothing Then
        shptmpl.Delete
    End If
    'возвращаем ранее отключенное обновление экрана
    Application.ScreenUpdating = True
End Sub
Только пробуйте на копиях файлов. Помещаете нужные для исправления файлы в одну папку. В отдельном файле помещаете данный код. Запускаете его. Выбираете папку с файлами. Он откроет каждый файл и поправит в нем фигуры. Файлы будут сохранены и именно поэтому пробовать лучше на копиях файлов, чтобы ничего не попортить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Чисто теоретически, можно написать код, который будет перебирать все файлы
Файлы в динамике и приходят ежедневно в течение дня. То есть код должен будет работать постоянно на всех машинах, где есть этот глюк. Организовать это нереально, т.к. придется менять структуру работы многих и многих...

Цитата
Hugo написал:
А может проще поставить 2003 и открывать в нём?
Увы, как я писал выше, нет. На новые машины куплены лицензии на офис 2016. На офис 2003 лицензии сейчас не продают. А объяснить даунгрейд, что платили за 2016, а пользуются 2003-м сами понимаете...


Резюмирую:
Где-то в нас (я и руководство компании) трепыхалась надежда, что проблема решается проще, по принципу "Зайдите в настройки и снимите галочку...". Но, судя по всему, это не так. Любые сложные решения невыполнимы в силу специфики отрасли. Тот же скрипт я не смогу внедрить человеку, который находится удаленно и даже не знает как запустить тимвьювер. В общем, похоже придется писать в майкрософт и ждать ответа от них. Большое всем спасибо за консультации. Если найду решение — отпишу.

Цитата
Hugo написал:
Событие - открытие или активация листа с такими объектами, или с такой формой, или вообще любого после включения "крыжика" где как придумаете.Код берёт объект, генерит по данным штрихкод, делает из этого картинку, ставит куда нужно, сохраняет файл в нужном месте в нужном виде.Есть вариант кода, который просто рисует набор линий, тоже можно использовать как вариант решения.А можно просто не мудрить, а обработать указанный каталог и всё.
Если есть ссылки на примеры кода - буду благодарен. Возможно, придется пересматривать маршрутизацию накладных, если майкрософт ничего не ответит, а количество новых компов будет расти.
 
Дмитрий(The_Prist) Щербаков, огромное спасибо за код! Это решение может помочь, если придется менять маршрутизацию накладных.

А можно ли этот код использовать вне среды Excel? Например, в Outlook?
Изменено: whitemanehorsey - 24.07.2018 20:30:12 (дополнил)
 
whitemanehorsey, ссылок на примеры кода у меня нет, ибо такого кода пока и нет.
И вообще пока не понятно - нужно ли думать над таким решением, ибо мне пока итоговая задача не ясна. Зачем нужен этот штрихкод?
 
Дмитрий(The_Prist) Щербаков, у меня не сработало. Фигура с кодом есть, а штрихов нет... Шрифт в системе есть, на ячейке могу изобразить.
 
Цитата
whitemanehorsey написал:
В остальном все так же.Вы никакие дополнительные настройки после установки офиса не производили?
Клянусь. Только поставил шрифт.
Владимир
 
Клянусь, у меня  объект не позволяет поменять шрифт на целый ряд шрифтов, даже тех, что были в системе. В том числе и все Barcode. А система то буквально свежак, переставил в эти выходные.
Изменено: БМВ - 24.07.2018 21:05:24
По вопросам из тем форума, личку не читаю.
 
Цитата
Hugo написал:
Шрифт в системе есть, на ячейке могу изобразить
Игорь, так у тебя и до этого не работало :) Код только использует объект из новой книги - сам принцип создания ШК остался неизменным, а значит и не мог у тебя заработать. Я код делал исходя из того, что у ТС в новой книге все работает.
Чтобы заработало у тебя надо сначала в ячейку запихивать, потом менять шрифт, копировать ячейку и вставлять как картинку. Но тогда размеры самого ШК и его пропорции могут быть не такими, какими должны быть. Хотя и такой код можно без проблем изобразить в моем коде - не так много переделывать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Да, странно... Некоторые шрифты принимает, некоторые нет... Даже тот же Wingdings работает, а Barkode нет.
 
Проверил дома, работает. Excel 2007 (ru), Win7 (windows-1251)
Владимир
 
А может такой код в персонал?
Код
Option Explicit
Private WithEvents XLApp As Application

Private Sub Workbook_Open()
    Set XLApp = Excel.Application
End Sub

Private Sub XLApp_WorkbookOpen(ByVal Wb As Workbook)
    Dim bk$
    With Wb.Sheets(1)
        On Error Resume Next
        bk = .DrawingObjects(1).Caption
        If Right(bk, 1) = "@" Then
            .DrawingObjects(1).Delete
            With .Range("J3:M4")
                .Merge
                .HorizontalAlignment = xlRight
                .VerticalAlignment = xlCenter
                .Font.Name = "Barcode"
                .Font.Size = 16
                .Value = bk
                ' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
                ' ежели нужна картинка
                .CopyPicture Appearance:=xlScreen, Format:=xlPicture
                .Select
                Wb.Sheets(1).Paste
                .ClearContents
                ' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
            End With
        End If
    End With
End Sub
 
Коллеги но ведь в целом это проблема экспорта из всем и горячо любимой 1C и еще более горячо любимых и ужасно трудолюбивых  программистов на 1С
Цитата
whitemanehorsey написал:
Поставщик - очень крупная контора и не будет ничего менять.
Это не корретное утверждение, если контора крупная, то она? не часто, но думает о завтра, и если сегодня у одного клиента проблемы, завтра у 10. Заявить о том что не работает решение стабильно нужно уже сегодня.  
По вопросам из тем форума, личку не читаю.
Страницы: 1 2 След.
Читают тему
Наверх