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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


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


VB6からクリップボード経由でCalcへペーストする際に区切り文字等を設定するオプション画面を表示したくない

ページOpenOffice.org FAQの登録ページ
投稿者TK
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2011-06-29 09:06:36 (水)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

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

VisualBasic6、Spread6(GrapeCity)でシステム開発を行っています。
VB6からスプレッドのデータをクリップボード経由でCalcへペーストしています。
ペースト処理はうまく実行されているのですが、ペースト時に区切り文字等を設定するオプション画面が表示されてしまいます。
できればオプション画面は表示せずに区切り文字にタブを設定して処理を進めたいです。
そのようなことは可能でしょうか?よろしくお願いいたします。

以下がソースになります。

=======================================================================
Dim aobjServiceManager As Object
Dim pobjDispatcher As Object
Dim pobjDesktop As Object
Dim aobjSheet As Object
Dim pobjArgs(0) As Object
Dim pobjDummy() As Object

'Oooオブジェクト作成
Set aobjServiceManager = CreateObject("com.sun.star.ServiceManager")
Set pobjDesktop = aobjServiceManager.createInstance("com.sun.star.frame.Desktop")
Set pobjArgs(0) = aobjServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
pobjArgs(0).Name = "Hidden"
pobjArgs(0).Value = True
Set aobjDocument = pobjDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, pobjArgs)

'新規にシートを追加する
Set aobjSheet = aobjDocument.createInstance("com.sun.star.sheet.Spreadsheet")
Call aobjDocument.Sheets.insertByName("シート1", aobjSheet)

'クリップボードへデータをコピー
Form1.Spread.ClipboardCopy

'Calcへデータをペースト
aobjDocument.CurrentController.ActiveSheet = aobjSheet
Call pobjDispatcher.executeDispatch(aobjDocument.CurrentController.Frame, ".uno:Paste", "", 0, pobjDummy())

=======================================================================


マクロの記録

ike@九州 (2011-06-29 10:28:56 (水))

手作業でマクロの記録をとれば可能かもしれませんね。

形式を選択して貼り付けだと各種パラメータが取得できそうな気がします。
その際、コマンドは ".uno:PasteSpecial" ですね

あくまでも、予想ですので…
出来ない場合はクリップボード経由以外でのデータ挿入になるのでしょうか

無題

TK (2011-06-29 13:57:39 (水))

マクロの記録では区切り文字等の設定部分が記録されませんでした。
パラメータの設定方法だけでも分かればいろいろ試せるのですが・・・。

クリップボードから表として取り出せるのは

M.Kamataki (2011-06-30 10:48:30 (木))

クリップボードの内容がテキストだと難しいですね。Calcに直接クリップボードからの貼り付けで表として認識できるのは「HTML形式の表」と「RTF形式の表」です。CSVは残念ながら想定されていないようです。そしてテキストだと例のオプション画面が表示されてしまいます。以下を参考にしてください。

http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FGeneric%2FXTransferable

実際にも、WriterからCalcへの表の貼り付けで確認できると思います。

したがってike@九州さんの回答のように、クリップボード経由以外でのデータ挿入、たとえば一時ファイルを使う方法などが簡単ではないでしょうか。

なお、Writer上で表に加工して、Calcに貼り付ける方法もあると思いますが、一時ファイル方式のほうが容易でしょう。

配列

Wannwanno (2011-06-30 22:39:34 (木))

Variant/String配列で貼り付けるのが解りやすいかなぁとおもいますです。
Spread6が無いのでダミー配列です。

Private Sub Command1_Click()
    Dim aobjServiceManager As Object
    Dim pobjDispatcher As Object
    Dim pobjDesktop As Object
    Dim aobjDocument As Object
    Dim aobjSheet As Object
    Dim pobjArgs(0) As Object
    Dim aData As Variant

    'Oooオブジェクト作成
    Set aobjServiceManager = CreateObject("com.sun.star.ServiceManager")
    Set pobjDesktop = aobjServiceManager.createInstance("com.sun.star.frame.Desktop")
    Set pobjArgs(0) = aobjServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    pobjArgs(0).Name = "Hidden"
    pobjArgs(0).Value = False
    Set aobjDocument = pobjDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, pobjArgs)

    '新規にシートを追加する
    Set aobjSheet = aobjDocument.createInstance("com.sun.star.sheet.Spreadsheet")
    Call aobjDocument.Sheets.insertByName("シート1", aobjSheet)

    'Calcへデータをペースト
    aobjDocument.CurrentController.ActiveSheet = aobjSheet
    aData = getSampleArray
    Call pasteArray(aobjSheet, aData)
End Sub

Private Function getSampleArray() As Variant
    Dim aData(2, 1) As Variant

    aData(0, 0) = "A"
    aData(1, 0) = "B"
    aData(2, 0) = "C"
    aData(0, 1) = "D"
    aData(1, 1) = "E"
    aData(2, 1) = "F"
    getSampleArray = aData
End Function

Public Sub pasteArray(oRange As Object, aData As Variant)
    Dim oCursor As Object

    If Not oRange.supportsService("com.sun.star.sheet.SheetCellRange") Then Exit Sub
    Set oCursor = oRange.Spreadsheet.createCursorByRange(oRange)
    Call oCursor.collapseToSize(UBound(aData, 1) + 1, UBound(aData, 2) + 1)
    Call oCursor.setFormulaArray(aData)
End Sub

解決

TK (2011-07-07 16:35:03 (木))

結局コピーペーストは諦めて違う方法ですることにしました。
一時ファイルを使う方法と悩みましたがWannwannoさんご提案の
配列を使うことにしました。
みなさんご回答ありがとうございました。本当に助かりました。
また機会がありましたらよろしくお願いいたします。

お名前:
題名: