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

标签 python google-sheets gspread

我正在使用从 CSV 中获取的数据自动填写 Google 表格。对于自动化,我希望能够使用 .find()定位特定的单元格值,该值用作从何处开始更新单元格的引用。为了更好地解释:
enter image description here
我的代码使用 .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")
更新
为了说明结果应该是什么:
enter image description here
我决定去创建一个订单字典列表(订单号、小计、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)
这有效,但现在我无法让此代码运行超过某个点而不会获得 "Quota exceeded for quota metric 'Write requests' and limit 'Write requests per minute per user' of service 'sheets.googleapis.com' .我试图了解如何使用 batch_update() 实现同样的目标.我怎样才能解决在我的代码中超过每分钟请求率的问题?

最佳答案

这应该引导你去你想去的地方:

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

newCell = Sheet.cells(iRow,iCol).offset(iiRow, iiCol)
iiRow 和 iiCol 可以是您在使用 iRow、iCol 作为其基线引用点的新循环中定义的迭代器。

关于python - 如何使用 .find() 来定位一个单元格并在循环中开始更新下面行中的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67066424/

相关文章:

python - 每第 n 次迭代串联循环列表

python - Google Sheet API - 获取数据验证

google-apps-script - 谷歌应用脚​​本优化

python - 如何使用 gspread 缓存 Google Sheets 的授权?

python - Gspread - 身份验证错误问题 - 没有 AppData 文件夹

python - 从多个 url 的 csv 列表打印 JSON 数据

python - 如何使用 pygraphviz for dot 连接记录中的 graphviz 节点?

Python/gspread - 如何一次更新具有不同值的多个单元格?

python - Pandas 更新sql

javascript - 从多个工作簿/工作表中提取范围