|
Копирование через буфер в excel
#32700326
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212.
Vot moij kod (sorry for lattin) :
* Simple import from XLS via clipboard buffer
IF VERSION( 5 ) < 800
ERROR "Need VFP8 for ALINES , INSERT INTO ( ) SELECT ... statments "
RETURN .F.
ENDIF
CREATE CURSOR cFromXls( Str M )
LOCAL lnI, lnCnt
lnCnt =ALINES( aBuff, GetClipData() )
* INSERT INTO cFromXls FROM ARRAY aBuff - not works - only single row inserted :(
FOR lnI = 1 TO lnCnt
INSERT INTO cFromXls ( STR ) VALUES ( aBuff[ lnI ] )
ENDFOR
CREATE CURSOR cColumns( Str M, Col1 C( 20 ), Col2 C( 20 ), Col3 C( 20 ) )
#DEFINE PARSECHAR CHR( 9 )
INSERT INTO cColumns( Str, Col1, col2, col3 ) ;
SELECT Str, STREXTRACT( Str, "", PARSECHAR ) ;
, STREXTRACT( Str, PARSECHAR, PARSECHAR ) ;
, STREXTRACT( Str, PARSECHAR , PARSECHAR, 1 ) ;
FROM cFromXLs
* ClipF.prg file : Clipboard functions
*####################################################################################
FUNCTION GetClipData
LOCAL loClip
loClip = NEWOBJECT( "ClipboardObj" )
RETURN loClip.GetClipData()
*####################################################################################
FUNCTION SetClipData
LPARAMETERS lcText
*LOCAL loClip
*loClip = NEWOBJECT( "ClipboardObj" )
*RETURN loClip.SetClipData( lcText ) &&- busz DIB formatu
_CLIPTEXT = lcText
RETURN .T.
*####################################################################################
**************************************************
DEFINE CLASS ClipboardObj AS Custom
*####################################################################################
#UNDEFINE CF_TEXT
#UNDEFINE CF_OEMTEXT
#UNDEFINE CF_UNICODETEXT
#UNDEFINE CFSTR_OLEVARIANTARRAY
#UNDEFINE CFSTR_OLEVARIANT
#DEFINE CF_TEXT 1
#DEFINE CF_OEMTEXT 7
#DEFINE CF_UNICODETEXT 13
#DEFINE CFSTR_OLEVARIANTARRAY "OLE Variant Array"
#DEFINE CFSTR_OLEVARIANT "OLE Variant"
#DEFINE GMEM_DDESHARE 0x2000
#DEFINE MAXSTRSIZE 0xFFF0 && = 65520
pClipMemory = .NULL.
hClipMemory = .NULL.
nMaxSize = MAXSTRSIZE
String = ''
nFormat = CF_TEXT
nRetVal = 0
cErrorStr = ""
FUNCTION Init
This.Declare()
*####################################################################################
FUNCTION Declare
* -- DECLARE Windows API functions for this module
DECLARE INTEGER OpenClipboard IN user32 INTEGER
DECLARE INTEGER CloseClipboard IN user32
DECLARE INTEGER GetClipboardData IN user32 INTEGER
DECLARE INTEGER SetClipboardData IN user32 INTEGER, INTEGER
DECLARE INTEGER GlobalAlloc IN kernel32 INTEGER, INTEGER
DECLARE INTEGER GlobalLock IN kernel32 INTEGER
DECLARE INTEGER GlobalUnlock IN kernel32 INTEGER
DECLARE INTEGER lstrcpyn IN kernel32 ;
STRING @ lpStrTarget, INTEGER lpStrSource, INTEGER iMaxLength
DECLARE INTEGER lstrcpyn IN kernel32 AS lstrcpyn2 ;
INTEGER lpStrTarget, STRING @ lpStrSource, INTEGER iMaxLength
DECLARE INTEGER GlobalSize IN kernel32 INTEGER, INTEGER
DECLARE INTEGER IsClipboardFormatAvailable IN user32 INTEGER
*####################################################################################
FUNCTION GetString
LPARAMETERS tcStr
WITH This
LOCAL lcString, lnRetVal
lcString = ""
* -- Lock clipboard memory so we can reference
* -- the actual data string
.pClipMemory = GlobalLock( .hClipMemory )
* -- Copy string from clipboard to local variable
IF NOT ISNULL( .pClipMemory )
lcString = SPACE( .nMaxSize ) + " "
lnRetVal = lstrcpyn( @lcString, .pClipMemory, .nMaxSize - 1 )
lnRetVal = GlobalUnlock( .hClipMemory )
.hClipMemory = .NULL.
* -- peel off the null terminating character.
lcString = SUBSTR( lcString, 1 ;
, AT( CHR( 0 ), lcString ) - 1 )
RETURN lcString
ENDIF
RETURN ""
ENDWITH
*####################################################################################
FUNCTION GetClipData
WITH This
* -- Check to see if there is any text available for pasting
IF IsClipboardFormatAvailable( CF_TEXT ) <> 1
.cErrorStr = "No text available in the clipboard right now."
RETURN ""
ENDIF
* -- Try to open the clipboard
IF OpenClipboard( 0 ) = 0
.cErrorStr = "Could not open the Clipboard. " ;
+ "Another application may have it open"
RETURN ""
ENDIF
LOCAL lcString
lcString = ""
* -- obtain the handle to the global memory
* -- block that is referencing the text
.hClipMemory = GetClipboardData( CF_TEXT )
IF ISNULL( .hClipMemory )
.cErrorStr = "Could not allocate memory"
ELSE
lcString = .GetString( lcString )
* -- Close the clipboard and return
ENDIF
.nRetVal = CloseClipboard()
RETURN( lcString )
ENDWITH
*####################################################################################
FUNCTION PutString
LPARAMETERS tcString
WITH This
* -- Lock clipboard memory so we can reference
* -- the actual data string
lcString = ( tcString + CHR( 0 ) )
.nFormat = CF_TEXT
* CF_OEMTEXT CF_UNICODETEXT CFSTR_OLEVARIANT
.nMaxSize = LEN( lcString ) - 1
.pClipMemory = GlobalAlloc( GMEM_DDESHARE, .nMaxSize + 1 )
* -- Copy string from clipboard to local variable
IF NOT ISNULL( .pClipMemory )
.hClipMemory = GlobalLock( .pClipMemory )
lnRetVal = lstrcpyn2( .pClipMemory, @lcString, .nMaxSize )
lnRetVal = GlobalUnlock( .hClipMemory )
lcString = SPACE( .nMaxSize ) + " "
lnRetVal = GlobalUnlock( .hClipMemory )
.hClipMemory = .NULL.
* -- peel off the null terminating character.
RETURN .T.
ENDIF
RETURN .T.
ENDWITH
*####################################################################################
FUNCTION SetClipData
LPARAMETERS lcString
WITH This
.nRetVal = 0
IF OpenClipboard( 0 ) = 0
.cErrorStr = "Could not open the Clipboard. " ;
+ "Another application may have it open"
RETURN .nRetVal
ENDIF
.pClipMemory = .NULL.
IF ! .PutString( lcString )
.cErrorStr = "Could not allocate memory"
SetClipboardData( CF_TEXT, 0 )
ELSE
IF ISNULL( .pClipMemory )
.cErrorStr = "Could not allocate memory"
ELSE
* TODO: convert OEMTEXT to widechar, unicode
* alia : SetClipboardData( CF_TEXT, .pClipMemory )
SetClipboardData( CF_TEXT, 0 )
SetClipboardData( .nFormat, .pClipMemory )
.nRetVal = 1
ENDIF
ENDIF
CloseClipboard()
RETURN .nRetVal
ENDWITH
ENDDEFINE
|
|
|