Вопрос: Разделение текста и ссылок на гиперссылку в OpenOffice


У меня есть список закладок, который преобразуется в электронную таблицу OpenOffice. Теперь я хочу разделить URL-адрес ссылки (синим цветом ниже) и его текст (черным) отдельно на два столбца.

image

Есть ли способ достичь этого?


4
2017-07-27 13:03


Источник


Предоставление нам примера того, как выглядит эта таблица. действительно очень помогите решить вашу проблему. - slhck
Электронная таблица выглядит примерно так: Ссылка на гиперссылку Ссылка URL-адрес ссылки Ubuntu Ubuntu ubuntulinux.org Ubuntu Wiki (редактируемый сообществом веб-сайт), как и для первого: ссылка url прилагается со словом ubuntu. Теперь ubuntu отделен от его ссылки. Я хочу отделить ссылки и текст. Сделайте запрос поддержки сообществу Ubuntu Debian (Ubuntu основан на Debi an) Ubuntu One - персональное облако, которое объединяет вашу цифровую жизнь - Kush
Пожалуйста, используйте редактироватьчтобы обновить ваш вопрос - ваш комментарий не читается вообще. - slhck
Добавление щедрости к вопросу, который никто не может понять, не поможет ему получить ответы. - qasdfdsaq
@Pekka Мне было любопытно, кстати, у вас есть больше возможностей для управления Готовка...;) - Hastur


Ответы:


Ключ должен использовать функцию импорта текста в OpenOffice.org Calc.

Если у вас нет копии ваших закладок, чтобы увидеть точное форматирование, я дам общие инструкции, которые вам могут потребоваться, чтобы настроить их на соответствие вашему конкретному форматированию.

Самый простой способ выполнить это действие - открыть список закладок в текстовом редакторе и скопировать весь файл в буфер обмена.

Теперь создайте новую таблицу в OpenOffice.org Calc.

В OpenOffice.org нажмите Ctrl + Shift + V, для выполнения Специальная вставка действие. После указания того, что вы хотите импортировать буфер обмена как неформатированный текст, вам будет представлено диалоговое окно «Импорт текста»:

Text Import dialog box

В этом диалоговом окне выберите Разделены по переключатель. В зависимости от точного форматирования исходных данных установите флажки ниже Разделены по чтобы правильно отделить URL ссылки от текста. Если у вас есть проблемы, вы можете ввести разные символы в текстовое поле справа от Другие флажок. Ввод косой черты (/) в это текстовое поле найдут все URL-адреса, которые начинаются с Http: // а также https: // и помещал их в свою колонку.


1
2017-11-01 06:47





Я не являюсь пользователем OpenOffice calc, но с учетом других сложных ответы, я попытаюсь дать более простое решение (которое может даже работать).

Если я правильно понял, у вас есть таблица с одним столбцом где A1, A3, A5 и т. д. содержат текст со ссылками и где A2, A4, A6 и т. д. содержат простой текст.

Вы хотели бы создать новую таблицу:

A1 , A2  
A3 , A4  
A5 , A6  
etc.

Моя идея состоит в том, чтобы добавить столбец B1 с формулой =MOD(ROW();2), который вы распространяете на весь столбец B. Это даст вам:

A1 , 1
A2 , 0
A3 , 1
A4 , 0
etc.

Теперь сортируйте (или фильтруйте, если сортировка не работает по мере необходимости) в столбце B для объединения всех столбцов:

A1 , 1
A3 , 1
etc.
A2 , 0
A4 , 0
etc.

Теперь вы можете скопировать-вставить столбец A, где B = 1, в новый таблицу в столбце A, а затем скопировать-вставить в новую таблицу в столбце B столбец A из старой таблицы, где B = 0.

Это должно дать желаемый результат (надеюсь).


0
2017-11-03 17:10





Поскольку кажется, что он пропускает прямую функцию для извлечения гиперссылка из текста, это может быть быстрое решение для использования макрос что только существует. В нижней части ответа вы найдете код, определяющий функцию CELL_URL(SheetNumber,Row,Column) способный вернуть значение гиперссылки. После этого вы добавите этот макрос, вы сможете использовать функцию CELL_URL (ниже инструкций).

Простое решение. Следуя примеру вашего изображения, в ячейке B90 ты можешь написать =CELL_URL(1,ROW(A90),1), Это будет записываться в B90ссылка ячейки A90, иначе он ничего не напишет. В ячейке C90 вы можете просто написать =A90 иметь только текст (без гиперссылка). Таким образом, вы разделяете текст и гиперссылка, После того, как вы можете скопировать эти ячейки (B90 а также C90) и вставьте все столбцы B а также C, или во всех строках, которые вам нужны.
Обратите внимание A столбец исправлен в вашем примере, и для этого я написал =CELL_URL(...,1), Вы можете указать другое количество столбцов, если вам нужно, или вы можете вызвать эту функцию из другого лист,

Расширенное решение. Поскольку было неясно (для меня), если вы хотите просто разделить текст и гиперссылку четных ячеек (2,4,6 ...), или если вы хотите вместо этого увеличить нечетные ячейки (3,5, ... ), близкое к четным, я предлагаю следующую схему, которая даст вам B введите текст в C адрес и в D один URL. Одна строка будет заполнена в столбце B,C а также D, один будет пустым. (После того, как вы можете скопировать, вставить для значения в другой лист и переупорядочить, чтобы пропустить пустые строки, или вы можете добавить более сложное уравнение в качестве параметра функции непосредственно в другой лист).

Я полагаю, вы работаете над 1-й лист из известково, и текст находится в столбце A начиная с строки 2, так что в A2 есть первый случай. Если не сдвигать числа от A2, например до A20, от A3 до A21, от B2 до B20 ...

  • В ячейке B2 записывать =IF(D2="","",A2),
  • В ячейке C2 записывать =IF(D2="","",A3)
  • В ячейке D2 записывать =CELL_URL(1,ROW(A2),1)

Скопируйте три ячейки и вставьте их туда, где вам нужно.
Логика такова: если она способна извлечь ссылку (D заполняется), он записывает другие столбцы (B а также C).

Как добавить макрос

Идти к Tools->Macro->Organize Macros->Open/Libre Office Basic с листа, над которым вы работаете, создайте новый 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

Рекомендации: 

Работа над LibreOffice Версия: 4.2.8.2.


0
2017-11-03 10:28



Я всегда восхищаюсь тем, как люди могут downvote не давая никакого намека на причины ... :-) Как можно улучшить или исправить ответ без подсказок? - Hastur