【问题标题】:Is it possible to copy the Excel formula of a cell instead of the value using python?是否可以使用 python 复制单元格的 Excel 公式而不是值?
【发布时间】:2017-09-13 13:36:22
【问题描述】:

现在我正在使用正在工作的 pandas 将 Excel 工作表合并到 1 个新工作表中。 唯一的问题是新 Excel 工作表中的值是纯数字而不是公式,我想要公式。

正在加载文件

directory = os.path.dirname(__file__)
fname = os.path.join(directory, "Reisanalyze.xlsm")
print("Loading %s..." % fname)
sheet1 = pd.read_excel(fname, sheetname="Input")
sheet2 = pd.read_excel(fname, sheetname="Alternatieven")

写入新工作表

writer = pd.ExcelWriter('first_sheet.xlsx', engine='xlsxwriter')`**
sheet1.to_excel(writer, sheet_name='Input', merge_cells=False, startrow=0, startcol=0)
    sheet2.to_excel(writer, sheet_name='Input', merge_cells=False, startrow=0, startcol=21)

我最初尝试使用 pycel 项目,该项目在我需要加载多张工作表之前一直有效,但没有成功。这就是我使用 pandas 将多张纸写入 1 张纸的原因。

【问题讨论】:

  • 请发布执行您访问的最少特定代码,可能还包括背景信息。
  • 如果选择使用 openpyxl 模块,那么在文件打开时,您可以选择加载公式或文件中计算的最后一个值。在默认模式下打开文件会将此标志设置为 False,因此您将可以访问公式。来源:openpyxl.readthedocs.io/en/default/usage.html

标签: python excel pandas formula pycel


【解决方案1】:

您可以使用 OpenPyXL。阅读here

以下是测试excel文件testexl.xlsx

    A       |   B
 ---------- | ------
 =SUM(B1:B2)|   1  
            |   2

下面是测试代码

from openpyxl import load_workbook
import pandas as pd
wb = load_workbook(filename = 'testexl.xlsx')
sheet_names = wb.get_sheet_names()
name = sheet_names[0]
sheet_ranges = wb[name]
df = pd.DataFrame(sheet_ranges.values)
print df

输出

    0           1
0  =SUM(B1:B2)  1
1    None       2

【讨论】:

    【解决方案2】:

    如果您想保留 excel 公式,那么您需要阻止它们成为公式,然后再将它们转换回来。 为此,在转换之前,在键盘上执行 control/command+F,然后屏幕中间会出现一个菜单,然后单击替换选项卡。

    在“查找内容:”框中输入“=”并在“替换为:”框中输入“.=”。然后全部更换。 这会将公式转换为文本供您复制。

    将其保存为 csv 文件

    注意:我知道这也将替换公式中的 = 符号。没关系,会过去的。

    合并它们后,在 excel 中将其打开,重复但反向将它们转换回公式。

    这可能比导入额外的模块更容易。

    【讨论】:

    • 我不想这样做的原因是因为我不想手动更改excel中的公式/单元格。我想用python改变它。感谢您的意见。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多