2015-05-07 25 views
6

Sto utilizzando il modulo openpyxl per Python e sto provando a creare un collegamento ipertestuale che mi porterà in una scheda diversa nella stessa cartella di lavoro di Excel. Fare qualcosa di simile al seguente crea il collegamento ipertestuale; tuttavia, quando faccio clic su di esso, mi dice che non è possibile aprire il file.Come creare un collegamento ipertestuale a un foglio Excel diverso nella stessa cartella di lavoro

from openpyxl import Workbook 

wb = Workbook() 
first_sheet = wb.create_sheet(title='first') 
second_sheet = wb.create_sheet(title='second') 

first_sheet['A1'] = "hello" 
second_sheet['B2'] = "goodbye" 

link_from = first_sheet['A1'] 
link_to = second_sheet['B2'].value 

link_from.hyperlink = link_to 

wb.save("C:/somepath/workbook.xlsx") 

Sto assumendo che il problema si trova nel valore di 'link_to'; tuttavia, non so che cosa avrebbe bisogno di essere cambiato o che tipo di percorso avrei dovuto scrivere.

sto usando Python 2.7.6 ed Excel 2013.

+0

Perché si collega al valore della cella? Dovresti collegare solo all'intervallo. –

+0

L'ho rimosso, ma l'unico motivo era perché funzionava ... (come in esso creato un collegamento ipertestuale). In realtà non mi porta sull'altro foglio. – user2869231

+0

in realtà, lo tengo lì dentro; se tolgo il '.value', ottengo l'errore ...: 'non può serializzare user2869231

risposta

1

supporto per i collegamenti ipertestuali in openpyxl è attualmente estremamente rudimentale e in gran parte limitato a leggere i collegamenti in file esistenti.

8

Ho trovato un modo per farlo.

Supponendo un file xlsx denominato 'workbookEx.xlsx' con due fogli di nome 'sheet1' e 'sheet2' e che necessitano di un collegamento da una cella (A1 ) del 'sheet1 'in un'altra cella (E5) del' sheet2 ':

from openpyxl import load_workbook 

wb = load_workbook(workbookEx.xlsx) 
ws = wb.get_sheet_by_name("sheet1") 

link = "workbookEx.xlsx#sheet2!E5" 

ws.cell(row=1, column=1).hyperlink = (link) 

il segreto è stato il "#", Excel non mostra yo ma usa il '#' per gli stessi link di file, ho solo dovuto copiare uno stesso link di file creato in Excel in un documento di Word per vedere il '#'.

È anche possibile omettere il nome file, ovvero per collegarsi a un foglio del documento attivo basta usare: _cell.hyperlink = '#sheetName!A1'.

Per denominare il collegamento appena creato, basta impostare il valore della cella sulla stringa desiderata: _cell.value = 'Linkname'.

+1

Bel lavoro! E se intendi solo il testo che vedi nella cella che contiene il collegamento ipertestuale, aggiungi: ws.cell (row = 1, column = 1) .value = "text you want" – user2869231

+0

Questo era esattamente ciò che intendevo. Grazie, semplice e funziona piuttosto bene. – lomelisan

2

Un'altra soluzione di lavoro è l'utilizzo di Excel incorporato nella funzione HYPERLINK. Non crea il valore nella cella in un collegamento ipertestuale ma inserisce una formula nella cella e si comporta come un collegamento ipertestuale.

ws.cell('A1').value = '=HYPERLINK("#sheet2!E5","Link name")' 
1

Come un addendum alla risposta di Marcus.Luck, se vogliono utilizzare built-in funzione di collegamento ipertestuale direttamente, potrebbe essere necessario formattare come di Excel:

'=HYPERLINK("{}", "{}")'.format(link, "Link Name")

Senza questa formattazione, il file non si è aperto per me senza aver bisogno di riparazioni, che ha rimosso i valori della cella quando si fa clic sui collegamenti.

ad es. ws.cell(row=1, column=1).value = '=HYPERLINK("{}", "{}")'.format(link, "Link Name")

+1

è davvero eccellente. Il link non appare sottolineato, ma funziona! Grazie –

Problemi correlati