Respuesta1
La clave es utilizar la funcionalidad Importar texto en OpenOffice.org Calc.
Sin tener una copia de sus marcadores para ver el formato preciso utilizado, le proporcionaré instrucciones generales que quizás necesite modificar para ajustarse a su formato específico.
La forma más sencilla de realizar esta acción es abrir su lista de marcadores en un editor de texto y copiar el archivo completo al portapapeles.
Ahora cree una nueva hoja de cálculo en OpenOffice.org Calc.
En OpenOffice.org, presioneCtrl+Mayús+Vpara realizar unPegado especialacción. Después de especificar que desea importar el portapapeles como texto sin formato, se le presentará el cuadro de diálogo Importar texto:
En ese cuadro de diálogo, seleccione elSeparado porboton de radio. Dependiendo del formato exacto de los datos de origen, ajuste las casillas de verificación a continuaciónSeparado porpara separar correctamente la URL del enlace del texto. Si tiene algún desafío, puede ingresar diferentes caracteres en el campo de texto a la derecha delOtrocaja. Introducir una barra diagonal (/) en ese campo de texto encontrará todas las URL que comiencen conhttp://yhttps://y ponerlos en su propia columna.
Respuesta2
Como parece que falta una función directa para extraer elHipervínculodel texto, puede ser una solución rápida utilizar unmacroeso simplemente existe. Al final de la respuesta encontrará el código que define una función CELL_URL(SheetNumber,Row,Column)
capaz de devolver el valor del hipervínculo. Después de eso, agregará esa macro y podrá usar la función CELL_URL
(debajo de las instrucciones).
Solución simple.Siguiendo el ejemplo de tu imagen, en la celda B90
puedes escribir =CELL_URL(1,ROW(A90),1)
. Esto escribirá en B90
el enlace de la celda A90
, de lo contrario no escribirá nada. En la celda C90
puedes simplemente escribir =A90
para tener solo el texto (sinHipervínculo). Entonces divides el texto yHipervínculo. Después, puede copiar estas celdas ( B90
y C90
) y pegarlas en todas sus columnas B
y C
, o en todas las filas que necesite.
Tenga en cuenta que la A
columna está fija en su ejemplo y para esto escribí =CELL_URL(...,1)
. Puede especificar un número diferente de columna si lo necesita, o puede llamar a esta función desde otrohoja.
Solución extendida.Dado que no estaba claro (para mí) si desea simplemente dividir el texto y el hipervínculo de las celdas pares (2,4,6...), o si desea aumentar las celdas impares (3,5,... ) contenidos próximos a los pares, te propongo el siguiente esquema que te dará en la B
columna el texto, en la C
dirección y en la D
url. Se completará una línea en la columna B
y C
la D
otra estará vacía. (Después de poder copiar y pegar el valor en otrohojay reordenar para omitir las líneas vacías, o puede agregar una ecuación más compleja como parámetro de la función directamente en otrohoja).
Supongo que estás trabajando el 1hojadecálculo, y el texto está en la columna A
que comienza en la fila 2, por lo que A2
existe el primer caso. Si nocambiar los númerosde A2, por ejemplo a A20, de A3 a A21, de B2 a B20...
- En la celda
B2
escribe=IF(D2="","",A2)
. - En la celda
C2
escribe=IF(D2="","",A3)
- En la celda
D2
escribe=CELL_URL(1,ROW(A2),1)
Copia las tres celdas y pégalas donde necesites.
La lógica es: si puede extraer el enlace ( D
está lleno) escribe las otras columnas ( B
y C
).
Cómo agregar la macro
Vaya a
Tools->Macro->Organize Macros->Open/Libre Office Basic
desde la hoja en la que está trabajando, cree unnuevoMacro. Ponle un nombre que te guste. Verás que se abre una nueva ventana. Copia y pega el código.
la macro
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
Referencias:
- Funciones celulares introspectivas, en el foro de openoffice.
- Otrorespuestaen StackOverflow.
- Máslecturaen intercambio de expertos.
- Másinspiracióndesde el foro de Ubuntu para comenzar a escribir su propia macro.
Trabajando enlibreoficinaVersión: 4.2.8.2.
Respuesta3
No soy usuario de OpenOffice calc, pero en vista de las otras respuestas complicadas, intentaré dar una solución más sencilla (que incluso podría funcionar).
Si entendí correctamente, actualmente tiene una hoja de cálculo de una columna donde A1, A3, A5, etc. contienen texto con enlaces, y donde A2, A4, A6, etc. contienen texto simple.
Le gustaría construir una nueva hoja de cálculo como esta:
A1 , A2
A3 , A4
A5 , A6
etc.
Mi idea es agregar una columna B1 con la fórmula =MOD(ROW();2)
, que propagas a toda la columna B. Esto te dará:
A1 , 1
A2 , 0
A3 , 1
A4 , 0
etc.
Ahora ordene (o filtre si la ordenación no funciona según sea necesario) por la columna B para agregar todas las columnas:
A1 , 1
A3 , 1
etc.
A2 , 0
A4 , 0
etc.
Ahora puede copiar y pegar la columna A donde B=1 en una nueva hoja de cálculo en la columna A, luego copiar y pegar en la nueva hoja de cálculo en la columna B la columna A de la hoja de cálculo anterior donde B=0.
Esto debería dar el resultado deseado (espero).