Как преобразовать «Число, хранящееся в виде текста» в «Число» в .xls, используя python - PullRequest
0 голосов
/ 10 ноября 2019

Я пишу код на python для анализа результатов учащегося в формате .xls. Оценки учеников отформатированы как «Числа хранятся в виде текста». «Число, сохраненное как текстовое предупреждение / ошибка» Я пытался прочитать и оценить эти отметки, используя xlrd, xlwt и т. Д., Но не смог. Используя VBS, я могу преобразовать «Числа, хранящиеся в виде текста» в «Число» с кодом ниже:

Set Rng = objWorkbook.Worksheets(resultsheetname).Range(objWorkbook.Worksheets(resultsheetname).cells(8,4),objWorkbook.Worksheets(resultsheetname).cells(RowsCount-4,25))
For Each c In Rng
With Rng
If Not IsEmpty(c) Then
    If Not c = "AB " Then 
      If Not c= "-- " Then
        If Not c= "XX " Then
            If Not c= "**" then
                       c.Value = c.Value/1
                End if
            End if
        End if
    End If 
End If
End With

Код Python, который я ожидаю работать:

for cell in sheet1.col(3):
    #cell.value = cell.value
    #worksheet.write(0, 0, datetime.datetime.now(), style)
    if cell.value == 1:
        sem1 = sem1+1
        print(cell.value)
        #print(sheet1.row_values(cell))
    elif cell.value == 2 :
        sem2 = sem2+1
    elif cell.value == 3 :
        sem3 = sem3+1
    elif cell.value == 4 :
        sem4 = sem4+1
    elif cell.value == 5 :
        sem5 = sem5+1
    elif cell.value == 6 :
        sem6 = sem6+1

1 Ответ

0 голосов
/ 10 ноября 2019

Вам нужно преобразовать тип

for cell in sheet1.col(3):
    value = int(cell.value) # <-- to convert type
    #worksheet.write(0, 0, datetime.datetime.now(), style)
    if value == 1:
        sem1 = sem1+1
        print(cell.value)
        #print(sheet1.row_values(cell))
    elif value == 2 :
        sem2 = sem2+1
    elif value == 3 :
        sem3 = sem3+1
    elif value == 4 :
        sem4 = sem4+1
    elif value == 5 :
        sem5 = sem5+1
    elif value == 6 :
        sem6 = sem6+1

Может быть, нужно использовать вхождение или список для sem и краткого выражения?

# create dictionary sem = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0}
sem = {x: 0 for x in range(1,7)}

for cell in sheet1.col(3):
  sum[int(cell.value)] += 1

Но cell.value не может быть преобразовано int (целочисленное значение), и вам необходим блок управления исключениями

# create dictionary sem = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0}
sem = {x: 0 for x in range(1,7)}

for cell in sheet1.col(3):
    try:
        sum[int(cell.value)] += 1
    except ValueError:
        print('Error value in cell {}'.format(cell.value))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...