в <string>'требуется строка как левый операнд, а не как кортеж - PullRequest
0 голосов
/ 16 октября 2019

У меня есть Excel шаблон , в котором есть несколько листов с США. (MTHLY-CA...etc)

enter image description here

У меня также есть dataframe , в котором есть столбцы StateID и premiumtest

enter image description here

Идея состоит в том, чтобы просмотреть имена рабочих таблиц и сравнить их со столбцом StateIDв кадре данных. И если состояния совпадают, тогда напишите premiumtest значение в определенную ячейку в шаблоне.

import openpyxl
# getting workbook
wb = openpyxl.load_workbook(r'\server\user\Python\Template.xlsx')
# looping through worksheets
for sheet in wb.worksheets:
     sheetnames = sheet
     print(sheetnames)


for index, row in df.iterrows():
    if any(x in 'MTHLY-'+ row[0] for x in sheetnames): #[0]is the index for column StateID            
    # Then write premiumtest into cell 1

Но я получил ошибку:

Traceback (most recent call last):

    if any(x in 'MTHLY-'+ row[0] for x in sheetnames):  #
  File "x:\Documents\Python\Treaty Year Report\TreatyYearReport3 - Copy.py", line 68, in <genexpr>
    if any(x in 'MTHLY-'+ row[0] for x in sheetnames):  # 
TypeError: 'in <string>' requires string as left operand, not tuple

print (sheetnames):.

sheetnames

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Вы сравниваете один объект рабочего листа со строкой. Это проблема. В приведенном ниже коде вы просматриваете каждый лист, а затем перезаписываете переменную sheetnames.

for sheet in wb.worksheets:
   sheetnames = sheet
   print(sheetnames)

Вы ищете список worksheet.title, так что еще что-то вроде этого:

sheetnames = [sheet.title for sheet in wb.worksheets]
2 голосов
/ 16 октября 2019

для правильной работы вашего кода

any(x in 'MTHLY-'+ row[0] for x in sheetnames)

вы можете получить имена листов как

sheetnames = [sheet.title for sheet in wb.worksheets]

, которые в основном заменят ваш текущий цикл

for sheet in wb.worksheets:
     sheetnames = sheet
     print(sheetnames)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...