* VB6からクリップボード経由でCalcへペーストする際に区切り文字等を設定するオプション画面を表示したくない [#fd2c4de1]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|TK|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(重要,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Calc 表計算,faq03,category)|
 |~投稿日|2011-06-29 09:06:36 (水)|
 |~OS|Windows XP|
 |~依存するページ||
 |~バージョン|#listbox3(3.3.0,faq03,version)|
 
 //////////バグ対策(以降マッチさせない)
 
 ** メッセージ [#c0dc4a38]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 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())~
 ~
 =======================================================================~
 ~
 
 
 ----
 ***マクロの記録 [#f4de89da]
 >ike@九州 (2011-06-29 10:28:56 (水))~
 ~
 手作業でマクロの記録をとれば可能かもしれませんね。~
 ~
 形式を選択して貼り付けだと各種パラメータが取得できそうな気がします。~
 その際、コマンドは ".uno:PasteSpecial" ですね~
 ~
 あくまでも、予想ですので…~
 出来ない場合はクリップボード経由以外でのデータ挿入になるのでしょうか~
 
 //
 ***無題 [#k32c30f4]
 >TK (2011-06-29 13:57:39 (水))~
 ~
 マクロの記録では区切り文字等の設定部分が記録されませんでした。~
 パラメータの設定方法だけでも分かればいろいろ試せるのですが・・・。~
 
 //
 ***クリップボードから表として取り出せるのは [#b5e0ca69]
 >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に貼り付ける方法もあると思いますが、一時ファイル方式のほうが容易でしょう。~
 
 //
 ***配列 [#a5141e60]
 >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
 
 //
 ***解決 [#g145c7a8]
 >TK (2011-07-07 16:35:03 (木))~
 ~
 結局コピーペーストは諦めて違う方法ですることにしました。~
 一時ファイルを使う方法と悩みましたがWannwannoさんご提案の~
 配列を使うことにしました。~
 みなさんご回答ありがとうございました。本当に助かりました。~
 また機会がありましたらよろしくお願いいたします。~
 
 //
 #article