如何使用 Pandas 在单元格中保存 *.xlsx long URL

How to save in *.xlsx long URL in cell using Pandas

例如,我将 excel 文件读取到具有 2 列(id 和 URL)的 DataFrame 中。 URLs in input file are like text(without hyperlinks):

input_f = pd.read_excel("input.xlsx")

观察这个 DataFrame 中的内容 - 一切都已成功读取,所有 URL 在 input_f 中都正常。之后当我不想保存这个文件时 to_excel

input_f.to_excel("output.xlsx", index=False)

我收到了警告。

Path\worksheet.py:836: UserWarning: Ignoring URL 'http:// here long URL' with link or location/anchor > 255 characters since it exceeds Excel's limit for URLS force_unicode(url))

并且在 output.xlsx 中长 URL 的单元格是空的,并且 URLs 成为超链接。

如何解决这个问题?

我自己试了一下,也遇到了同样的问题。您可以尝试创建一个临时 csv 文件,然后使用 xlsxwriter 创建一个 excel 文件。完成后删除 tmp 文件。 xlsxwriter 有一个 write_string 方法,它将覆盖 excel 所做的自动超链接。这对我有用。

import pandas as pd
import csv
import os
from xlsxwriter.workbook import Workbook
inData = "C:/Users/martbar/Desktop/test.xlsx"
tmp = "C:/Users/martbar/Desktop/tmp.csv"
exFile = "C:/Users/martbar/Desktop/output.xlsx"

#read in data
df = pd.read_excel(inData)

#send to csv
df.to_csv(tmp, index=False)

#convert to excel
workbook = Workbook(exFile)
worksheet = workbook.add_worksheet()
with open(tmp, 'r') as f:
    reader = csv.reader(f)
    for r, row in enumerate(reader):
        for c, col in enumerate(row):
            #if you use write instead of write_string you will get the error
            worksheet.write_string(r, c, col) 
workbook.close()

#delete tmp file
os.remove(tmp)

您可以使用不将字符串转换为 url 的选项创建 ExcelWriter 对象:

writer = pandas.ExcelWriter(r'file.xlsx', engine='xlsxwriter',options={'strings_to_urls': False})
df.to_excel(writer)
writer.close()

来自 the docs 部分:“将 XlsxWriter 构造函数选项传递给 Pandas”,'strings_to_urls': False 现在指定如下:

writer = pd.ExcelWriter('pandas_example.xlsx',
                        engine='xlsxwriter',
                        engine_kwargs={'options': {'strings_to_urls': False}})

然后继续按照已接受的回复建议进行 :

df.to_excel(writer)
writer.close()