XLOPEN

ExcelまたはOOoのCalcを起動する関数です。第一引数に読み込むファイル名(新規の場合は省略)、第二引数に起動フラグ、第三引数以降にパラメータ(パスワードや読み込み専用)を指定します。

構文
戻値 = XLOPEN( [ファイル名, 起動フラグ, パラメータ, パラメータ, ...] )
引数
ファイル名
読み込むファイル名、 新規の場合は省略
起動フラグ
0(デフォルト)
起動済みのExcelがある場合はそれを、なければ新規にExcelを起動
XL_NEW, True(1)
既にExcelが存在しても 新規にExcelを起動
XL_BOOK
ExcelにてBOOK単位で制御したい場合(BOOKのオブジェクトを返す)
XL_OOOC
OpenOffice.org / LibreOffice の表計算(Calc)の起動
パラメータ
ファイルオープンに対し追加パラメータがある場合に("password:=1234", "ReadOnly:=True" 等)
Excelのパラメータ
UpdateLinks
リンク更新方法(0:外部参照,リモート参照とも未更新、1:外部更新,リモート未更新、2:リモート更新,外部未更新、3:ともに更新)
ReadOnly
読み取り専用で開く場合に True を指定
Format
テキストファイル時の区切り文字(1:タブ、2:カンマ、3:スペース、4:セミコロン)
Password
パスワード保護されたブックを開くのに必要なパスワード
WriteResPassword
書き込み保護されたブックに書き込むのに必要なパスワード
IgnoreReadOnly
「読み取り専用を推奨する」のダイアログを抑止したい場合に True を指定
戻値
ExcelのCOMオブジェクト
(XL_OOOC指定時は OOoのCalc のオブジェクト)

プログラム実行例

Excelを起動

DIM Excel = XLOPEN() //XLCLOSE(Excel, TRUE)

LibreOffice Calcを起動

DIM Excel = XLOPEN(, XL_OOOC) //XLCLOSE(Excel, TRUE)

シートを追加

DIM Excel = XLOPEN() FOR m = 1 TO 12 XLSHEET(Excel, m + "月") NEXT //XLCLOSE(Excel, TRUE)

Excelでセルに値を代入

DIM Excel = XLOPEN() FOR row = 1 TO 5 FOR col = 1 TO 5 XLSETDATA(Excel, row + ", " + col, row, col) NEXT NEXT //XLCLOSE(Excel, TRUE)

セルに配列の値を代入

配列の場合、セル位置は必須。

DIM Excel = XLOPEN() DIM arr[2][1] = 12, 45, 78, 2417, 51, 478 XLSETDATA(Excel, arr, "A1") //XLCLOSE(Excel, TRUE)

指定したシートをアクティブにする

DIM Excel = XLOPEN() XLACTIVATE(Excel, "Sheet2") //XLCLOSE(Excel, TRUE)

指定したセルから値を取得します

DIM Excel = XLOPEN() XLSETDATA(Excel, RANDOM(), "A1") PRINT XLGETDATA(Excel, "A1") //XLCLOSE(Excel, TRUE)

楽天銀行定期預金の金利をExcelに保存

DIM IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("https://rbweb.rakuten-bank.co.jp/REF/main/fis/BasicTimeDepositInterestRate.html?PageID=BasicTimeDepositInterestRatePresentationLogicBean") BusyWait(IE) DIM elements = IE.document.getElementsByTagName("table") DIM element = elements.Item(0) DIM arr[-1][-1] getTableData(element, arr) IE.Quit DIM Excel = XLOPEN() XLSETDATA(Excel, arr, "A1") DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") DIM path = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "楽天銀行定期預金金利.xlsx")) XLCLOSE(Excel, path) ////////////////////////////////////////////////// // 【引数】 // IE : IEオブジェクト // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE BusyWait(IE) TRY SLEEP(0.500) REPEAT SLEEP(0.010) UNTIL !IE.Busy AND IE.readyState = 4 EXCEPT SLEEP(5.000) ENDTRY FEND ////////////////////////////////////////////////// // 【引数】 // table : tableエレメント // arr : 取得したデータを格納する配列(参照引数) // 【戻値】 // ////////////////////////////////////////////////// PROCEDURE getTableData(table, Var arr[][]) // 何行何列のテーブルか求める rowMax = table.rows.length - 1 colMax = 0 FOR row = 0 TO table.rows.length - 1 IFB table.rows(row).cells.length - 1 > colMax THEN colMax = table.rows(row).cells.length - 1 ENDIF NEXT // テーブルの値を格納するための2次元配列を作成 DIM arr[rowMax][colMax] // テーブルの値を格納 FOR row = 0 TO table.rows.length - 1 FOR col = 0 TO table.rows(row).cells.length - 1 n = 0 WHILE arr[row][col + n] <> "" n = n + 1 WEND arr[row][col + n] = table.rows(row).cells(col).innerText // rowSpan(行結合)とcolSpan(列結合)の両方があれば IFB table.rows(row).cells(col).rowSpan > 1 AND table.rows(row).cells(col).colSpan > 1 THEN rmax = table.rows(row).cells(col).rowSpan - 1 cmax = table.rows(row).cells(col).colSpan - 1 FOR r = 1 TO rmax FOR c = 1 TO cmax arr[row + r][col + c] = "←" NEXT NEXT ENDIF // rowSpan(行結合)があれば結合セルに「↑」を代入 IFB table.rows(row).cells(col).rowSpan > 1 THEN n = table.rows(row).cells(col).rowSpan - 1 WHILE n arr[row + n][col] = "↑" n = n - 1 WEND ENDIF // colSpan(列結合)があれば結合セルに「←」を代入 IFB table.rows(row).cells(col).colSpan > 1 THEN n = table.rows(row).cells(col).colSpan - 1 WHILE n arr[row][col + n] = "←" n = n - 1 WEND ENDIF NEXT NEXT FEND ////////////////////////////////////////////////// // 【引数】 // path : ファイルのパス // 【戻値】 // 重複しないファイル名 ////////////////////////////////////////////////// FUNCTION uniqueFilename(path) DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") IFB FSO.FileExists(path) THEN fol = FSO.GetParentFolderName(path) filename = FSO.GetBaseName(path) extension = FSO.GetExtensionName(path) i = 2 WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension)) i = i + 1 WEND RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension) ELSE RESULT = path ENDIF FEND

この記事は役に立ちましたか?
役に立った 役に立たなかった