当前位置: 首页 > 知识库问答 >
问题:

无法使用openpyxl保存excel文件

濮丁雷
2023-03-14

我在openpyxl中保存Excel文件时遇到问题。我正在尝试创建一个处理脚本,该脚本将从一个excel文件中获取数据,并将其转储到一个转储excel文件中,在excel中使用公式进行一些调整后,我将在转储excel文件中保存所有处理过的数据。我目前的代码也是如此。

from openpyxl import load_workbook
import os
import datetime
from openpyxl.cell import get_column_letter, Cell, column_index_from_string, coordinate_from_string

dump = dumplocation
desktop = desktoplocation
date = datetime.datetime.now().strftime("%Y-%m-%d")


excel = load_workbook(dump+date+ ".xlsx", use_iterators = True)

sheet = excel.get_sheet_by_name("Sheet1")

try:
    query = raw_input('How many rows of data is there?\n')
except ValueError:
    print 'Not a number'

#sheetname = raw_input('What is the name of the worksheet in the data?\n')
for filename in os.listdir(desktop):
    if filename.endswith(".xlsx"):
        print filename

        data = load_workbook(filename, use_iterators = True)
        ws = data.get_sheet_by_name(name = '17270115')

    #copying data from excel to data excel
        n=16
        for row in sheet.iter_rows():
            for cell in row:
                for rows in ws.iter_rows():
                    for cells in row:
                        n+=1
                        if (n>=17) and (n<=32):
                            cell.internal_value = cells.internal_value


    #adding column between time in UTC and the data
        column_index = 1
        new_cells = {}
        sheet.column_dimensions = {}
        for coordinate, cell in sheet._cells.iteritems():
            column_letter, row = coordinate_from_string(coordinate)
            column = column_index_from_string(column_letter)

    # shifting columns
            if column >= column_index:
                column += 1

            column_letter = get_column_letter(column)
            coordinate = '%s%s' % (column_letter, row)

    # it's important to create new Cell object
            new_cells[coordinate] = Cell(sheet, column_letter, row, cell.value)

        sheet.cells = new_cells
    #setting columns to be hidden
        for coordinate, cell in sheet._cells.iteritems():
            column_letter, row = coordinate_from_string(coordinate)
            column = column_index_from_string(column_letter)

            if (column<=3) and (column>=18):
               column.set_column(column, options={'hidden': True})

自从两三周前我刚开始使用Python以来,我知道我的很多代码都很混乱。我还有几个悬而未决的问题,我可以在以后处理。似乎没有很多人为了我的目的而使用openpyxl。我尝试使用普通工作簿模块,但似乎不起作用,因为您无法在单元格项中迭代。(需要将相关数据从一个excel文件复制粘贴到另一个excel文件)

更新:我意识到openpyxl只能创建工作簿,但不能编辑当前的工作簿。因此,我决定在将数据传输到新工作簿后,更改曲调并编辑新工作簿。我导致使用“返回工作簿”传输数据:

from openpyxl import Workbook
from openpyxl import worksheet
from openpyxl import load_workbook
import os
from openpyxl.cell import get_column_letter, Cell, column_index_from_string, coordinate_from_string

dump = "c:/users/y.lai/desktop/data/201501.xlsx"
desktop = "c:/users/y.lai/desktop/"



excel = Workbook()

sheet = excel.add_sheet

try:
    query = raw_input('How many rows of data is there?\n')
except ValueError:
    print 'Not a number'

#sheetname = raw_input('What is the name of the worksheet in the data?\n')
for filename in os.listdir(desktop):
    if filename.endswith(".xlsx"):
        print filename

        data = load_workbook(filename, use_iterators = True)
        ws = data.get_sheet_by_name(name = '17270115')

    #copying data from excel to data excel
        n=16
        q=0
        for x in range(6,int(query)):
            for s in range(65,90):   
                for cell in Cell(sheet,chr(s),x):
                    for rows in ws.iter_rows():
                        for cells in rows:
                            q+=1
                            if q>=5:
                                n+=1
                                if (n>=17) and (n<=32):
                                    cell.value = cells.internal_value

