2009-08-27 4 views
5

Задача:
Я генерирую форматированные таблицы excel из csv-файлов с помощью пакета pyexcelerator (сопоставим с xlwt). Мне нужно иметь возможность писать знаки меньше или равны (≤) и больше или равно (≥).написать специальные символы в таблицу excel пакетом python pyExcelerator/xlwt

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

#! /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 соответствует этим наборам? Есть ли другой способ для генерации этих специальных символов?

ответ

4

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

В любом случае, я был в состоянии использовать 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. В общем, я рекомендую использовать 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.

+0

спасибо, что получилось – SimonSalman

1

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

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

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

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

(3) Любая конкретная причина использования pyExcelerator вместо xlwt?

+0

to (3): Я только что нашел pyExcelerator и установил его. Вместо этого вы порекомендовали бы xlwt? – SimonSalman

+3

@SimonSalman: Конечно :-) ... Раскрытие информации: Я сторонник 'xlwt'. –

5

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

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

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

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

+0

@yoshi: Это не сильно поможет pyExcelerator - у него есть кодировка по умолчанию HARD-CODED (cp1251). В xlwt была добавлена ​​функциональность кодирования по умолчанию для вызывающего абонента, добавленная в феврале 2007 года. pyExcelerator не поддерживается. Вопрос: что такое символ UTF-8? –

+0

@John Machin: по символу UTF-8 я имел в виду символ, который был закодирован с использованием UTF-8, а не ASCII. У меня что-то не так? – yoshi