Python 3.5 使用openpyxl写numpy

Python 3.5 write numpy using openpyxl

我一直在研究 Hilpisch 的 "Python for Finance",直到我读到有关写信给 Excel 的章节时才遇到很多麻烦。我是 运行 Python 3.5 并使用 OpenPyxl 模块

import openpyxl as oxl
import numpy as np 
wb = oxl.Workbook()
ws = wb.create_sheet(index = 0, title = 'oxl_sheet')
data = np.arange(1, 65).reshape((8, 8))
for c in range(1, data.shape[0]):
    for r in range(1, data.shape[1]):
        ws.cell(row=r, column=c, value=data[c, r])

这个returns:ValueError: Cannot convert 10 to Excel

使用 numpy 有问题吗?比如下面的代码returns类似的错误。

ws.cell(row=1, column=1, value=data[0,0])

但是用整数或浮点数替换 data[0, 0] 没有问题。

似乎应该有一个简单的解决方法。

openpyxl 仅适用于 "known" 类型(int、字符串等),它知道如何将其转换为 Excel 数据类型。不幸的是 data[0, 0] 不是已知类型:

➜ python 
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> data = np.arange(1, 65).reshape((8, 8))
>>> type(data[0, 1])
<type 'numpy.int64'>

您必须将 numpy.int64 转换为 int 类型:

>>> for c in range(1, data.shape[0]):
...     for r in range(1, data.shape[1]):
...         ws.cell(row = r, column = c).value = data[c, r].astype(int)

已将对 numpy 类型的支持添加到 openpyxl 2.4,您可以使用 pip install -U --pre openpyxl.

安装它