首页 > 解决方案 > 数据仅不适用于 python 中的 openpyxl

问题描述

我是 Python 的初学者,我正在开发一个程序,它获取 .xlsx 的一些数据并将其放入另一个 .xlsx。为此决定使用openpyxl。这是我的代码的开头:

path1 = "sourceFile.xlsx"
path2 = "targetFile.xlsx"
sheet1 = openpyxl.load_workbook(path1, data_only=True)
sheet2 = openpyxl.load_workbook(path2)

如您所见,我使用“data_only=True”仅获取源文件的数据。我的问题是,使用此解决方案,源文件的几个单元格返回“无” 。当我删除“data_only=True”参数时,返回公式,在这种情况下为“=B28”。目标文件的 B28 单元格与源文件的 B28 单元格的值不同,这不是我想要的。

我已经在寻找解决方案,但惊讶地一无所获。如果您有任何想法,欢迎您!

标签: pythonpython-3.xopenpyxl

解决方案


如果原始文件中 B28 的值与输出文件不同,则问题可能出在您用于复制单元格的代码上。当被问及如何提取单元格时,您提供了提取单个单元格值的代码。你是如何提取所有细胞的?循环?如果您共享该代码,我们可以进一步分析此问题。

我包含将值从一个文件复制到另一个文件的代码,您应该能够根据需要进行调整。

from openpyxl import load_workbook, Workbook

## VERSION 1: Output will have formulas from WB1

WB1 = load_workbook('int_column.xlsx')
WB1_WS1 = WB1['Sheet']

WB2 = Workbook()
WB2_WS1 = WB2.active # get the active sheet, so you don't need to create then delete one

# copy rows
for x, row in enumerate(WB1_WS1.rows):
    if x < 100: # only copy first 100 rows
        num_cells_in_row = len(row)
        for y in range(num_cells_in_row):
            WB2_WS1.cell(row=x + 1, column=y + 1).value = WB1_WS1.cell(row=x + 1, column=y + 1).value

WB2.save('copied.xlsx')

## VERSION 2: Output will have value displayed in cells in WB1

WB1 = load_workbook('int_column.xlsx', data_only=True)
WB1_WS1 = WB1['Sheet']

WB2 = Workbook()
WB2_WS1 = WB2.active # get the active sheet, so you don't need to create then delete one

# copy rows
for x, row in enumerate(WB1_WS1.rows):
    if x < 100: # only copy first 100 rows
        num_cells_in_row = len(row)
        for y in range(num_cells_in_row):
            WB2_WS1.cell(row=x + 1, column=y + 1).value = WB1_WS1.cell(row=x + 1, column=y + 1).value

WB2.save('copied.xlsx')

如果您需要进一步的帮助,请发布更多代码。


推荐阅读