Python 使用COM实现Excel词典
我想将字典的结果转储到Excel文件中 我的代码:Python 使用COM实现Excel词典,python,python-2.7,dictionary,com,Python,Python 2.7,Dictionary,Com,我想将字典的结果转储到Excel文件中 我的代码: import datetime my_dict = { u'ID1': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)}, u'ID2': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime
import datetime
my_dict = {
u'ID1': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)},
u'ID2': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)},
u'ID3': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)},
u'ID4': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)}
}
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets('Sheet1')
'add in the projects'
ws.Range(ws.Cells(1,1),ws.Cells(len(my_dict),3)).Value = my_dict
错误:
TypeError: Objects of type 'dict' can not be converted to a COM VARIANT
我的期望输出:
3列数据。列A是ID。B列是与每个ID关联的
Date1
的值。C列是Date2
的值。我很确定您无法为范围对象编写字典。但是,范围对象将获取列表列表。为了编写您提供的词典,您必须将其重组为元组或列表
import win32com.client
import datetime
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
my_dict = {
u'ID1': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)},
u'ID2': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)},
u'ID3': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)},
u'ID4': {'Date1': datetime.datetime(2014, 11, 14, 0, 0), 'Date2': datetime.datetime(2015, 3, 18, 0, 0)}
}
wb = xl.Workbooks.Add()
ws = wb.Worksheets('Sheet1')
idKeys = my_dict.keys()
idKeys.sort()
rowCnt = 1
for idKey in idKeys:
dateKeys = my_dict[idKey].keys()
dateKeys.sort()
row = [idKey]
for dateKey in dateKeys:
row.append(my_dict[idKey][dateKey])
rangeObj = ws.Range(ws.Cells(rowCnt,1), ws.Cells(rowCnt, len(row)))
rangeObj.Value = row
print 'row:', row
rowCnt += 1
以上是我快速而肮脏的方法来实现这一点。但是,将数据结构化为列表列表将使此任务更容易。您不使用“xlutils”()有什么原因吗?