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