xlsxwriter и xlwt: запись списка строк в ячейку

в настоящее время я использую xlwt довольно успешно для создания .xls-файл. Я также изучаю xlsxwriter для возможных будущих приложений, где мне понадобятся некоторые из его функций.

xlwt плавно записывает списки строк в ячейки.

например

import xlwt
a = ['Januaryn','Februaryn','Marchn','Apriln','Mayn','Junen']
book = xlwt.Workbook()
sheet = book.add_sheet('Test')
sheet.write(0,0,a)
book.save('Test.xls')

открыть проверить.xls-файл, включить перенос текста и ячейка A1 показывает:

January
February
March
April
May
June

Я пытался сделать что-то подобное с xlsxwriter

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

здесь я получаю длинное сообщение об ошибке кульминация

...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

Я пробовал другие методы записи xlsxwriter и все дают примерно аналогичные ошибки.

другие исследования: я обыскал этот сайт довольно тщательно. Я также прошел через отличный xlsxwriter PDF и проверил страницы xlsxwriter Github. До сих пор я не встречал ничего, что касается этого.

опять же, xlwt в порядке, пока я ожидаю, что нужно добавить диаграммы и спарклайны, а также создать xlsx-файлы в ближайшем будущем.

спасибо,

Старик В Клубе

3 ответов


нет, вы не можете писать list введите с помощью xlsxwrite.write().

Регистрация docs

если ни один из вышеперечисленных типов не соответствует, значение оценивается с помощью float (), чтобы узнать, соответствует ли он определенному пользователем типу float. Если это затем он записывается с помощью write_number ().

вот почему вы получаете ошибку TypeError: float() argument must be a string or a number

чтобы исправить это, попробуйте преобразовать list до string, как полагают Паулу Scardine (в комментариях):

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))

на write() метод в XlsxWriter не поддерживает списки.

вы можете писать списки, используя рабочий лист write_row() способ:

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()

П. С. Это исключение не очень полезно в данном случае и будет исправлена в следующем релизе. Вот исключение из вашего примера программы, использующей версию XlsxWriter на GitHub:

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

Я работаю над аналогичной проблемой.

удалось достичь желаемого результата, используя enumerate, чтобы получить индекс каждой строки в списке, а затем передать его как ссылку на строку и элемент данных .пиши:

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()