2013-05-21 8 views
7

के साथ एक्सेल (.xlsx) से हाइपरलिंक्स निकालने के लिए मैं Excel फ़ाइल मैनिपुलेशन के लिए अधिकतर xlrd और openpyxl पुस्तकालयों को देख रहा हूं। हालांकि, xlrd वर्तमान में .xlsx फ़ाइलों के लिए formatting_info=True का समर्थन नहीं करता है, इसलिए मैं xlrd hyperlink_map फ़ंक्शन का उपयोग नहीं कर सकता। तो मैं openpyxl में बदल गया, लेकिन इसके साथ एक एक्सेल फ़ाइल से एक हाइपरलिंक निकालने की कोई किस्मत भी नहीं थी।पाइथन

import openpyxl 

wb = openpyxl.load_workbook('testFile.xlsx') 

ws = wb.get_sheet_by_name('Sheet1') 

r = 0 
c = 0 

print ws.cell(row = r, column = c). value 
print ws.cell(row = r, column = c). hyperlink 
print ws.cell(row = r, column = c). hyperlink_rel_id 

आउटपुट::

test 

None 

मुझे लगता है कि openpyxl वर्तमान में समर्थन नहीं करता है पूरी तरह से या तो स्वरूपण नीचे टेस्ट कोड (परीक्षण फ़ाइल हाइपरलिंक पाठ करने के लिए "परीक्षण" सेट के साथ गूगल के लिए एक सरल हाइपरलिंक शामिल हैं)? क्या एक्सेल (.xlsx) फ़ाइलों से हाइपरलिंक जानकारी निकालने के लिए मैं कुछ अन्य लाइब्रेरी का उपयोग कर सकता हूं?

+0

Openpyxl के प्रारूपण के लिए समर्थन अब बहुत पूरा हो गया है। कारण हाइपरलिंक्स इतने अच्छी तरह से समर्थित नहीं हैं ऐतिहासिक और साथ ही वे एक्सेल 2010 विनिर्देशन में लागू किए गए तरीके, जिनमें बहुत सारे संकेत हैं। –

+0

हाइपरलिंक्स के साथ OpenPyXl की सीमा के साथ कुछ और प्रयोग यहां दिया गया है। http://stackoverflow.com/questions/34964255/openpyxl-always-return-none-for-a-cell-with-hyperlink/34964292#34964292 – smwikipedia

उत्तर

1

मेरे अनुभव में अच्छा हो रहा है .xlsx बातचीत के लिए IronPython पर जाने की आवश्यकता है। यह आपको एक्सेल के साथ सीधे साझा भाषा क्रम (CLR) के साथ काम करते हैं और बातचीत '

http://ironpython.net/

import clr 
clr.AddReference("Microsoft.Office.Interop.Excel") 
import Microsoft.Office.Interop.Excel as Excel 
excel = Excel.ApplicationClass() 

wb = excel.Workbooks.Open('testFile.xlsx') 
ws = wb.Worksheets['Sheet1'] 

address = ws.Cells(row, col).Hyperlinks.Item(1).Address 
3

FYI करें, openpyxl के साथ समस्या यह एक वास्तविक bug है की सुविधा देता है।

और, हाँ, xlrdformatting_info के बिना हाइपरलिंक नहीं पढ़ सकता, जो वर्तमान में xlsx के लिए समर्थित नहीं है।

+1

यह 2016 है, कुछ भी बदल गया है? –

+0

@ivan_bilan इस तरह की तरह दिखता है अभी भी खुला है, हाँ, 3 साल .. – alecxe

1

एक सफल समाधान मैं के साथ काम किया सर्वर पर unoconv स्थापित करने और एक विधि है कि subprocess मॉड्यूल के माध्यम से इस कमांड लाइन टूल का आह्वान xls साथ hyperlink_map.get() काम करता है के बाद से xls को xlsx से फ़ाइल को रूपांतरित करने को लागू करने की है।

1

एक्सेल फ़ाइलों के प्रत्यक्ष हेरफेर के लिए उत्कृष्ट XlWings लाइब्रेरी को देखने के लायक भी है।

2

कम से कम संस्करण openpyxl-2.4.0b1 से शुरू करना यह बग https://bitbucket.org/openpyxl/openpyxl/issue/152/hyperlink-returns-empty-string-instead-of तय किया गया था। अब यह सेल हाइपरलिंक वस्तु के बदले दिया गया है:

hl_obj = ws.row(col).hyperlink # getting Hyperlink object for Cell 
#hl_obj = ws.cell(row = r, column = c).hyperlink This could be used as well. 
if hl_obj: 
    print(hl_obj.display) 
    print(hl_obj.target) 
    print(hl_obj.tooltip) # you can see it when hovering mouse on hyperlink in Excel 
    print(hl_obj) # to see other stuff if you need 
0

, तो इसके बजाय सिर्फ .hyperlink, करने का .hyperlink.target काम करना चाहिए। मुझे पहले से सेल ऑब्जेक्ट पर ".hyperlink" का उपयोग करने से 'कोई नहीं' मिल रहा था।

2

यह अब openpyxl साथ संभव हो जाना चाहिए:

import openpxyl 

wb = openpyxl.load_workbook('yourfile.xlsm') 
ws = wb.get_sheet_by_name('Sheet1') 
print(ws.cell(row=2, column=1).hyperlink.target)