「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2050
現在:3


OOo Basic から Excel を操作したい

ページOpenOffice.org FAQの登録ページ
投稿者ike@九州
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-12-17 11:44:28 (木)
OSWindows
依存するページhttp://hermione.s41.xrea.com/pukiwiki/index.php?OOobbs2%2F196
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

Excel、OOo がインストールされている PC にて OOoBasic マクロを使用し Excel を操作する事は可能でしょうか?

(はにゃ?さんのサイトから引用させていただきました)


限定的ですが可能です

ike@九州 (2009-12-17 11:51:51 (木))

手作業で試行して以下、使いそうなものをピックアップしてみました。
コメントアウト行も動作確認してます

Sub ExcelTest()
 xlExcel = CreateObject("Excel.Application")
 xlExcel.visible = True
 
 '指定ワークブックを開く
 'xlBook = xlExcel.Workbooks.Open("E:\hoge.xls")
 '新規にワークブックを開く(Book1.xls になる)
 xlBook = xlExcel.Workbooks.Add
 'エクセルを最大化、 最小化 -4140
 'xlExcel.Application.WindowState = -4137
 
 'ワ−クシートコレクション取得
 xlSheets = xlBook.Application.WorkSheets
 
 'シート名からシート取得
 xlSheet = GetxlSheetByName(xlSheets,"Sheet1")
 If IsObject(xlSheet) then
   xlSheet.Range("A1").Value2 = "シート名から取得成功"
 End IF
 
 'インデクス1番目のシートを取得
 xlSheet = GetxlSheetByIndex(xlSheets,1)
 If IsObject(xlSheet) then
   xlSheet.Cells.Item(2,1).Value2 = "インデックスから取得成功"
 End IF
 
 'アクティブシート取得
 'xlActiveSheet = xlBook.Application.ActiveSheet  
 
 'セルに文字書き込み Item(Row,Col) 使用、Cells(Row,Col)は使用不可
 'xlSheet.Cells.Item(10,2).Value2 = "成功"
 'セルに数値書き込み
 'xlSheet.Range("A1").Value2 = 456
 'セルに数式書き込み
 'xlSheet.Range("A9").Formula = "=A1"
 'セルの内容削除
 'xlSheet.Range("A1").ClearContents  
 
 'ExcelBook 内 testマクロを実行(Excelでのセキュリティ設定は無視される)
 'xlBook.Application.Run "hoge.xls!test"
 
 'アクティブセルの書式を表示
 'Msgbox xlBook.Application.ActiveCell.NumberFormat
 
 'シートを新規挿入
 'newSheet = xlSheets.add
 'シートの名前変更
 'newSheet.name = "NewSheet"
 
 'ワークブックを上書き保存
 'xlBook.Save
 '名前をつけて保存
 'xlBook.SaveAs("E:\hoge.xls")
 'ワークブックを保存しないで閉じる、上書き保存して閉じる(True)
 'xlBook.Close(False)
 'Excelの終了
 'xlExcel.Quit
End Sub

'シート名から取得用ユーザー関数
Function GetxlSheetByName(oSheets As Object,sSheetName As String) As Variant
 IF oSheets.count = 0 then Exit Function
 For n = 1 to oSheets.count
  IF oSheets.Item(n).name = sSheetName Then
    GetxlSheetByName = oSheets.Item(n)
    Exit Function
  End IF     
 Next n
End Function

'インデックスから取得用ユーザー関数
Function GetxlSheetByIndex(oSheets As Object,n As Integer) As Variant
 IF oSheets.count = 0 then Exit Function
 IF (n > 0) and (n <= oSheets.count) Then GetxlSheetByIndex = oSheets.Item(n)
End Function


Excelファイル内のマクロは
Excelのオプション>セキュリティ設定(実行不可) を無視して実行されました。
これって問題あるような気もしますね

情報、ご意見ありましたら よろしくお願い致します。

無題

tani (2009-12-18 13:47:48 (金))

>Excelファイル内のマクロは
>Excelのオプション>セキュリティ設定(実行不可) を無視して実行されました。
>これって問題あるような気もしますね

OOoからはExcelアプリケーションを操作してるだけなので、問題があるとしてもExcel側の問題だとは思います。例えばセキュリティの設定の右のタブの「信頼できる発行元」の下の方にあるチェックボックスにチェックが入っているせいかもしれません。試していないので外してるかもしれませんが。

Re:無題

ike@九州 (2009-12-18 15:51:00 (金))

>Excel側の問題

私もそんな感じがしてます。

この試行時に Office2003 のセキュリティレベルを最高にチェック &「信頼できる発行元」タブのチェックは全て外し、証明書も全て削除して行っていたのですが
もう一度 tani さんのご指摘により「信頼できる発行元」を確認したら SunMicrosystems 復活してました orz

で、もう一度削除して再度開いたら復活

削除できないんですね。Vista Ultimate

ちなみに Excel のパスワード暗号化設定は有効でした

OOo のインストール時に全てのユーザーが関連しているのでしょうか
(証明書レジストリの反映場所など)

vba、vbs からの OOo 操作は tani さんのコードで十分確認できていますが、OOoBasic から MSOffice 全般の操作も可能な気がしてきました。(2007 も?)
(OOo で互換性の低い部分を埋める場合の自動化等)

コードは新しい発見があれば加筆される可能性があります
皆様ご了承ください。(不具合有りの可能性も十分あります)

いったん完了にします

M.Kamataki (2009-12-29 10:14:11 (火))

ike@九州さん、ありがとうございます。いったん完了にしますが、情報があれば書き込み可です。

お名前:
題名: