2014-09-17 13 views
6

Tôi hiện đang sử dụng xlwt khá thành công để tạo các tệp .xls. Tôi cũng học xlsxwriter cho các ứng dụng trong tương lai có thể, nơi tôi sẽ cần một số tính năng của nó.xlsxwriter và xlwt: Viết một danh sách các chuỗi vào một ô

xlwt thuận lợi ghi danh sách chuỗi vào ô.

ví dụ:

import xlwt 
a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 
book = xlwt.Workbook() 
sheet = book.add_sheet('Test') 
sheet.write(0,0,a) 
book.save('Test.xls') 

mở file test.xls, cho phép văn bản bọc, và ô A1 cho thấy:

January 
February 
March 
April 
May 
June 

tôi đã cố gắng để làm một cái gì đó tương tự với xlsxwriter

import xlsxwriter 
xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 
xsheet.write(0,0,a) 

Ở đây, tôi nhận được một thông báo lỗi dài dòng lên đến đỉnh điểm trong

...anaconda/lib/python2.7/site-packages/xlsxwriter/worksheet.pyc in write(self, row, col, *args) 
    416   # We haven't matched a supported type. Try float. 
    417   try: 
--> 418    f = float(token) 
    419    if not self._isnan(f) and not self._isinf(f): 
    420     return self.write_number(row, col, f, *args[1:]) 

TypeError: float() argument must be a string or a number 

Tôi đã thử các phương thức ghi xlsxwriter khác và tất cả cung cấp cho các lỗi tương tự gần như nhau.

Nghiên cứu khác: Tôi đã tìm kiếm trang web này khá kỹ lưỡng. Tôi cũng đã đi qua các xlsxwriter PDF tuyệt vời và kiểm tra các trang Xlsxwriter Github. Cho đến nay, tôi đã không đi qua bất cứ điều gì mà địa chỉ này.

Một lần nữa, xlwt là tốt cho bây giờ tôi hy vọng sẽ cần phải thêm biểu đồ và tia lửa cũng như tạo tệp xlsx trong tương lai gần.

Cảm ơn,

The Old Guy In The Club

+1

Chỉ cần sử dụng ' "" .join (a) 'thay vì' a' nếu 'isinstance (a, list) == True'. –

+0

Đây chính xác là những gì tôi cần. Tôi không thể chấp nhận câu trả lời vì không có hộp kiểm ... – OldGuyInTheClub

Trả lời

2

Không, bạn không thể viết một loại list sử dụng xlsxwrite.write().

Kiểm tra docs

Nếu không ai trong số các loại trên được kết hợp các giá trị được đánh giá với float() để xem nếu nó tương ứng với một người sử dụng định nghĩa kiểu float. Nếu nó thì nó được viết bằng write_number().

Đó là lý do tại sao bạn nhận được lỗi TypeError: float() argument must be a string or a number

Để sửa lỗi này hãy thử chuyển đổi các list đến một string, theo đề nghị của Paulo Scardine (trong các ý kiến):

import xlsxwriter 
a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 
xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 
xsheet.write(0,0,''.join(a)) 
3

Phương pháp write() trong XlsxWriter không hỗ trợ danh sách.

Bạn có thể viết danh sách sử dụng bảng tính write_row() phương pháp:

import xlsxwriter 

a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 

xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 

xsheet.write_row(0, 0, a) 

xbook.close() 

T.B. Ngoại lệ đó không hữu ích trong trường hợp này và sẽ được khắc phục trong bản phát hành tiếp theo.Dưới đây là ngoại lệ từ chương trình mẫu của bạn bằng phiên bản XlsxWriter trên GitHub:

TypeError: Unsupported type <type 'list'> in write() 
+0

Tôi đã thử nó như là một phần của các thí nghiệm ban đầu của tôi với mỗi phương thức write_. Điều này đặt mỗi phần tử của danh sách vào một ô riêng biệt (như mong đợi từ các tài liệu.) Phương thức ".join" đặt tất cả các chuỗi vào một ô, đó là điều mà tôi cần làm cho một ứng dụng hiện tại. Hy vọng hình thức không xấu của nó để thừa nhận những nỗ lực của bạn trong việc tạo ra gói này. – OldGuyInTheClub

+0

Rất tiếc, xin lỗi. Tôi nhớ rằng bạn muốn tất cả chúng trong một tế bào. Trong trường hợp đó, 'join()' được hiển thị ở trên là một lựa chọn tốt hơn. – jmcnamara

+0

Trong trường hợp này, bạn cũng có thể cần định dạng [wrap_text] (https://xlsxwriter.readthedocs.org/format.html?#format-set-text-wrap). Và không, nó không phải là hình thức xấu. :-) – jmcnamara

2

Tôi đã làm việc thông qua một vấn đề tương tự.

Đã có thể đạt được kết quả mong muốn bằng cách sử dụng liệt kê để có được những chỉ số của mỗi chuỗi trong danh sách và sau đó đi qua mà như cả hai tài liệu tham khảo Row và các mục dữ liệu để .write:

import xlsxwriter 

a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 

xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 

for idx, month in enumerate(a): 
    xsheet.write(idx,0,a[idx]) 

xbook.close() 
Các vấn đề liên quan