11-07-2017 06:56 AM
Hello,
I want to copy part of channel data and paste into excel worksheet programmatically. I can copy data with "DataBlClpCopy" into clipboard, Does anybody can tell me what command I can use to paste data from clipboard into excel worksheet?
Thank you for your help!
GQ
Solved! Go to Solution.
11-08-2017 06:07 PM
Hi GQ,
I'm not sure of the exact ActiveX shenanigans you'd need to pull to get the right active sheet, but... this looks like it would work: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheet-paste-method-excel
11-09-2017 06:48 AM
Hi William,
It doesn't work.":=" in "Destination:=Worksheets("Sheet1").Range("D1")" is not recognized correctly in script.
Thanks,
GQ
11-09-2017 03:46 PM
Hi GQ,
Try this. It really does work.
Set Group = Data.Root.ActiveChannelGroup Set myExcelApp = CreateObject("Excel.Application") myExcelApp.Visible = true myExcelApp.Workbooks.Add() Set myWorksheet = myExcelApp.Activesheet Set myRange = myWorksheet.Range("a1") Set myRange = myRange.Resize(Group.Channels(1).Size, Group.Channels.Count) myRange.Value = ChnToVariant(Group.Channels, "TransposedMatrix") Set myExcelApp = Nothing
Brad Turpin
DIAdem Product Support Engineer
National Instruments
11-10-2017 07:15 AM
Hi Brad,
it works great.
Let's go further, How can I copy part of channel data and paste to excel worksheet?
Thank you very much!
GQ
11-10-2017 11:20 AM
Hi GQ,
You have two options. You can fill the 2D array with values yourself, then pass that to the Excel range:
RowSize = 2 ColSize = 3 ReDim Values(RowSize-1, ColSize-1) Values(0,0) = "0,0" Values(0,1) = "0,1" Values(0,2) = "0,2" Values(1,0) = "1,0" Values(1,1) = "1,1" Values(1,2) = "1,2" Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = true ExcelApp.Workbooks.Add() Set Worksheet = ExcelApp.Activesheet Set Range = Worksheet.Range("a1") Set Range = Range.Resize(RowSize, ColSize) Range.Value = Values Set ExcelApp = Nothing
Or you can create a temporary Group of Channels that contain the desired subset using DataBlCopy():
Dim RawGroup, RawChannels Set RawGroup = Data.Root.ChannelGroups(2) Set RawChannels = Data.CreateElementList() Call RawChannels.Add(RawGroup.Channels("Noise_2")) Call RawChannels.Add(RawGroup.Channels("Noise_4")) Call RawChannels.Add(RawGroup.Channels("Noise_5")) Call ExportGroupBlock(RawGroup, RawChannels, 1000, 101000) Sub ExportGroupBlock(RawGroup, RawChannels, iMin, iMax) Dim SelGroup, SelChannels Set SelGroup = Data.Root.ChannelGroups.Add("TempExportGroup") Set SelChannels = SelGroup.Channels FOR Each Channel In RawChannels Call SelChannels.Add(Channel.Name, Channel.DataType) NEXT ' Channel Call DataBlCopy(RawChannels, iMin, iMax-iMin+1, SelChannels) Set myExcelApp = CreateObject("Excel.Application") myExcelApp.Visible = TRUE myExcelApp.Workbooks.Add() Set myWorksheet = myExcelApp.Activesheet Set myRange = myWorksheet.Range("a1") Set myRange = myRange.Resize(SelGroup.Channels(1).Size, SelGroup.Channels.Count) myRange.Value = ChnToVariant(SelGroup.Channels, "TransposedMatrix") Set myExcelApp = Nothing Call Data.Root.ChannelGroups.Remove(SelGroup.Name) End Sub ' ExportGroupBlock()
Brad Turpin
DIAdem Product Support Engineer
National Instruments
11-10-2017 11:46 AM
Hi Brad,
I really appreciate your help.
Thank you very much!
GQ