Ошибка Юникода xlwings

Я относительно новичок в программировании, поэтому извините, если я не предоставляю достаточно информации. ОС: Mac OS X 10.10.3. Из Excel (2011, 14.4.5) я вызываю python xlwings (0.3.5).

Цель состоит в том, чтобы напечатать строку с датским символом. Код VBA:

Sub PrintText()
RunPython ("import test_file; test_file.print_text()")
End Sub

Код Python:

# -*- coding: utf-8 -*-
from xlwings import Workbook, Sheet, Range, Chart


def print_text():
    wb = Workbook.caller()  # Creates a connection with a new workbook
    print('å')

Вывод (к сожалению, у меня нет точки для размещения изображения):

Ошибка

строка 7, в print_text print('\xe5')

UnicodeEncodeError: кодек «ascii» не может кодировать символ «\ xe5» в позиции 0: порядковый номер не в диапазоне (128)

Мне также интересно, почему диалоговое окно показывает «Ошибка», когда ошибки нет (например, print('a')?


person DauleDK    schedule 26.04.2015    source источник


Ответы (1)


Для работы с юникодом в Python у вас есть две возможности: либо использовать Python 3, где обычно все просто работает, либо добавить u перед нашей строкой в ​​Python 2, чтобы сделать их юникодными: u'å', см. также связанное обсуждение здесь.

Что касается другого вопроса: правда, это не идеально: всплывающее окно (ошибка) на Mac в настоящее время показывает все, что идет на стандартный вывод, включая сообщения для печати. Последний пункт этих примечаний к выпуску показывает, как полностью отключить всплывающее окно (как текущий обходной путь).

Обновление: вот пример скрипта с юникодом для Python 3 (для вызова из Excel):

from xlwings import Workbook, Range
def print_text():
    wb = Workbook.caller()
    Range('A1').value = 'å'
person Felix Zumstein    schedule 26.04.2015
comment
Спасибо за быстрый ответ. Я использую Python 3.4.2 (подтверждено с помощью print(sys.version). Как упоминалось в ссылке, я также пытался использовать unicode print(str("å", 'utf-8')), но выдает ошибку: TypeError: decoding str не поддерживается. - person DauleDK; 27.04.2015
comment
Я обновил свой ответ образцом - я думаю, вы заглядываете слишком далеко: при работе с Excel вам не нужно print - вы будете работать с ячейками напрямую. Имеет смысл? - person Felix Zumstein; 27.04.2015
comment
Теперь я понимаю - спасибо за отличный ответ и отличный инструмент! - person DauleDK; 28.04.2015