2013-01-04 90 views
6

Tôi đang sử dụng xlrd, xlwt và xlutils trên hệ điều hành Windows Vista với Python 2.7. Tôi có một tập hợp các chuỗi DNA trong một bảng tính excel dài 100 ký tự, với mỗi chuỗi trong một ô đơn lẻ. Tôi đang cố gắng để làm nổi bật các nhân vật ở các vị trí cụ thể trong mỗi chuỗi trong excel (in đậm hoặc thay đổi màu sắc), nhưng đã không tìm thấy một cách để định dạng các ký tự riêng lẻ trong một ô. Áp dụng một phong cách áp dụng nó cho toàn bộ ô theo kiến ​​thức của tôi. Do đó tôi đang cố gắng phân tích chuỗi thành các thành phần riêng lẻ trong đó một số phần của chuỗi sẽ được sửa đổi theo kiểu trong khi những phần khác sẽ không, và sau đó đối chiếu chúng lại với nhau thành một chuỗi trong một ô duy nhất.Định dạng các ký tự riêng lẻ trong một ô Excel đơn với python

Code:

 

    rb = open_workbook('Mybook', formatting_info=True) 
    rs = rb.sheet_by_index(0) 
    wb = copy(rb) 
    ws = wb.get_sheet(0) 

    minus35style = xlwt.easyxf('font: bold 1') # style I'd like for just one character 
    for b in range(0, 368, 1): 
     rscellin = rs.cell(b,9) 
     f = rscellin.value 
     tominus35 = str(f[0:34]) 
     minus35 = str(f[35:36]) 
     ws.write(b, 14, tominus35) 
     ws.write(b, 14, minus35, minus35style) 
    wb.save('Mybook') 

Vấn đề của tôi là thêm một phong cách thay đổi toàn bộ tế bào, và tôi muốn nhân vật chỉ nhất định phải được sửa đổi. Ngoài ra, việc viết tiếp theo cho cùng một ô sẽ ghi đè những gì đã có trước đó. Có cách nào để sửa đổi các ký tự riêng lẻ trong một ô đơn lẻ hay để thêm văn bản được định dạng khác vào một ô hiện có đã có văn bản trong đó không?

Vui lòng cho tôi biết nếu bạn cần thêm thông tin mà tôi đã bỏ qua. Tôi đánh giá cao thời gian của bạn trước.

Brett

Trả lời

9

Phiên bản gần đây của xlwt bao gồm khả năng sử dụng Rich Text trong một ô. Thông thường, bạn sẽ sử dụng số ws.write, thay vào đó hãy sử dụng ws.write_rich_text. Hai tham số đầu tiên là chỉ mục hàng và chỉ mục cột, như thường lệ; nhưng tham số tiếp theo là một chuỗi các thành phần. Mỗi thành phần có thể là một giá trị văn bản "khỏa thân" hoặc một cặp (văn bản, phông chữ). Các giá trị văn bản khỏa thân sẽ sử dụng phông chữ từ kiểu tổng thể của ô, có thể được chỉ định bằng tham số thứ tư tùy chọn.

Đối với cặp (văn bản, phông chữ), cách đơn giản nhất là tạo phông chữ bằng cách sử dụng tính năng easyfont mới, tương tự như easyxf nhưng chỉ dành cho phông chữ. Dưới đây là ví dụ:

import xlwt 

wb = xlwt.Workbook() 
ws = wb.add_sheet('Sheet1') 

font0 = xlwt.easyfont('') 
font1 = xlwt.easyfont('bold true') 
font2 = xlwt.easyfont('color_index red') 
style = xlwt.easyxf('font: color_index blue') 

seg1 = ('bold', font1) 
seg2 = ('red', font2) 
seg3 = ('plain', font0) 
seg4 = ('boldagain', font1) 

ws.write_rich_text(2, 5, (seg1, seg2, seg3, seg4)) 
ws.write_rich_text(4, 1, ('xyz', seg2, seg3, '123'), style) 

wb.save('rich_text.xls') 

Bạn sẽ có thể điều chỉnh các mục đích trên cho mục đích của mình. Lưu ý rằng bạn vẫn phải viết hoặc ghi đè lên toàn bộ ô cùng một lúc; bạn không thể quay lại và chỉ cập nhật một phần của ô sau.

+0

John Y, đây chính xác là những gì tôi đang tìm kiếm. Thực hiện nó và nó hoạt động như một sự quyến rũ. Cảm ơn sự thông cảm của bạn. Chúc mừng! –

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