2009-08-27 35 views
5

Tác vụ:
Tôi tạo các bảng excel đã định dạng từ tệp csv bằng cách sử dụng gói python pyExcelerator (so sánh với xlwt). Tôi cần có khả năng viết các ký hiệu nhỏ hơn hoặc bằng (≤) và lớn hơn hoặc bằng (≥).viết các ký tự đặc biệt vào bảng excel bằng gói python pyExcelerator/xlwt

Cho đến nay:
tôi có thể lưu bảng của tôi như csv-files với UTF-8 mã hóa, vì vậy mà tôi có thể xem các ký tự đặc biệt trong trình soạn thảo văn bản của tôi, bằng cách thêm dòng sau vào mã nguồn python của tôi:

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

Sự cố:
Tuy nhiên, không có tùy chọn để chọn UTF-8 làm phông chữ trong lớp Font pyExcelerator. Các tùy chọn duy nhất là:

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 

Có bất kỳ bộ ký tự nào có ký hiệu ít hơn hoặc bằng hoặc lớn hơn hoặc bằng nhau không? Nếu vậy, mà trên?
Tên mã hóa python nào tương ứng với các tập hợp này? Có cách nào khác để tạo các ký tự đặc biệt này không?

Trả lời

4

Bạn có thể đang gặp sự cố. Phông chữ không nên phát trong vấn đề, mặc dù mã hóa ký tự có thể.

Trong mọi trường hợp, tôi đã có thể sử dụng xlwt để tạo ra một bảng tính có dấu hiệu ít hơn bình đẳng và lớn hơn bình đẳng với các kịch bản sau 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') 

Lưu ý rằng - - mã hóa : utf-8 - - không bắt buộc vì các ký tự đặc biệt được mã hóa với chỉ số số unicode của chúng. Nói chung, tôi khuyên bạn nên sử dụng unicode nếu có thể.

Cũng có thể sử dụng utf-8 và nhập các ký tự trực tiếp vào mã Python. Đây sẽ là giống hệt nhau ngoại trừ cách các nhân vật được nhập:

#-*- 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') 

Lưu ý, tuy nhiên, bạn phải sử dụng một trình soạn thảo là biết mà bạn đang tiết kiệm mã Python như UTF-8. Nếu trình soạn thảo của bạn mã hóa tệp theo bất kỳ cách nào khác, các ký tự đặc biệt sẽ không được phân tích cú pháp đúng khi được trình thông dịch Python tải.

+0

cảm ơn, đã làm việc ra – SimonSalman

1

(1) Re: "" " Tôi có thể lưu bảng dưới dạng tệp csv với mã hóa UTF-8, để tôi có thể xem các ký tự đặc biệt trong trình soạn thảo của mình bằng cách thêm dòng sau vào nguồn python của tôi mã:

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

có khả năng viết một tập tin với các nhân vật được mã hóa theo UTF-8 là không phụ thuộc vào những gì mã hóa được sử dụng trong nguồn của chương trình viết các tập tin !

(2) UTF-8 là mã hóa, không phải là phông chữ. Những bộ ký tự trong một bản ghi FONT Excel là một vụ nổ từ AFAIK trong quá khứ. Tôi đã không nghe từ bất kỳ người dùng xlwt nào từng nghĩ rằng nó cần thiết để sử dụng khác với mặc định cho bộ ký tự. Chỉ cần nạp các đối tượng unicode vào xlwt như được Jason trình bày ... nếu bạn có một phông chữ thích hợp trên hệ thống của bạn (xem bạn có thể hiển thị các ký tự trong OpenOffice Calc) không, bạn nên OK.

(3) Bất kỳ lý do cụ thể nào khi sử dụng pyExcelerator thay vì xlwt?

+0

đến (3): Tôi vừa tìm thấy pyExcelerator trước và cài đặt nó. Bạn có nên giới thiệu xlwt, thay vào đó? – SimonSalman

+3

@SimonSalman: Tất nhiên :-) ... Tiết lộ: Tôi là người duy trì 'xlwt'. –

5

Điều này sẽ giúp với văn bản UTF-8 chars sử dụng pyexcelerator hoặc xlwt:

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

chỉnh sửa:

Có vẻ nó không làm việc cho pyexcelerator, nhưng tôi havent đã khẳng định điều đó.

+0

@yoshi: Nó sẽ không giúp gì nhiều với pyExcelerator - nó có mã hóa mặc định HARD-CODED (cp1251). xlwt có chức năng mã hóa mặc định của người gọi được thêm vào trong tháng 2 năm 2007. pyExcelerator không được duy trì. Câu hỏi: nhân vật UTF-8 là gì? –

+0

@ John Machin: Theo ký tự UTF-8, tôi có nghĩa là ký tự được mã hóa bằng UTF-8 chứ không phải ASCII. Tôi đã có một cái gì đó sai? – yoshi

Các vấn đề liên quan