Вложенный цикл Python для создания листов Excel

Я работаю над созданием листов excel с использованием python. Я пытаюсь использовать вложенный цикл for для заполнения некоторых ячеек в электронной таблице, и это не очень хорошо. Я хочу, чтобы он для каждой строки в заданном списке строк вводил в ячейку четное число. Так что в основном это должно выглядеть примерно так: 2 4 6 8 и т. д. (одно значение на ячейку)

но вместо этого получается: 24 24 24 24

Все ячейки имеют одинаковое значение.

Помимо очевидных проблем с форматированием (я еще не закончил с форматированием), он печатает последнее число во вложенном цикле для каждой отдельной ячейки. Судя по моему тестированию, он полностью выполняет внутренний цикл для каждой ячейки. Я использую XlsWriter, если это помогает. Я не уверен, как заставить его остановиться. Я предполагаю, что это довольно очевидно, но я не занимался никаким «программированием» годами, поэтому решение ускользает от меня. Вот рассматриваемая петля:

for items in purple_rows:
     riser_cable.write(items,0,'Company Name',format8)
     riser_cable.write(items,1,None,format8)
     riser_cable.write(items,2,None,format8)
     riser_cable.write(items,3,'Riser',format8)
     for i in range(2,26,2):
         riser_cable.write(items,4,i,format8)
         print(i)

Последние 3 строки вызывают проблемы. Спасибо за помощь!

Изменить: лист должен выглядеть так: http://imgur.com/odSaT2D, но код в настоящее время превращает весь " Порт" на 24.


person peaches    schedule 13.04.2015    source источник


Ответы (3)


Ваша линия:

for i in range(2,26,2):
         riser_cable.write(items,4,i,format8)

Записывает все числа в одну ячейку. Таким образом, вы видите только последнее число, 24. Это связано с тем, что переменная элемента не увеличивается. Пытаться

for i,items in enumerate(purple_rows):
    riser_cable.write(items,4,(i*2) % 25,format8).  

Это должно увеличить элемент и поместить другое значение в каждую строку.

person Gadi    schedule 13.04.2015
comment
Типа помогло. Я должен был упомянуть, что Purple_rows = [5,7,9,11,13,15,17,19,21,23,25,27,33,35,37,39,41,43,45,47,49, 51,53,55,61,63,65,67,69,71,73,75,77,79,81,83,89,91,93,95,97,99,101,103,105,107,109,111], но мне нужно только число до 24, а затем повторить. - person peaches; 13.04.2015

соглашение о циклах в python является эксклюзивным, поэтому оно зацикливается от 2 до 26, не включая 26

в остальном ваша петля в порядке

riser_cable.write(items,4,i,format8)

кажется, вы просто обновляете 4-й столбец с помощью 2,4,...,24. Вам также придется увеличить индекс столбца

Попробуй это

 for i in range(1,13):
     riser_cable.write(items,3+i,i*2,format8)
     print(i) 
person Symba    schedule 13.04.2015
comment
Это имеет ту же проблему. Я хочу, чтобы он перешел к следующему ряду. Так что в идеале все результаты должны быть в одной ячейке, но увеличены на 2. У меня было бы 2 [пустая строка] 4 [пустая строка] 6 [пустая строка] до 24. Я попробовал ваше предложение, и он все еще просто печатает 24 для каждой клетки. - person peaches; 13.04.2015

Я понял проблему. Я закончил тем, что изменил код, чтобы включить счетчик, так что это:

count=0    
for items in purple_rows:
         count+=2
         riser_cable.write(items,4,count,format8)
         riser_cable.write(items,10,count,format8)
         if count==24:
             count=0

Спасибо всем! Это решило проблему

person peaches    schedule 14.04.2015