但这似乎还是行不通

    Traceback (most recent call last):
      File "xxx\Desktop\xlspostprocessing.py", line 40, in <module>
    for cell in Cell(sheet,chr(s),x):
      File "xxx\AppData\Local\Continuum\Anaconda\lib\site-packages\openpyxl\cell.py", line 181, in __init__
    self._shared_date = SharedDate(base_date=worksheet.parent.excel_base_date)
    AttributeError: 'function' object has no attribute 'parent'

通过了API,但是。。我被里面的代码弄得不知所措,所以我无法理解API。在我看来,我似乎错误地使用了电池模块。我阅读了单元格的定义及其属性,因此chr(s)给出了26个字母A-Z。

共有2个答案

狄彬彬
2023-03-14

你可以尝试使用xlrd和xlwt来代替pyopenxl,但是你可能会发现你想要做的事情已经在xlutil中可用了——所有这些都来自python-excel。

周玺
2023-03-14

您可以使用标准工作簿模式进行迭代use_iterators=True已重命名为read_only=True,以强调此模式的用途(按需读取零件)。

当前的代码无法使用此方法,因为工作簿是只读的,单元格。内部值始终是只读属性。

然而,看起来你还没有走那么远,因为你的Excel文件有问题。您可能想要提交带有其中一个文件的错误。此外,邮件列表可能是一个更好的讨论场所。

 类似资料:
  • 我正在尝试读取多个excel文件,并将每个文件中的数据附加到一个主文件中。每个文件都有相同的标题(因此我可以跳过导入初始文件后的第一行)。 我对Python和OpenPyXL模块都很陌生。我可以毫无问题地导入第一个工作簿。当我需要打开后续文件并复制数据以粘贴到原始工作表中时,我的问题就出现了。 到目前为止,这是我的代码: 谢谢!

  • 在我们公司,我们使用Spring Core(4.0.4),JDBCTemplate和Postgres 9.3。 当我尝试这个例子时: 我对大文件有一些问题( 在Postgres上,我创建了表: 我有我的测试,使用上述方法调用存储库。对于小文件,代码有效(使用 pgAdmin 客户端,我可以连接并看到两条记录)。 当我尝试加载大文件(超过 200 MB )时,我可以保存文件(实现没有给我错误)。但是

  • 本文向大家介绍Python3利用openpyxl读写Excel文件的方法实例,包括了Python3利用openpyxl读写Excel文件的方法实例的使用技巧和注意事项,需要的朋友参考一下 前言 Python中常用的操作Excel的三方包有xlrd,xlwt和openpyxl等,xlrd支持读取.xls和.xlsx格式的Excel文件,只支持读取,不支持写入。xlwt只支持写入.xls格式的文件,不

  • 本文向大家介绍python使用openpyxl操作excel的方法步骤,包括了python使用openpyxl操作excel的方法步骤的使用技巧和注意事项,需要的朋友参考一下 一 前言 知识追寻者又要放大招了,学完这篇openpyxl第三方库,读者将会懂得如何灵活的读取excel数据,如何创建excel工作表;更新工作表,删除工作表;是不是感觉很强大,留下赞赞吧!! 二 openpyxl常用属性函

  • 本文向大家介绍python通过openpyxl生成Excel文件的方法,包括了python通过openpyxl生成Excel文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python通过openpyxl生成Excel文件的方法。分享给大家供大家参考。具体如下: 使用前请先安装openpyxl: 通过这个模块可以很方便的导出数据到Excel 希望本文所述对大家的Python程序设

  • 本文向大家介绍Python使用OpenPyXL处理Excel表格,包括了Python使用OpenPyXL处理Excel表格的使用技巧和注意事项,需要的朋友参考一下 官方文档: http://openpyxl.readthedocs.io/en/default/ OpenPyXL库 --单元格样式设置 单元格样式的控制,依赖openpyxl.style包,其中定义有样式需要的对象,引入样式相关: f