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

时间:2016-02-16 18:38:29

标签: python excel pandas

例如,我将excel文件读入DataFrame,其中包含2列(id和URL)。输入文件中的URL类似于文本(没有超链接):

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

观看此DataFrame中的内容 - 所有内容均已成功阅读,所有网址均可在input_f中找到。之后我不想将此文件保存到_excel

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

我收到了警告。

  

路径 \ worksheet.py:836:UserWarning:忽略网址' http://此处为长网' ,   链接或位置/锚点>超过Excel的255个字符   URLS force_unicode(url)的限制)

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

如何解决这个问题?

2 个答案:

答案 0 :(得分:37)

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

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

答案 1 :(得分:3)

我自己尝试了并遇到了同样的问题。您可以尝试创建临时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)