Antwort1
Der Schlüssel liegt darin, die Textimportfunktion in OpenOffice.org Calc zu verwenden.
Da ich nicht über eine Kopie Ihrer Lesezeichen verfüge, um die genaue Formatierung zu sehen, werde ich Ihnen allgemeine Anweisungen geben, die Sie möglicherweise anpassen müssen, um sie an Ihre spezifische Formatierung anzupassen.
Am einfachsten führen Sie diese Aktion aus, indem Sie Ihre Lesezeichenliste in einem Texteditor öffnen und die gesamte Datei in die Zwischenablage kopieren.
Erstellen Sie jetzt eine neue Tabelle in OpenOffice.org Calc.
Drücken Sie in OpenOffice.orgStrg+Umschalt+VdurchführenInhalte einfügenAktion. Nachdem Sie angegeben haben, dass Sie die Zwischenablage als unformatierten Text importieren möchten, wird das Dialogfeld Textimport angezeigt:
Wählen Sie in diesem Dialogfeld dieGetrennt durchOptionsfeld. Abhängig von der genauen Formatierung der Quelldaten passen Sie die Kontrollkästchen unten anGetrennt durchum die Link-URL richtig vom Text zu trennen. Wenn Sie Probleme haben, können Sie andere Zeichen in das Textfeld rechts neben demAndereKontrollkästchen. Die Eingabe eines Schrägstrichs (/) in dieses Textfeld werden alle URLs gefunden, die mithttp://Undhttps://und tragen Sie sie in eine eigene Spalte ein.
Antwort2
Da es anscheinend eine direkte Funktion zum Extrahieren derHyperlinkaus dem Text kann es eine schnelle Lösung sein, einenMakrodas existiert einfach. Unten in der Antwort finden Sie den Code, der eine Funktion definiert, CELL_URL(SheetNumber,Row,Column)
die den Wert des Hyperlinks zurückgeben kann. Nachdem Sie dieses Makro hinzugefügt haben, können Sie die Funktion verwenden CELL_URL
(unter den Anweisungen).
Einfache Lösung.Wenn Sie dem Beispiel Ihres Bildes folgen, B90
können Sie in die Zelle schreiben =CELL_URL(1,ROW(A90),1)
. Dadurch wird B90
der Link der Zelle geschrieben A90
, andernfalls wird nichts geschrieben. In die Zelle C90
können Sie einfach schreiben, =A90
um nur den Text zu haben (ohneHyperlink). Sie teilen also Text undHyperlink. Anschließend können Sie diese Zellen ( B90
und C90
) kopieren und in alle Spalten B
und C
oder in alle Zeilen einfügen, die Sie benötigen.
Beachten Sie, dass die A
Spalte in Ihrem Beispiel festgelegt ist und ich hierfür geschrieben habe =CELL_URL(...,1)
. Sie können bei Bedarf eine andere Spaltennummer angeben oder diese Funktion von einem anderen aus aufrufen.Blatt.
Erweiterte Lösung.Da (für mich) nicht klar war, ob Sie einfach Text und Hyperlink der geraden Zellen (2,4,6...) trennen möchten oder ob Sie stattdessen den Inhalt der ungeraden Zellen (3,5,...) in die Nähe der geraden Zellen bringen möchten, schlage ich das folgende Schema vor, das Ihnen in der B
Spalte den Text, in der C
die Adresse und in der D
einen die URL liefert. In der Spalte wird eine Zeile ausgefüllt B
und eine bleibt leer. (Danach können Sie den Wert kopieren und in eine andere einfügen C
.D
Blattund neu anordnen, um die leeren Zeilen zu überspringen, oder Sie können eine komplexere Gleichung als Parameter der Funktion direkt in einem anderenBlatt).
Ich nehme an, Sie arbeiten am 1.BlattvonBerechnung, und der Text steht in der Spalte A
ab Zeile 2, so dass A2
dort der erste Fall steht. Wenn nichtdie Zahlen verschiebenvon A2 beispielsweise auf A20, von A3 auf A21, von B2 auf B20...
B2
Schreiben Sie in die Zelle=IF(D2="","",A2)
.- In die Zelle
C2
schreiben=IF(D2="","",A3)
- In die Zelle
D2
schreiben=CELL_URL(1,ROW(A2),1)
Kopieren Sie die drei Zellen und fügen Sie sie dort ein, wo Sie sie brauchen.
Die Logik ist: Wenn der Link extrahiert werden kann ( D
ausgefüllt ist), werden die anderen Spalten ( B
und C
) geschrieben.
So fügen Sie das Makro hinzu
Gehen Sie
Tools->Macro->Organize Macros->Open/Libre Office Basic
von dem Blatt, an dem Sie arbeiten, zu, erstellen Sie einneuMakro. Geben Sie ihm einen Namen, der Ihnen gefällt. Es öffnet sich ein neues Fenster. Kopieren Sie den Code und fügen Sie ihn ein.
Das Makro
REM ***** BASIC *****
REM ################### RETURNING STRING #################################################
Function CELL_NOTE(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM returns annotation text
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_NOTE = v.Annotation.getText.getString
else
CELL_NOTE = v
endif
End Function
Function CELL_URL(vSheet,lRowIndex&,iColIndex%,optional n%)
'calls: getSheetCell
REM returns URL of Nth text-hyperlink from a cell, default N=1)
Dim v
If isMissing(n) then n= 1
If n < 1 then
CELL_URL = Null
exit function
endif
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
if v.Textfields.Count >= n then
CELL_URL = v.getTextfields.getByIndex(n -1).URL
else
Cell_URL = Null
endif
else
CELL_URL = v
endif
End Function
Function CELL_FORMULA(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM return unlocalized (English) formula
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_FORMULA = v.getFormula()
else
CELL_FORMULA = v
endif
End Function
Function CELL_STYLE(vSheet,lRowIndex&,iColIndex%,optional bLocalized)
'calls: getSheetCell
REM return name of cell-style, optionally localized
Dim v,s$,bLocal as Boolean
if not isMissing(bLocalized) then bLocal=cBool(bLocalized)
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
if bLocal then
s = thisComponent.StyleFamilies("CellStyles").getByName(v.CellStyle).DisplayName
else
s = v.CellStyle
endif
CELL_STYLE = s
else
CELL_STYLE = v
endif
End Function
Function CELL_LINE(vSheet,lRowIndex&,iColIndex%,optional n)
'calls: getSheetCell
REM Split by line breaks, missing or zero line number returns whole string.
REM =CELL_LINE(SHEET(),1,1,2) -> second line of A1 in this sheet
Dim v,s$,a(),i%
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
s = v.getString
if not isMissing(n) then i = cInt(n)
if i > 0 then
a() = Split(s,chr(10))
If (i <= uBound(a())+1)then
CELL_LINE = a(i -1)
else
CELL_LINE = NULL
endif
else
CELL_LINE = s
endif
else
CELL_LINE = v
endif
end Function
REM ################### RETURNING NUMBER #################################################
Function CELL_ISHORIZONTALPAGEBREAK(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_ISHORIZONTALPAGEBREAK = Abs(cINT(v.Rows.getByIndex(0).IsStartOfNewPage))
else
CELL_ISHORIZONTALPAGEBREAK = v
endif
End Function
Function CELL_ISVERTICALPAGEBREAK(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_ISVERTICALPAGEBREAK = Abs(cINT(v.Columns.getByIndex(0).IsStartOfNewPage))
else
CELL_ISVERTICALPAGEBREAK = v
endif
End Function
Function CELL_CHARCOLOR(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM returns color code as number
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_CHARCOLOR = v.CharColor
else
CELL_CHARCOLOR = v
endif
End Function
Function CELL_BACKCOLOR(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM returns color code as number
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_BACKCOLOR = v.CellBackColor
else
CELL_BACKCOLOR = v
endif
End Function
Function CELL_VISIBLE(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM returns visibility state as number 0|1
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_VISIBLE = Abs(v.Rows.isVisible)
else
CELL_VISIBLE = v
endif
End Function
Function CELL_LOCKED(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM returns locked state as number 0|1
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_LOCKED = Abs(v.CellProtection.isLocked)
else
CELL_LOCKED = v
endif
End Function
Function CELL_NumberFormat(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM returns the number format index
Dim v
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
CELL_NumberFormat = v.NumberFormat
else
CELL_NumberFormat = v
endif
End Function
Function CELL_NumberFormatType(vSheet,lRowIndex&,iColIndex%)
'calls: getSheetCell
REM return a numeric com.sun.star.util.NumberFormat which describes a format category
Dim v,lNF&
v = getSheetCell(vSheet,lRowIndex&,iColIndex%)
if vartype(v) = 9 then
lNF = v.NumberFormat
CELL_NumberFormatType = ThisComponent.getNumberFormats.getByKey(lNF).Type
else
CELL_NumberFormatType = v
endif
End Function
'################### HELPERS FOR ABOVE CELL FUNCTIONS #########################################
Function getSheet(byVal vSheet)
REM Helper for sheet functions. Get cell from sheet's name or position; cell's row-position; cell's col-position
on error goto exitErr
select case varType(vSheet)
case is = 8
if thisComponent.sheets.hasbyName(vSheet) then
getSheet = thisComponent.sheets.getByName(vSheet)
else
getSheet = NULL
endif
case 2 to 5
vSheet = cInt(vSheet)
'Wow! Calc has sheets with no name at index < 0,
' so NOT isNull(oSheet), if vSheet <= lbound(sheets) = CRASH!
'http://www.openoffice.org/issues/show_bug.cgi?id=58796
if(vSheet <= thisComponent.getSheets.getCount)AND(vSheet > 0) then
getSheet = thisComponent.sheets.getByIndex(vSheet -1)
else
getSheet = NULL
endif
end select
exit function
exitErr:
getSheet = NULL
End Function
Function getSheetCell(byVal vSheet,byVal lRowIndex&,byVal iColIndex%)
dim oSheet
' print vartype(vsheet)
oSheet = getSheet(vSheet)
if varType(oSheet) <>9 then
getSheetCell = NULL
elseif (lRowIndex > oSheet.rows.count)OR(lRowIndex < 1) then
getSheetCell = NULL
elseif (iColIndex > oSheet.columns.count)OR(iColIndex < 1) then
getSheetCell = NULL
else
getSheetCell = oSheet.getCellByPosition(iColIndex -1,lRowIndex -1)
endif
End Function
Verweise:
- Introspektive Zellfunktionen, im OpenOffice-Forum.
- Ein andererAntwortauf StackOverflow.
- WeiterLektüreauf Expert Exchange.
- WeiterInspirationaus dem Ubuntu-Forum, um mit dem Schreiben Ihres eigenen Makros zu beginnen.
Arbeiten anLibreofficeVersion: 4.2.8.2.
Antwort3
Ich bin kein Benutzer von OpenOffice Calc, aber angesichts der anderen komplizierten Antworten werde ich versuchen, eine einfachere Lösung anzubieten (die sogar funktionieren könnte).
Wenn ich das richtig verstanden habe, haben Sie derzeit eine einspaltige Tabelle, in der A1, A3, A5 usw. Text mit Links enthalten und A2, A4, A6 usw. einfachen Text enthalten.
Sie möchten eine neue Tabelle wie diese erstellen:
A1 , A2
A3 , A4
A5 , A6
etc.
Meine Idee ist, eine Spalte B1 mit der Formel hinzuzufügen =MOD(ROW();2)
, die Sie auf die gesamte Spalte B übertragen. Dadurch erhalten Sie:
A1 , 1
A2 , 0
A3 , 1
A4 , 0
etc.
Sortieren Sie nun nach Spalte B (oder filtern Sie, wenn die Sortierung nicht wie gewünscht funktioniert), um alle Spalten zusammenzufassen:
A1 , 1
A3 , 1
etc.
A2 , 0
A4 , 0
etc.
Sie können jetzt die Spalte A, in der B=1 ist, in Spalte A einer neuen Tabelle kopieren und einfügen und anschließend die Spalte A aus der alten Tabelle, in der B=0 ist, in Spalte B der neuen Tabelle kopieren und einfügen.
Dies sollte das gewünschte Ergebnis liefern (hoffe ich).