【问题标题】:Dictionary to Excel with COM使用 COM 将字典转换为 Excel
【发布时间】:2015-03-19 03:34:14
【问题描述】:

我想将字典的结果转储到 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(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 的值

【问题讨论】:

标签: python python-2.7 dictionary com


【解决方案1】:

我很确定您不能为范围对象编写字典。但是,范围对象将采用列表列表。为了编写您提供的字典,您必须将其重组为元组或列表

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

以上是我完成此任务的快速而肮脏的方法。不过,将您的数据构建为列表列表将使这项任务变得更加容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-19
    • 2020-04-12
    • 2023-03-30
    • 2018-05-13
    • 2019-02-06
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多