Вставка CSV данных из буфера обмена без панели настройки?

Автор Hasim, 16 июля 2013, 13:23

0 Пользователи и 1 гость просматривают эту тему.

Hasim

Заинтересовал этот вопрос, заданный пользователем на одном форуме (http://libreoffice.3nx.ru/viewtopic.php?t=90).
ЦитироватьПри вставке из кармана (Clipboard) в Calc'е (Open office) всплывает форма для детализации вставки.
(см. рис.)
Как ее не показать юзеру?
...
Я вообще получаю форму детализации при вставке из буфера.
Буфер заполняю в VFP, он простой типа CSV (данные с разделителями).
При этом выделена ячейка на листе, начиная с которой данные должны писаться.
Цитироватьdispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
А импортом мне удается писать только на чистый лист с ячейки A1. Мне не удается по-другому.
Вставка их буфера во второй версии работала без вопросов.
Теперь эта форма всю погоду портит. Вставляется несколько буферов, а юзеру надо энтерить каждый раз.
Может есть не "InsertSheetFromFile", типа "InsertCellsFromFile".
Где это можно почитать?
А может как-то .uno:Paste подсунуть это через Array()?

PS. Импортировать (без панели импорта) файл CSV можно легко через макрос, задавая FilterOptions.
А как быть с данными (типа CSV) в буфере обмена?
Имитировать эту проблему просто.
1. Открываете в любом простейшем редакторе файл CSV, выделяете и копируете в буфер обмена (Copy) все содержимое файла.
2. Открываете файл ODS и пытаетесь вставить (Paste) содержимое буфера обмена.
    Выскакивает панель настройки Импорта текста.
    А нужно, чтобы не выскакивала.
    Или то же самое с помощью макроса.

[вложение удалено Администратором]

dndn

Function ConvertClipToText
  REM Author: Andrew Pitonyak
  Dim oClip, oClipContents, oTypes
  Dim oConverter, convertedString$
  Dim i%, iPlainLoc%
  Dim sClipService As String
  iPlainLoc = -1
  sClipService = "com.sun.star.datatransfer.clipboard.SystemClipboard"
  oClip = createUnoService(sClipService)
  oConverter = createUnoService( "com.sun.star.script.Converter" )
  oClipContents = oClip.getContents()
  oTypes = oClipContents.getTransferDataFlavors()
  Dim msg$, iLoc%, outS
  msg = ""
  iLoc = -1
  For i=LBound(oTypes) To UBound( oTypes )
    debval = oTypes( i ).MimeType
    If oTypes( i ).MimeType = "text/plain;charset=utf-16" Then
      iPlainLoc = i
      Exit For
    End If
  Next
  If ( iPlainLoc >= 0 ) Then
    Dim oData
    oData = oClipContents.getTransferData( oTypes( iPlainLoc ) )
    ConvertClipToText = oConverter.convertToSimpleType( oData, com.sun.star.uno.TypeClass.STRING )
  End If
End Function

dndn

Для экспорта строки в буфер обмена нашел в сети такой код:

Global sTxtCString As String
 
Sub CopyToClipBoard( sText )
 ' create SystemClipboard instance
 oClip = CreateUnoService( _
     "com.sun.star.datatransfer.clipboard.SystemClipboard")
 oTR = createUnoListener("Tr_", _
     "com.sun.star.datatransfer.XTransferable")
 ' set data
 oClip.setContents( oTR,Null )
 sTxtCString = sText
 'oClip.flushClipboard() ' does not work
End Sub
 
Function Tr_getTransferData( _
   aFlavor as com.sun.star.datatransfer.DataFlavor)
 If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
   Tr_getTransferData() = sTxtCString
 End If
End Function
 
Function Tr_getTransferDataFlavors()
 Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
 aFlavor.MimeType = "text/plain;charset=utf-16"
 aFlavor.HumanPresentableName = "Unicode-Text"
 Tr_getTransferDataFlavors() = array( aFlavor )
End Function
 
Function Tr_isDataFlavorSupported( _
   aFlavor as com.sun.star.datatransfer.DataFlavor ) as Boolean
 If aFlavor.MimeType = "text/plain;charset=utf-16" Then
   Tr_isDataFlavorSupported = true
 Else
   Tr_isDataFlavorSupported = false
 End If
End Function