7章: OpenOfficeBasic_6(セルデータのテキストファイルへの出力と入力)

    作成2016.11.14

  1. OpenOfficeBasic_6(セルデータのテキストファイルへの出力と入力)の概要
    (1)セルデータをタブ区切りの文字列でテキストファイルに出力します。
    (2)タブ区切りのテキストファイルの内容をシートにコピーします。


  2. OpenOfficeBasic_6(getCellByPosition)作成方法
    (1) 「OpenOfficeBasic_2.ods」ファイルを複製します。
    (2)ファイル名を「OpenOfficeBasic_6.ods」に変更します。
    (3)「OpenOfficeBasic_6.ods」ファイルをダブルクリックで起動します。
    (4)OpenOffice-セキュリティ警告が表示されるので「マクロの有効化」ボタンを押します。



    (5)メニューの「ツール」_「マクロ」_「マクロの管理」_「OpenOffice Basic」を選択します。
    (6)OpenOffice Basic マクロダイアログで「 OpenOfficeBasic_6.ods」_「 Stndard 」_「Module1」_「Main」 を選択します。
    (7)「編集」ボタンを押します。



    (8)プログラムコードを以下のように変更します。
    Sub Main
      sh2 =ThisComponent.getSheets.getByName ("Sheet2")
      sh3 =ThisComponent.getSheets.getByName ("Sheet3")
      nx=7 '列数
      ny=15 '行数
      
      aFile =ThisWorkbookPath+ "\data.txt"
      iNumber = Freefile
      Open aFile For Output As #iNumber
      Dim LineStr As String
      
      ThisComponent.addActionLock()
      Dim celldata(ny-1,nx-1) As String
      For j = 0 To ny- 1
        LineStr=""
        For i = 0 To nx- 1
          celldata(j,i)=sh2.getCellByPosition(i, j).String
           LineStr= LineStr+celldata(j,i)+Chr(9)
        next i
        Print #iNumber,LineStr
      next j
      Close #iNumber
      
      Dim celldata2(ny-1,nx-1) As String
      
      iNumber = Freefile
      Open aFile For Input As iNumber
      j=0
      While not eof(iNumber)
        Line Input #iNumber, sLine
        If sLine <>"" then
          SplitStr = Split(sLine, Chr(9))
           For i = 0 To nx- 1
           celldata2(j,i)=SplitStr(i)
           next i
           j=j+1
        end if
      Wend
      Close #iNumber
      sh3.getCellRangeByPosition(0, 0,nx-1, ny - 1).setDataArray(celldata2)
      ThisComponent.removeActionLock()
    End Sub
    
    ' このブックの存在するフォルダをフルパスで返す。
    ' Excel VBAでの ThisWorkbook.Pathに相当
    Function ThisWorkbookPath
      windows_filepath = ConvertFromUrl(ThisComponent.URL )
      vntURL = Split(windows_filepath, "\")
      i = UBound(vntURL)
      ReDim Preserve vntURL(i - 1)
      windows_dir_path = Join(vntURL, "\")
      ThisWorkbookPath = windows_dir_path
    End Function
    



    (9)「BASIC プログラムの実行」ボタンを押します。
    (10)ワークブックの同一フォルダー内に「data.txt」が作成されます。



    (11)data.txt内に以下の文字列が書き込まれています。
    近接露光入力条件表							
    No	記号	値	単位	説明			
    1	WL	0.4047	μm	波長			
    2	b	50	μm	マスク面とスクリーン面のギャップ量			
    3	INA	0.05	rad	照明の広がり角度(照明NA)			
    4	X1	-20	μm	光強度計算領域のX方向min値			
    5	X2	20	μm	光強度計算領域のX方向max値			
    6	Nx	40	整数	光強度計算領域のX方向分割数(最大140まで)			
    7	Y1	-20	μm	光強度計算領域のY方向min値			
    8	Y2	20	μm	光強度計算領域のY方向max値			
    9	Ny	40	整数	光強度計算領域のY方向分割数(最大140まで)			
    10	Np	1	整数	矩形パターン数を設定(整数最大1000まで)			
    11	MU	0.1	無次元	3次元グラフの表示単位			
    No	U0r[i]	U0i[i]	ξ1[i]	ξ2[i]	η1[i]	η2[i]	
    0	1	0	-4	4	-15	15
    

    (12) data.txtから読み込まれたデータは「Sheet3」にコピーされます。





  3. プログラムコードの保存
    (1)メニューの「ファイル」_「保存」を選択します。
    (2)OpenOfficeCalcを終了します。


  4. プログラムコードの解説
    (1) sh2 =ThisComponent.getSheets.getByName (“Sheet2”)で“Sheet2”を指定します。
    (2) sh3 =ThisComponent.getSheets.getByName (“Sheet3”)で“Sheet3”を指定します。
    (3) nx=7 で列数、 ny=15 で行数を指定します。
    (4)このブックの存在するフォルダ内に“data.txt”ファイルを作成します。
    (5) Dim celldata(ny-1,nx-1) As Stringで2次元配列の大きさを決定します。
    (6) celldata(j,i)=sh2.getCellByPosition(i, j).Stringでセルデータを2次元配列に設定します。
    (7) LineStr= LineStr+celldata(j,i)+Chr(9)でファイル出力するタブ区切りの文字列にします。
    (8) Print #iNumber,LineStrで1行分のファイル出力を行います。
    (9)ThisComponent.addActionLock()でアクションロックします。
    (10) Dim celldata2(ny-1,nx-1) As Stringで読み込み用の2次元配列の大きさを決定します。
    (11) Line Input #iNumber, sLineで1行分を読み込みます。
    (12) SplitStr = Split(sLine, Chr(9))でタブ区切りします。
    (13) celldata2(j,i)=SplitStr(i)で読み込み用の2次元配列に設定します。
    (14) sh3.getCellRangeByPosition(0, 0,nx-1, ny - 1).setDataArray(celldata2)で“Shee3”のセルに2次元配列でデータをコピーします。
    (15) ThisComponent.removeActionLock()でアクションロックを解除します。


  5. OpenOfficeBasic_6.odsのダウンロード
      OpenOfficeBasic_6.odsは以下からダウンロードできます。
    OpenOfficeBasic_6.odsをダウンロードする。




8章: EXCEL(.xls)ファイルからOpenOffice(.ods)ファイルへの変更(1-1)に行く。

トップページに戻る。