条件付き書式を使用する以外に、スプレッドシートを読みやすくするために、LibreOffice Calc(またはOpenOffice Calc)で1行おきに強調表示する方法はありますか?
LibreOfficeには重大なバグがあり、一般的な条件付き書式設定手法ISEVEN(ROW())
を使用してこのタスクを試行し、行をコピーまたは移動すると、複数のエラーが発生します。この問題に関するLibreOfficeのバグレポートを見つけましたが、バグはまだ存在しています。
私は2004年にStarBasicでマクロを作成しました。このマクロは、使用済みのセルに交互の色を適用します(現在も使用しているLO 5.2.2.2で動作します)。色の定義を変更したい場合は、ソースが十分に文書化されていて、色の定義を見つけられることを願っています;-)
コードをBasicコードのSTANDARDライブラリ内のモジュールにコピーして、すべてのCALCドキュメントで使用できるようにします。 HTH
'Copyright (c) 2004, 2016 Winfried Rohr, re-Solutions Software Test Engineering
'This program is free software; you can redistribute it and/or modify it under
'the terms of the GNU General Public License as published by the Free Software
'Foundation; either version 2 of the License, or (at your option) any later
'version.
'This program is distributed in the hope that it will be useful, but WITHOUT ANY
'WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
'A PARTICULAR PURPOSE. See the GNU General Public License for more details.
'You should have received a copy of the GNU General Public License along with
'this program; if not, write to the Free Software Foundation, Inc., 59 Temple
'Place, Suite 330, Boston, MA 02111-1307 USA
' ========================================================================
Dim oDoc
Dim lRows as Long
Dim lCols as Long
Dim lStartRow as Long
Dim i as Long
Dim lEvenColor, lOddColor as Long
Dim sModulName, sModulSubName, sModulVersion
' -------------------------------------------------------------------
Sub colorCalcTableRowsEnglish ' manual extension 2006-03-24
sModulName = "wr CALC Modul"
sModulSubName = "colorCalcTableRows"
sModulVersion = "20040810"
oDoc = ThisComponent
If Not oDoc.supportsService(_
"com.Sun.star.sheet.SpreadsheetDocument" ) Then
MsgBox _
"Macro not called from CALC Document." & CHR(10) _
& CHR(10) & "Explanation:" _
& CHR(10) & "This Macro applies alternating, pre-definied" _
& CHR(10) & "background colors to the rows of the used cell"_
& CHR(10) & "range in CALC Documents and will only work there."_
& CHR(10) & CHR(10) _
& "Macro " & sModulSubName & " will terminate now." _
, 48 , sModulName & " " & sModulVersion
Exit Sub
End If
' RGB: Red/Green/Blue portion of color
' values could range from 0 to 255
' see Tools > OpenOffice.org > Colors for values
' 0,0,0: Black
' 255,255,255: White
'
' Even/Odd correspond to ROW number
lEvenColor = RGB(255,200,200) ' kinda red
lOddColor =RGB(188,188,188) ' grey
if oDoc.Sheets.Count > 1 then
' more than 1 sheet, ask if macro should work on all sheets
sQuestion = _
"Applying alternating background colors to used cell range."_
& CHR(10) _
& CHR(10) & "Should all sheets be affected?" _
& CHR(10) & "YES: apply on all sheets" _
& CHR(10) & "No: apply to actual sheet only"
iButton = _
MsgBox(sQuestion ,35, sModulSubName & " - " & sModulVersion)
Select Case iButton
Case 2 ' cancel
exit sub
Case 6 ' yes = all sheets
PROC_AllSheets
Case 7 ' no = actual sheet only
actSheet = oDoc.currentController.ActiveSheet
PROC_colorSheetRow(actSheet)
End Select
else
' only one sheet present
actSheet = oDoc.currentController.ActiveSheet
PROC_colorSheetRow(actSheet)
end if
End Sub
' -------------------------------------------------------------------
Sub PROC_allSheets
enumS = oDoc.getSheets.createEnumeration
While enumS.hasMoreElements
actSheet = enumS.nextElement()
PROC_colorSheetRow(actSheet)
Wend
End Sub
' -------------------------------------------------------------------
Sub PROC_colorSheetRow(actSheet)
lStartRow = 0
' watch out on first 4 rows if they might be formatted as heading
for i = 0 to 3
' don't touch rows with heading style
oCell = actSheet.getCellByPosition(0,i)
if INSTR(oCell.CellStyle , "Heading") > 0 then
' style heading found: increase start row
lStartRow = i + 1
end if
next i
' obtain last cell in sheet
vLastPos = FUNC_LastUsedCell(actSheet)
lRows = vLastPos(0)
lCols = vLastPos(1)
' if no more cell used - then nothing
if lRows = 0 AND lCols = 0 then
exit sub
end if
' not more than headings
if lStartRow > lRows then
exit sub
end if
' set range to one color (performance issue)
actRange = actSheet.getCellRangeByPosition(0,lStartRow,lCols,lRows)
actRange.setPropertyValue("CellBackColor", lEvenColor)
' now set color to Odd (number) rows (are even indexes)
for i = lStartRow to lRows
' determine range
actRange = actSheet.getCellRangeByPosition(0,i,lCols,i)
' only every second row
if((i MOD 2) = 0) then
' even index is odd row number
actRange.setPropertyValue("CellBackColor", lOddColor)
end if
next i
End Sub
' -------------------------------------------------------------------
' function uses variant array to return more than one value
Function FUNC_LastUsedCell(oSheet as Object) as Variant
oCursor = oSheet.createCursor()
oCursor.gotoEndOfUsedArea(TRUE)
oEndAdr = oCursor.getRangeAddress
Dim vLastUsedCell(1) as Variant
vLastUsedCell(0) = oEndAdr.EndRow
vLastUsedCell(1) = oEndAdr.EndColumn
FUNC_LastUsedCell = vLastUsedCell()
End Function
メニューから:Format→AutoFormat Styles ..。独自に追加できます。
もう1つのオプションは、マクロを使用することです(ngulamの回答のように)。
Color2Rows は、ツールバーにボタンを追加する拡張機能で、3つのカラーテーブル(頭の色と他の行の2つの交互の色)をすばやく表示できます。ソース ask.libreoffice.org 、バージョン:5.1.4.2でまだ動作することをテスト
同じサイトに テーブルオートフォーマットを適用するボタンを作成するにはどうすればよいですか? というタイトルの別の投稿がありますが、それが機能するように設定する方法がわかりません。
最も簡単な方法は、直接フォーマットをコピーして貼り付けることです。やや面倒ですが、それほど時間はかかりません。私は、うまく機能しなかったいくつかの自動ソリューションを試しました。
3行パターンの手順は次のとおりです。 2つの行は似ています。まず、最初の3行を手動で選択して強調表示します。
次に、最初の3行を選択してコピーします。 4行目を右クリックして、Paste Special
を選択します。 Formats
のみを貼り付けるように指定します。
これで、6行がフォーマットされました。 6行をコピーし、さらに6行を貼り付けて、12行が強調表示されるようにします。次に、すべての行が強調表示されるまで、24行、48行、96行など、指数関数的に2倍にします。