записывать специальные символы в таблицу Excel с помощью пакета python pyExcelerator / xlwt - PullRequest
5 голосов
/ 27 августа 2009

Задача:
Я генерирую отформатированные таблицы Excel из CSV-файлов, используя пакет pyExcelerator (сравнимый с xlwt). Мне нужно иметь возможность писать знаки «меньше или равно (≤)» и «больше или равно (≥)».

Пока:
Я могу сохранить свою таблицу в виде csv-файлов с кодировкой UTF-8, чтобы я мог просматривать специальные символы в моем текстовом редакторе, добавив следующую строку в исходный код Python:

#! /usr/bin/env python
# -*- coding: UTF-8 -*-

Проблема:
Тем не менее, нет возможности выбрать UTF-8 в качестве шрифта в классе шрифтов pyExcelerator. Единственные варианты:

CHARSET_ANSI_LATIN          = 0x00
CHARSET_SYS_DEFAULT         = 0x01
CHARSET_SYMBOL              = 0x02
CHARSET_APPLE_ROMAN         = 0x4D
CHARSET_ANSI_JAP_SHIFT_JIS  = 0x80
CHARSET_ANSI_KOR_HANGUL     = 0x81
CHARSET_ANSI_KOR_JOHAB      = 0x82
CHARSET_ANSI_CHINESE_GBK    = 0x86
CHARSET_ANSI_CHINESE_BIG5   = 0x88
CHARSET_ANSI_GREEK          = 0xA1
CHARSET_ANSI_TURKISH        = 0xA2
CHARSET_ANSI_VIETNAMESE     = 0xA3
CHARSET_ANSI_HEBREW         = 0xB1
CHARSET_ANSI_ARABIC         = 0xB2
CHARSET_ANSI_BALTIC         = 0xBA
CHARSET_ANSI_CYRILLIC       = 0xCC
CHARSET_ANSI_THAI           = 0xDE
CHARSET_ANSI_LATIN_II       = 0xEE
CHARSET_OEM_LATIN_I         = 0xFF

Содержат ли какие-либо из этих наборов символов знаки "меньше или равно" и "больше или равно"? Если да, то что?
Какое имя кодировки Python соответствует этим наборам? Есть ли другой способ генерации этих специальных символов?

Ответы [ 3 ]

5 голосов
/ 19 марта 2010

Это должно помочь при написании UTF-8 символов с использованием pyexcelerator или xlwt:

wb = xlwt.Workbook(**encoding='utf-8'**)

редактирование:

Кажется, это не работает для pyexcelerator, но я не подтвердил это.

4 голосов
/ 29 августа 2009

Возможно, вы переосмысливаете проблему. Шрифт не должен играть роль, хотя кодировка символов может.

В любом случае я смог использовать xlwt для создания электронной таблицы Excel со знаками "меньше чем" и "больше чем" со следующим сценарием:

import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('Test Sheet')
lte = u'\u2264'
gte = u'\u2265'
ws.write(0,0,lte+gte)
wb.save('foo.xls')

Обратите внимание, что - - кодирование: utf-8 - - не требуется, потому что специальные символы кодируются с помощью их числовых индексов в Юникоде. В общем, я рекомендую использовать Unicode, где это возможно.

Также возможно использовать utf-8 и вводить символы непосредственно в код Python. Это будет точно так же, за исключением того, как вводятся символы:

#-*- coding: utf-8 -*- 
import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('Test Sheet')
lte = u'≤'
gte = u'≥'
ws.write(0,0,lte+gte)
wb.save('foo.xls')

Обратите внимание, однако, что вы должны использовать редактор, который знает , что вы сохраняете код Python как UTF-8. Если ваш редактор кодирует файл любым другим способом, специальные символы не будут анализироваться должным образом при загрузке интерпретатором Python.

1 голос
/ 29 августа 2009

(1) Re: "" " Я могу сохранить свою таблицу в виде csv-файлов с кодировкой UTF-8, чтобы я мог просматривать специальные символы в моем текстовом редакторе, добавив следующую строку в исходный код Python:

#! /usr/bin/env python
# -*- coding: UTF-8 -*-
"" "

Возможность записи файла с символами, закодированными в UTF-8, НЕ зависит от того, какая кодировка используется в источнике программы, которая записывает файл!

(2) UTF-8 - это кодировка, а не шрифт. Эти наборы символов в записи шрифта Excel - взрыв из прошлого AFAIK. Я не слышал ни от одного пользователя xlwt, который считал необходимым использовать кодировку, отличную от значения по умолчанию. Просто передайте объекты Unicode в xlwt, как продемонстрировал Джейсон ... если у вас есть подходящий шрифт в вашей системе (посмотрите, можете ли вы отображать символы в OpenOffice Calc), вы должны быть в порядке.

(3) Есть какая-то конкретная причина для использования pyExcelerator вместо xlwt?

...