答え1
重要なのは、OpenOffice.org Calc のテキストインポート機能を使用することです。
使用されている正確な書式を確認するためのブックマークのコピーがない場合は、特定の書式に合わせて調整する必要がある可能性のある一般的な手順を示します。
この操作を実行する最も簡単な方法は、ブックマークのリストをテキスト エディターで開き、ファイル全体をクリップボードにコピーすることです。
次に、OpenOffice.org Calc で新しいスプレッドシートを作成します。
OpenOffice.orgでは、Ctrl+Shift+V実行する貼り付け形式アクション。クリップボードを書式なしテキストとしてインポートすることを指定すると、テキストインポートダイアログボックスが表示されます。
そのダイアログボックスで、区切られたラジオボタンを選択します。ソースデータの正確なフォーマットに応じて、以下のチェックボックスを調整します。区切られたリンクURLとテキストを適切に分離します。問題がある場合は、リンクURLの右側にあるテキストフィールドに別の文字を入力してください。他のチェックボックスをオンにします。スラッシュ(/)をそのテキストフィールドに入力すると、http://そしてhttps://それらを独自の列に配置します。
答え2
直接抽出する機能が欠けているように見えるので、ハイパーリンクテキストから、大きい存在するだけです。回答の下部に、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 を表示する次のスキーマを提案します。列の 1 行は入力され、B
1行は空白になります。(その後、値をコピーして別のセルに貼り付けることができます。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)
3 つのセルをコピーして、必要な場所に貼り付けます。
ロジックは次のとおりです。リンクを抽出できる場合 ( がD
入力されている)、他の列 (B
およびC
) が書き込まれます。
マクロを追加する方法
Tools->Macro->Organize Macros->Open/Libre Office Basic
作業中のシートから移動し、新しいマクロ。好きな名前を付けてください。新しいウィンドウが開きます。コードをコピーして貼り付けます。
マクロ
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
参考文献:
- 内省的な細胞機能、OpenOffice フォーラムにて。
- 別の答えStackOverflow で。
- さらに遠く読むExpert Exchange で。
- さらに遠くインスピレーションUbuntu フォーラムから独自のマクロの作成を開始します。
取りかかっているリブレオフィスバージョン: 4.2.8.2。
答え3
私は OpenOffice calc のユーザーではありませんが、他の複雑な回答を考慮して、より簡単な解決策 (うまくいく可能性もあります) を提供したいと思います。
私が正しく理解していれば、現在、1 列のスプレッドシートがあり、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.
これで、B=1 の A 列を新しいスプレッドシートの A 列にコピーして貼り付け、次に、B=0 の古いスプレッドシートの A 列を新しいスプレッドシートの B 列にコピーして貼り付けることができます。
これで望み通りの結果が得られそうです(そう願っています)。