Исключением является вставка списка в столбец с использованием xlwt и python.

Я очень новичок в python, и я работаю над списками и записываю листы Excel, используя xlwt. Я создал 6 столбцов, используя st.write(ID,name). Мое первое сомнение заключается в том, что идентификатор записи - это идентификатор строки или столбца (означает, что запись (1, 'abc') будет записываться в первую строку или первый столбец)?

Теперь у меня есть 6 списков, и я хочу записать каждый список в один из столбцов на листе. Как это написать? Является ли st.write(colIDX,0,list1) допустимым оператором записи (будет ли он записывать list1 в столбец 0)? Если нет, то как я могу это сделать?

ОБНОВЛЕНИЕ: это код, который я сейчас использую, но он выдает исключение как Exception: invalid worksheet name u'test'

import xlwt
import os
from merge import *

workbook = xlwt.Workbook()
sheet = workbook.add_sheet('test')

sheet.write(0,0,'Column1')
sheet.write(0,1,'Column2')
sheet.write(0,2,'Column3')
sheet.write(0,3,'Column4')

lst1 = list()
lst2 = list()
lst3 =  lt3 + lt4  #lt1 lt2 lt3 lt4 are lists are from merge file
lst4 =  lt1 + lt2


pt = 'C:/Users/Desktop/tmp'
for filename in os.listdir(pt):
    lst1.append(filename)
    lst2.append('PST')

ng = 'C:/Users/Desktop/tmp2'
for filename in os.listdir(ng):
    lst1.append(filename)
    lst2.append('NG')



column_number = 0
for row_number, item in enumerate(lst1):
    sheet.write(row_number, column_number, item)

column_number = 1
for row_number, item in enumerate(lst2):
    sheet.write(row_number, column_number, item)

column_number = 2
for row_number, item in enumerate(lst3):
    sheet.write(row_number, column_number, item)

column_number = 3
for row_number, item in enumerate(lst4):
    sheet.write(row_number, column_number, item)


workbook.save('test.xls')

person user2916886    schedule 09.03.2014    source источник


Ответы (3)


В моем случае просто превысьте лимит символов, разрешенных в имени листа.

Итак, сократите строку name_string и попробуйте еще раз, это может вам помочь.

ws = wb.add_sheet(_small_course_name)

Excel имеет жесткое ограничение на имена листов в 31 символ. Ваше имя состоит из 34 символов. Это не предел xlwt. Попробуйте вручную в Excel.

Подробнее: https://groups.google.com/forum/#!msg/python-excel/QK4iJrPDSB8/D4LmyJJ7tXkJ

person GrvTyagi    schedule 16.02.2016

Прежде всего, вот реализация Worksheet.write() (источник):

def write(self, r, c, label="", style=Style.default_style):
    self.row(r).write(c, label, style)

Первый аргумент — номер строки, второй — номер столбца.

Кроме того, вот пример того, как написать список в первый столбец:

import xlwt

data = ['Hello', 'World']

workbook = xlwt.Workbook()
worksheet = workbook.add_sheet('test')

column_number = 0
for row_number, item in enumerate(data):
    worksheet.write(row_number, column_number, item)

workbook.save('test.xls')

Это создаст файл test.xls с «Hello» в ячейке A1 и «World» в ячейке A2.

Также смотрите соответствующие темы:

Надеюсь, это поможет.

person alecxe    schedule 09.03.2014
comment
когда я делаю это workbook = xlwt.Workbook() sheet = workbook.add_sheet('test'), он выдает исключение как Exception: invalid worksheet name u'test' - person user2916886; 09.03.2014
comment
@user2916886 user2916886 хм, не могли бы вы включить в вопрос весь код, который вы используете? Спасибо. - person alecxe; 09.03.2014
comment
@user2916886 user2916886 это странная ошибка. Согласно исходному коду это не должно выдать ошибку на test имени рабочего листа. - person alecxe; 09.03.2014
comment
@user2916886 user2916886 также это вещь, которая на самом деле не имеет отношения к вопросу, который вы изначально задали. - person alecxe; 09.03.2014
comment
даже я не могу понять, почему в этот момент возникает исключение. Также я изменил название темы, чтобы она соответствовала текущей проблеме. - person user2916886; 09.03.2014
comment
Еще одно сомнение, которое у меня есть, заключается в том, что предположим, что я могу успешно запустить эту программу и создать лист «тест». Теперь, если я снова запущу его с новым параметром в add_sheet, скажем, test2, он перезапишет предыдущий лист «тест» или создать еще один лист с именем test1 в том же excel? - person user2916886; 09.03.2014
comment
@user2916886 user2916886 - xlwt всегда создает новый файл, это программа записи Excel. Не могли бы вы попробовать обновить модуль xlwt? Кроме того, попробуйте использовать другие имена листов вместо test. - person alecxe; 09.03.2014

Есть еще один способ сделать это (посмотрите, поможет ли это) - сделайте это питоническим способом.

Переместите свой список, как показано ниже, а затем вставьте его в Excel как обычно.

>>> a = [['a', 'b', 'c'], ['aaaaaaaaaa', 'b', 'c'], ['a', 'bbbbbbbbbb', 'c']]
>>> list(zip(*a))
[('a', 'aaaaaaaaaa', 'a'), ('b', 'b', 'bbbbbbbbbb'), ('c', 'c', 'c')]
person anurag    schedule 31.03.2016