Ответ 1
Вы можете создать объект ExcelWriter с возможностью не конвертировать строки в URL-адреса:
writer = pandas.ExcelWriter(r'file.xlsx', engine='xlsxwriter',options={'strings_to_urls': False})
df.to_excel(writer)
writer.close()
Например, я прочитал файл excel в DataFrame с двумя столбцами (id и URL). URL-адреса во входном файле похожи на текст (без гиперссылок):
input_f = pd.read_excel("input.xlsx")
Посмотрите, что внутри этого DataFrame - все было успешно прочитано, все URL-адреса в порядке input_f
в input_f
. После этого, когда я не сохраню этот файл to_excel
input_f.to_excel("output.xlsx", index=False)
Я получил предупреждение.
Путь\workheet.py: 836: UserWarning: Игнорирование URL 'http://здесь длинный URL' со ссылкой или местоположением/привязкой> 255 символов, так как он превышает предел Excel для URLS force_unicode (url))
И в output.xlsx ячейки с длинным URL-адресом были пустыми, а URL-адреса стали гиперссылками.
Как это исправить?
Вы можете создать объект ExcelWriter с возможностью не конвертировать строки в URL-адреса:
writer = pandas.ExcelWriter(r'file.xlsx', engine='xlsxwriter',options={'strings_to_urls': False})
df.to_excel(writer)
writer.close()
Я попробовал это сам и получил ту же проблему. Вы можете попытаться создать файл temp csv, а затем использовать xlsxwriter для создания файла excel. После этого удалите файл tmp. xlsxwriter имеет метод write_string, который будет переопределять автогипертинг, который превосходит. Это сработало для меня.
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)