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 作为基线参考点的新循环中定义的迭代器。