【问题标题】:Convert XLSX to CSV without losing values from formulas将 XLSX 转换为 CSV,而不会丢失公式中的值
【发布时间】:2021-11-16 12:29:16
【问题描述】:

我尝试了几种方法,包括pandas

df = pd.read_excel('file.xlsx')
df.to_csv('file.csv')

但每次我将xlsx 文件转换为csv 格式时,都会丢失包含公式的列中的所有数据。我有一个公式,它连接来自其他两个单元格的值 + '@domain' 以创建用户电子邮件,但整个列在csv 产品中返回空白。 公式基本上是这样的:

=CONCATENATE(B2,".",E2,"@domain")

转换是更大的代码工作流程的一部分,但如果此列留空,它将不起作用。我尝试过的唯一有效的方法是 API,但如果可以在机器上本地完成,我宁愿不支付订阅费。

有什么想法吗?我会尝试你扔给我的任何东西 - 请记住,我是新手,但我会尽力而为!

【问题讨论】:

    标签: python excel pandas csv


    【解决方案1】:

    您可以尝试在data-only模式下使用openpyxl库打开excel文件。这将阻止原始公式 - 它们将按照您在 excel 本身中看到的方式进行计算。

    import openpyxl 
    
    wb = openpyxl.load_workbook(filename, data_only=True)
    

    当您使用原始文件时要小心,并在 data-only-mode 中使用 openpyxl-lib 保存它,您的所有公式都将丢失。我有过这个,太可怕了。因此,我建议使用您的文件副本。

    由于您的 xlsx 文件只有值,您现在可以使用内部 csv 库生成正确的 csv 文件(来自这篇文章的想法:How to save an Excel worksheet as CSV):

    import csv
    
    sheet = wb.active # was .get_active_sheet()
    with open('test.csv', 'w', newline="") as f:
        c = csv.writer(f)
        for r in sheet.iter_rows(): # generator; was sh.rows
            c.writerow([cell.value for cell in r])
    

    【讨论】:

    • 我试过了,但它仍然不起作用 - CSV 文件仍然删除了包含公式的列中的行。不过,我很欣赏这个建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2013-11-14
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多