2016-01-26 5 views
0

я не могу показаться, чтобы обойти эту проблему:openpyxl - изменить последнее значение строки

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

from tkinter import * 
import datetime 
import openpyxl 
import os 


wb = openpyxl.load_workbook("TimeSheet.xlsx", use_iterators=True) 
ws1 = wb.get_sheet_by_name("TimeSheet") 



master = Tk() 

firstDate = Entry(master) 
firstDate.pack() 

firstDate.focus_set() 


def date_receiving(): 

    totalRows = 0 
    receivingDate = firstDate.get() 
    for rowNum in ws1.iter_rows("B6:B"+str(ws1.max_row)): 
     for cell in rowNum: 
      print(cell) 
     cellule = ws1.cell(row=rowNum, column=2).value 
     if cellule != "": 
      totalRows += 1 
      print(totalRows) 
     else: 
      break 

Я пробовал несколько вещей, но не могу найти последнюю пустую ячейку. Пожалуйста помоги!

Спасибо,

+0

Вы ничего не сможете изменить, если используете режим только для чтения. –

+0

@CharlieClark - способ открыть файл только для чтения? Как я могу увидеть/изменить это? Итак, с тем, что я делаю, я могу найти строку после последнего, но так или иначе не отредактирую ее? –

+0

Да. Мы изменили этот параметр с 'use_iterators' на' read_only', чтобы сделать это более понятным. –

ответ

1

Вот код, который вы должны получить номер последней пустой ячейки, как maxBlank. Дайте мне знать, как это работает для вас.

from Tkinter import * 
import datetime 
import openpyxl 
import os 


wb = openpyxl.load_workbook("TimeSheet.xlsx", use_iterators=True) 
ws1 = wb.get_sheet_by_name("TimeSheet") 



master = Tk() 

firstDate = Entry(master) 
firstDate.pack() 

firstDate.focus_set() 


def date_receiving(): 

    maxBlank = -1 
    for rowNum in ws1.iter_rows("B6:B"+str(ws1.max_row)): 
     for cell in rowNum: 
      if cell.internal_value == None: 
       if cell.row > maxBlank: 
        maxBlank = cell.row 
    print maxBlank 
+0

Спасибо за ответ. я только должен был изменить следующим образом: «maxBlank = -1 для RowNum в ws1.iter_rows ("В23: В" ул (ws1.max_row) +): для ячейки в RowNum: , если cell.value = = Нет: если cell.row> maxBlank: maxBlank = cell.row перерыв еще: продолжают перерыв» Добавить перерывы, чтобы он мог выйти из обоих циклов. Отлично работает! Спасибо! –