SSブログ

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

 libreofficeCSV.png

libreofficeCSV1.png

libreofficeCSV2.png

取り敢えず今日はここまで

追記

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

 

 

libreofficeCSV3.png

libreofficeCSV4.png

 


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0


Linuxランキング

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。