Trennen von Text und Links von einem Hyperlink in OpenOffice

Trennen von Text und Links von einem Hyperlink in OpenOffice

Ich habe eine Liste mit Lesezeichen, die in eine OpenOffice-Tabelle konvertiert wurde. Nun möchte ich die Link-URL (unten blau) und den Text (schwarz) separat in zwei Spalten aufteilen.

Bild

Gibt es eine Methode, um dies zu erreichen?

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:

Dialogfeld „Textimport“

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, B90können Sie in die Zelle schreiben =CELL_URL(1,ROW(A90),1). Dadurch wird B90der Link der Zelle geschrieben A90, andernfalls wird nichts geschrieben. In die Zelle C90können Sie einfach schreiben, =A90um nur den Text zu haben (ohneHyperlink). Sie teilen also Text undHyperlink. Anschließend können Sie diese Zellen ( B90und C90) kopieren und in alle Spalten Bund Coder in alle Zeilen einfügen, die Sie benötigen.
Beachten Sie, dass die ASpalte 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 BSpalte den Text, in der Cdie Adresse und in der Deinen die URL liefert. In der Spalte wird eine Zeile ausgefüllt Bund eine bleibt leer. (Danach können Sie den Wert kopieren und in eine andere einfügen C.DBlattund 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 Aab Zeile 2, so dass A2dort der erste Fall steht. Wenn nichtdie Zahlen verschiebenvon A2 beispielsweise auf A20, von A3 auf A21, von B2 auf B20...

  • B2Schreiben Sie in die Zelle =IF(D2="","",A2).
  • In die Zelle C2schreiben=IF(D2="","",A3)
  • In die Zelle D2schreiben=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 ( Dausgefüllt ist), werden die anderen Spalten ( Bund C) geschrieben.

So fügen Sie das Makro hinzu

Gehen Sie Tools->Macro->Organize Macros->Open/Libre Office Basicvon 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:

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).

verwandte Informationen