【问题标题】:Openpyxl datetime Error When Saving Workbook保存工作簿时出现 Openpyxl 日期时间错误
【发布时间】:2014-10-18 00:46:11
【问题描述】:

我正在尝试使用 openpyxl 模块写入 *.xlsx 文件。我已经在 Ubuntu 14.04 上使用 pip install 下载了它。

我正在加载一个 *.xlsx 文件,该文件是我使用的以前在 Excel 中制作的物料清单模板,我可以在 Libre Office 和金山 Office 中正常打开它。我的意图是加载它并用一些字符串填充一些单元格。

我的函数如下所示:

def writeBOM(parts, projectname):
    '''
    Take the ordered and grouped part info and
    write it to a standard BOM and save it
    '''
    StandardBOMFILE = '/home/jesse/Digi-Parser/SampleFiles/StandardBOM.xlsx'

    wb = load_workbook(filename=StandardBOMFILE)
    sheet = wb.get_sheet_by_name('BOM')

    r = 8
    # Fill BOM
    for i, part in enumerate(parts):
       sheet.cell(row = r+i,column = 1).value = part.designator
       sheet.cell(row = r+i,column = 2).value = part.evalue + ' ' + part.package
       sheet.cell(row = r+i, column = 3).value = part.qty
    projectBOMname = projectname + 'BOM' + '.xlsx'
    wb.save(projectBOMname)

我放入单元格的值只是字符串。

但是当我运行它时,我得到以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
    202             else:
    203                 filename = fname
--> 204             __builtin__.execfile(filename, *where)

/home/jesse/Digi-Parser/SheetOrganizer.py in <module>()
    232         prjpath = '/home/jesse/Digi-Parser/SampleFiles/'
    233         prjname = 'Water Use Monitor'
--> 234         things = csvToBOM(prjpath, prjname)

/home/jesse/Digi-Parser/SheetOrganizer.py in csvToBOM(projectpath, projectname)
    223         orderedBody = combineSameComponents(reorderParts(body))
    224 
--> 225         writeBOM(orderedBody, projectname)
    226 
    227 

/home/jesse/Digi-Parser/SheetOrganizer.py in writeBOM(parts, projectname)
    192        sheet.cell(row = r+i, column = 3).value = part.qty
    193     projectBOMname = projectname + 'BOM' + '.xlsx'
--> 194     wb.save(projectBOMname)
    195 
    196 

/usr/local/lib/python2.7/dist-packages/openpyxl/workbook/workbook.pyc in save(self, filename)
    265             save_dump(self, filename)
    266         else:
--> 267             save_workbook(self, filename)

/usr/local/lib/python2.7/dist-packages/openpyxl/writer/excel.pyc in save_workbook(workbook, filename)
    183     """
    184     writer = ExcelWriter(workbook)
--> 185     writer.save(filename)
    186     return True
    187 

/usr/local/lib/python2.7/dist-packages/openpyxl/writer/excel.pyc in save(self, filename)
    166         """Write data into the archive."""
    167         archive = ZipFile(filename, 'w', ZIP_DEFLATED)
--> 168         self.write_data(archive)
    169         archive.close()
    170 

/usr/local/lib/python2.7/dist-packages/openpyxl/writer/excel.pyc in write_data(self, archive)
     78         archive.writestr(ARC_WORKBOOK_RELS, write_workbook_rels(self.workbook))
     79         archive.writestr(ARC_APP, write_properties_app(self.workbook))
---> 80         archive.writestr(ARC_CORE, write_properties_core(self.workbook.properties))
     81         if self.workbook.loaded_theme:
     82             archive.writestr(ARC_THEME, self.workbook.loaded_theme)

/usr/local/lib/python2.7/dist-packages/openpyxl/writer/workbook.pyc in write_properties_core(properties)
     65     SubElement(root, '{%s}created' % DCTERMS_NS,
     66                {'{%s}type' % XSI_NS: '%s:W3CDTF' % DCTERMS_PREFIX}).text = \
---> 67                    datetime_to_W3CDTF(properties.created)
     68     SubElement(root, '{%s}modified' % DCTERMS_NS,
     69                {'{%s}type' % XSI_NS: '%s:W3CDTF' % DCTERMS_PREFIX}).text = \

/usr/local/lib/python2.7/dist-packages/openpyxl/date_time.pyc in datetime_to_W3CDTF(dt)
     54 def datetime_to_W3CDTF(dt):
     55     """Convert from a datetime to a timestamp string."""
---> 56     return datetime.datetime.strftime(dt, W3CDTF_FORMAT)
     57 
     58 

ValueError: year=1899 is before 1900; the datetime strftime() methods require year >= 1900

我不知道如何解决这个问题。我不需要在我的计算机上安装 Excel 吗?似乎问题出在 openpyxl 包中的 date_time.py 文件中,并且由于某种原因变量“dt”设置为 1899。

感谢您的帮助。

【问题讨论】:

    标签: python-2.7 ubuntu-14.04 openpyxl


    【解决方案1】:

    正如邮件列表中所讨论的,这看起来像是 Python 日期时间库中的一个错误。 https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

    Python 3.3 或 3.4 没有问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多