【问题标题】:Python to Excel Gets Data in bulksPython to Excel 批量获取数据
【发布时间】:2015-03-01 19:34:54
【问题描述】:

我有一个从网站获取数据并应该粘贴到 Excel 工作表的代码。到目前为止一切都很好,除了excel部分。数据大量出现,我不明白为什么。通常应该是这样的;

Name1
Date1 Date2 Date3 Date4 
Data1 Data2 Data3 Data4

Name2
Date1 Date2 Date3 Date4 
Data1 Data2 Data3 Data4

Name3
Date1 Date2 Date3 Date4 ....
Data1 Data2 Data3 Data4 ... 

但我得到了相同的数据 - name1 用于 A1:EO434 的范围,然后它再次更新 Name2 和 Name3 的所有单元格,依此类推。所以当循环结束时,我只看到最后一个数据复制到 A1:EO434 的 excel 范围

在这里;

.... ... ... .... .. ... .. ...
     data_district = json.loads(r_district.text)
     data_district = map(dict.values, data_district[u'output'][u'resultset'][u'record'][u'data'])
     i = 0
     for row in data_district:

         Range("A"+ str(i + 1) ).value = zip(*data_district) #Not OK.
         i = i+3

PS:这是完整的代码;

from xlwings import Workbook, Sheet, Range, Chart
import requests
import json

payload_city = {'cityId':3969, 'cmd':'districts'}
url = "https://www.garantimortgage.com/apps/Socket/Webservice.ashx"
r_city = requests.post(url, data=payload_city)


data_city = json.loads(r_city.text) #json to python data structure conversion
wb = Workbook()
mydict = data_city[:] #translation in to dictionary
for i in list(range(len(mydict))):
 print  data_city[i]["DistrictName"]
 payload_district = {'cityId':data_city[i]["CityId"], 'lbDistricts':data_city[i]["DistrictCode"], 'criter':149,'startdate':'2003-01','cmd':'result','areaCode':data_city[i]["AreaWideCode"]}

 r_district = requests.post(url, data=payload_district)

 data_district = json.loads(r_district.text)
 data_district = map(dict.values, data_district[u'output'][u'resultset'][u'record'][u'data'])
 i = 0
 for row in data_district:

     Range("A"+ str(i + 1) ).value = zip(*data_district)
     i = i+3

【问题讨论】:

  • 可能值得将 csv 模块视为替代方案
  • 查看基本的 Python 教程。例如。 mydict 是字典列表,而不是字典。循环遍历列表很简单 for i in mylist: 不需要您对 listrangelen 执行任何操作。对于xlwings,请查看:docs.xlwings.org/datastructures.html - 不需要循环。
  • 感谢您的建议。@thefragileomen,@FelixZumstein。但是,我使用循环的原因是数据的结构。所以,我有城市,在城市下我有区,每个区都有自己的数据。这就是为什么我认为我必须运行循环

标签: python vba excel


【解决方案1】:

好的,我找到了答案,以防有人需要,我在这里发布; 当我取出第二个循环时,它可以正常工作;

j = 0
.......
.......
......
for loop 
....
...

 Range("A" + str(j + 1)).value = zip(*data_district)
 j=j+4

【讨论】:

  • 使用 xlwings 循环遍历单元格非常慢。首先将列表与您的循环放在一起,然后将其发送到 Excel。另请查看索引符号 Range((i,j))。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多