如何使用 .find() 来定位一个单元格并在循环中开始更新下面行中的单元格?

fen*_*ers 6 python google-sheets gspread

我正在使用从 CSV 中获取的数据自动填写 Google 表格。对于自动化,我希望能够用于.find()定位特定的单元格值,该值用作从何处开始更新单元格的参考。为了更好地解释:

在此处输入图片说明

我的代码用于.find('Cafe Crepe')定位属于“Cafe Crepe”餐厅的行和列。在表格中,有多个餐厅的订单、小计等具有相同的格式。

def matchAndWriteFinalCSV(self, sheet, restaurant):
        '''
        Match orders from Ecwid csv to restaurant in Delivery csv
        Write to Final csv
        '''
        print("WRITE START")
        cell = sheet.find(f"{restaurant}")
        filtered_list = [] 
        print("WRITE SHEET")
        print(f"ROW {cell.row} COL {cell.col} CELL {cell}")
        sheet.update('R5', "TEST")
Run Code Online (Sandbox Code Playgroud)

更新

为了说明结果应该是什么:

在此处输入图片说明

我决定去创建一个订单字典列表(订单号、小计、tx 等)。使用for循环,我按餐厅划分编写/更新谷歌表的任务。在此问题的示例中:我的代码获取属于“Cafe Crepe”的所有订单,并开始写入/更新订单编号、小计、税金等字段。

for restaurant_name, restaurant_orders in orders_per_restaurant.items():
            new_row = 5
            for order in restaurant_orders:
                print(order)
                restaurant = restaurant_name
                cell = sheet.find(f"{restaurant}") 
                print(f"ROW {cell.row} COL {cell.col} CELL {cell}") 
                subtotal = cell.col + 1 
                tax = cell.col + 2
                new_cellrow = cell.row + new_row
                write_cell_start = f"R{str(new_cellrow)}C{str(cell.col)}"
                write_subtotal = f"R{str(new_cellrow)}C{str(subtotal)}"
                sheet.update(write_cell_start, order['order'])
                sheet.update(write_subtotal, order['sub-total'])
                new_row += 1
            new_row =  5
            time.sleep(100)
Run Code Online (Sandbox Code Playgroud)

这有效,但现在我无法让这段代码在没有得到"Quota exceeded for quota metric 'Write requests' and limit 'Write requests per minute per user' of service 'sheets.googleapis.com'. 我试图了解如何使用batch_update(). 我怎样才能解决在我的代码中超过每分钟请求率的问题?

小智 0

这应该引导您去往您想去的地方:

iRow = Sheet.cells.find("searchString").Row
iCol = Sheet.cells.find("searchString").Column

newCell = Sheet.cells(iRow,iCol).offset(iiRow, iiCol)
Run Code Online (Sandbox Code Playgroud)

iiRow 和 iiCol 可以是您在使用 iRow、iCol 作为基线参考点的新循环中定义的迭代器。