小编cli*_*ere的帖子

如何加快API请求?

我已经构建了以下用于使用google的地方api获取电话号码的小程序,但它很慢.当我用6个项目进行测试时,它需要从4.86秒到1.99秒,我不确定为什么会发生重大变化.我对API很新,所以我甚至不确定哪些事情可以/不能加速,哪些事情留给服务于API的网络服务器以及我可以改变自己.

import requests,json,time
searchTerms = input("input places separated by comma")

start_time = time.time() #timer
searchTerms = searchTerms.split(',')
for i in searchTerms:
    r1 = requests.get('https://maps.googleapis.com/maps/api/place/textsearch/json?query='+ i +'&key=MY_KEY')
    a = r1.json()
    pid = a['results'][0]['place_id']
    r2 = requests.get('https://maps.googleapis.com/maps/api/place/details/json?placeid='+pid+'&key=MY_KEY')
    b = r2.json()
    phone = b['result']['formatted_phone_number']
    name = b['result']['name']
    website = b['result']['website']
    print(phone+' '+name+' '+website)

print("--- %s seconds ---" % (time.time() - start_time))
Run Code Online (Sandbox Code Playgroud)

python api

7
推荐指数
3
解决办法
1万
查看次数

如果用户正在删除,则检测工作表更改

我想知道如何检测用户是否要删除内容或将内容插入范围。如果他们要删除范围,请说D14:D18。然后,我想执行一个宏,该宏还将删除E14:E18中的内容。如果他们要在D14:D18中输入内容,我只是不想删除E14:E18。

我试过了:

If Selection.ClearContents Then
    MsgBox Target.Offset(0, 3).Style
End If
Run Code Online (Sandbox Code Playgroud)

但是,这让我陷入了无限循环。

更多上下文:

我有数百个单元D:D用于输入服务数量。并非D:D应该触摸所有内容。只有细胞D:D.Style = "UnitInput"。在中,E:E我进行了数据验证,该数据验证仅允许用户输入contractor 1或。contractor 2 但是,当输入内容时,D:D我运行宏以将默认承包商(位于中F:F)分配给E:E。因此,当用户在其中输入数量时,D:D可以正确分配默认承包商。当他们从中删除单个项目时,D:D我会处理承包商的适当撤离。仅当他们从中删除一系列项目时D:D

完整代码:

 Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    On Error GoTo ErrHandler:
    If Selection.Rows.Count * Selection.Columns.Count = 1 Then
        If Target.Offset(0, 3).Style = "Contractor" Then
            If Target.Value < 1 Then
                Target.Offset(0, 3).Value = ""
            Else …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

5
推荐指数
1
解决办法
3163
查看次数

检查值是否存在于范围内而不进行循环

我已经习惯了Python语法在那里检查,如果7list1你只需键入7 in list1它返回一个布尔值.我怎么能在vba中执行这样的操作?

我目前正在进行大范围的循环.我想偶尔检查一下我循环的值是否在不同的范围内.如果我不得不在循环中嵌入更多循环,这可能会慢得多.解决这个问题的最快方法是什么?

For i = 400 To 1 Step -1:
'doing other things

'here's some psuedo-code of what I want to do
If Sheets("Sheet2").Cells(i, 2).Value In Sheets("Sheet1").Range("NamedRange")
Sheets("Sheet2").Cells(i, 2).EntireRow.Delete
End If

Next i
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

excel ×2

excel-vba ×2

vba ×2

api ×1

python ×1