Calc Baisc 選択範囲をカンマ区切り(csv)で保存する実験 [LibreOffice Calc Basic]
Calc Baisc 選択範囲をカンマ区切り(csv)で保存する実験
選択範囲の数値、文字列を、”文字列、数値”, ”文字列、数値”・・・・最後に改行LFを追加した形式で保存する実験
Sub csvExport()
'選択範囲をCSV,カンマ区切りファイルと出力するテスト
'改行はLF chr(34)
'セル内容は全て文字列として扱う
Dim sRow,sCol,cCount,rCount As Long
Dim i,j As Long
Dim d As String
Dim txtFile As String
'選択範囲を調べる
'スタート位置 左上列 値は数値
sRow=ThisComponent.CurrentSelection.RangeAddress.StartRow
'スタート位置 左上行 値は数値
sCol=ThisComponent.CurrentSelection.RangeAddress.StartColumn
'選択範囲の列数
cCount=ThisComponent.CurrentController.Selection.columns.count
'選択範囲の行数
rCount=ThisComponent.CurrentController.Selection.Rows.count
'選択範囲からセルの値をdに読み込む
For i=sRow To sRow+rCount-1
'列カウント初期値
roopCount=0
'列 スタート位置 から +列個数 まで
For j=sCol To sCol+cCount-1
'セルの内容を取得
d=str(ThisComponent.CurrentController.Activesheet.getCellByPosition(j,i).string)
'もし1列めなら カンマをつけない
If roopCount=0 Then
txtFile=txtFile+chr(34)+d+chr(34)
Else
' 1列目でなければカンマをつける
txtFile=txtFile+","+chr(34)+d+chr(34)
End If
'列カウント
roopCount=roopCount+1
Next j
'次の行になる前に改行LFを追加
txtfile=txtfile + chr(10)
Next i
msgbox txtFile
'ファイルの保存
'ファイルのオープン
FileName = "/home/telstar/ドキュメント/LibreOffice/Calc/xxx.csv"
Open FileName For Output As #1
'レコードの出力
Print #1, txtFile
'ファイルのクローズ
Close #1
msgbox "終了"
End Sub
取り敢えず今日はここまで
追記
roopCountは変数なのでスペルミスは関係ないのですが、正しくはloopCount
結合素子? プラス+ と アンド&では結果が違う場合がある。
数値 + 文字列は 数値
数値 & 文字列は 数値+文字列
str関数で数値を文字列に変換しても、先頭に符号分のスペースが加算される?
Trim関数で、空白を取り除く
d=Trim(d)
左側だけなら、LTrim() 右側だけなら、RTrim() 全体ならTrim()
Sub csvExport2()
'選択範囲をCSV,カンマ区切りファイルと出力するテスト
'改行はLF chr(34)
'セル内容は全て文字列として扱う
Dim sRow,sCol,cCount,rCount As Long
Dim i,j As Long
Dim d As String
Dim txtFile As String
'選択範囲を調べる
'スタート位置 左上列 値は数値
sRow=ThisComponent.CurrentSelection.RangeAddress.StartRow
'スタート位置 左上行 値は数値
sCol=ThisComponent.CurrentSelection.RangeAddress.StartColumn
'選択範囲の列数
cCount=ThisComponent.CurrentController.Selection.columns.count
'選択範囲の行数
rCount=ThisComponent.CurrentController.Selection.Rows.count
'選択範囲からセルの値をdに読み込む
For i=sRow To sRow+rCount-1
'列カウント初期値
loopCount=0
'列 スタート位置 から +列個数 まで
For j=sCol To sCol+cCount-1
'セルの内容を取得
d=str(ThisComponent.CurrentController.Activesheet.getCellByPosition(j,i).string)
'数値の場合符号分が先頭に追加されるようなので、削除する。
d=LTrim(d)
'もし1列めなら カンマをつけない
If loopCount=0 Then
txtFile=txtFile & d
Else
' 1列目でなければカンマをつける
txtFile=txtFile & "," & d
End If
'列カウント
loopCount=loopCount+1
Next j
'次の行になる前に改行LFを追加
txtfile=txtfile & chr(10)
Next i
msgbox txtFile
'ファイルの保存
'ファイルのオープン
FileName = "/home/telstar/ドキュメント/LibreOffice/Calc/xxx.csv"
Open FileName For Output As #1
'レコードの出力
Print #1, txtFile
'ファイルのクローズ
Close #1
msgbox "終了"
End Sub
コメント 0