Responder1
A chave é usar a funcionalidade de importação de texto no OpenOffice.org Calc.
Sem ter uma cópia dos seus favoritos para ver a formatação precisa usada, fornecerei instruções gerais que você pode precisar ajustar para se adequar à sua formatação específica.
A maneira mais fácil de realizar esta ação é abrir sua lista de favoritos em um editor de texto e copiar o arquivo inteiro para a área de transferência.
Agora crie uma nova planilha no OpenOffice.org Calc.
No OpenOffice.org, pressioneCtrl+Shift+Vpara realizar umColar especialAção. Depois de especificar que deseja importar a área de transferência como texto não formatado, será apresentada a caixa de diálogo Importação de texto:
Nessa caixa de diálogo, selecione oSeparado porbotao de radio. Dependendo da formatação exata dos dados de origem, ajuste as caixas de seleção abaixoSeparado porpara separar adequadamente o URL do link do texto. Se você tiver algum desafio, poderá inserir caracteres diferentes no campo de texto à direita doOutrocaixa de seleção. Inserindo uma barra (/) nesse campo de texto encontrará todos os URLs que começam comhttp://ehttps://e coloque-os em sua própria coluna.
Responder2
Como parece que falta uma função direta para extrair ohiperlinkdo texto, pode ser uma solução rápida usar ummacroisso simplesmente existe. No final da resposta você encontrará o código que define uma função CELL_URL(SheetNumber,Row,Column)
capaz de retornar o valor do hiperlink. Depois disso você adicionará aquela macro e poderá usar a função CELL_URL
(abaixo das instruções).
Solução simples.Seguindo o exemplo da sua foto, na célula B90
você pode escrever =CELL_URL(1,ROW(A90),1)
. Isso vai escrever no B90
link da célula A90
, senão não vai escrever nada. Na célula C90
você pode simplesmente escrever =A90
para ter apenas o texto (semhiperlink). Então você divide o texto ehiperlink. Depois você pode copiar essas células ( B90
e C90
) e colar em todas as suas colunas B
e C
, ou em todas as linhas que você precisa.
Observe que a A
coluna está fixa no seu exemplo e para isso escrevi =CELL_URL(...,1)
. Você pode especificar um número diferente da coluna, se necessário, ou pode chamar esta função de outrofolha.
Solução estendida.Como não estava claro (para mim) se você deseja simplesmente dividir o texto e o hiperlink das células pares (2,4,6...), ou se deseja aumentar as células ímpares (3,5,... ) conteúdos próximos dos pares, proponho o seguinte esquema que lhe dará na B
coluna o texto, na o C
endereço e naquela D
a url. Uma linha será preenchida na coluna e B
uma estará vazia. (Depois de copiar, cole o valor em outroC
D
folhae reordene para pular as linhas vazias, ou você pode adicionar uma equação mais complexa como parâmetro da função diretamente em outrofolha).
Presumo que você esteja trabalhando no primeirofolhadecálculo, e o texto está na coluna A
começando na linha 2 para que aí A2
esteja o primeiro caso. Se nãomudar os númerosde A2, por exemplo para A20, de A3 para A21, de B2 para B20...
- Na célula
B2
escreva=IF(D2="","",A2)
. - Na célula
C2
escreva=IF(D2="","",A3)
- Na célula
D2
escreva=CELL_URL(1,ROW(A2),1)
Copie as três células e cole onde precisar.
A lógica é: se conseguir extrair o link ( D
está preenchido) ele escreve as demais colunas ( B
e C
).
Como adicionar a macro
Vá para
Tools->Macro->Organize Macros->Open/Libre Office Basic
a planilha em que você está trabalhando, crie umnovoMacro. Dê um nome que você goste. Você verá uma nova janela se abrindo. Copie e cole o código.
A 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
Referências:
- Funções celulares introspectivas, no fórum do openoffice.
- Outroresponderno StackOverflow.
- Avançarleiturano Expert Exchange.
- Avançarinspiraçãodo fórum do Ubuntu para começar a escrever sua própria macro.
Trabalhando emLibreofficeVersão: 4.2.8.2.
Responder3
Não sou usuário do OpenOffice calc, mas tendo em vista as outras respostas complicadas, tentarei dar uma solução mais simples (que pode até funcionar).
Se bem entendi, atualmente você tem uma planilha de uma coluna onde A1, A3, A5 etc. contêm texto com links e onde A2, A4, A6 etc.
Você gostaria de construir uma nova planilha como esta:
A1 , A2
A3 , A4
A5 , A6
etc.
Minha ideia é adicionar uma coluna B1 com a fórmula =MOD(ROW();2)
, que você propaga para toda a coluna B. Isso lhe dará:
A1 , 1
A2 , 0
A3 , 1
A4 , 0
etc.
Agora classifique (ou filtre se a classificação não funcionar conforme necessário) pela coluna B para agregar todas as colunas:
A1 , 1
A3 , 1
etc.
A2 , 0
A4 , 0
etc.
Agora você pode copiar e colar a coluna A onde B=1 em uma nova planilha na coluna A e, em seguida, copiar e colar na nova planilha na coluna B a coluna A da planilha antiga onde B=0.
Isso deve dar o resultado desejado (espero).