LabVIEW的ActiveX实验--调用excel(精)
labview写入电子表格
![labview写入电子表格](https://img.taocdn.com/s3/m/3996430beefdc8d376ee32f4.png)
竭诚为您提供优质文档/双击可除labview写入电子表格篇一:labView怎么利用activex读取excel数据[][]在labView中利用activex读取excel数据网络上有很多关于读取excel的例子,但一直没有找到读取文件中整sheet的数据,所以在这里介绍一下在labView 中利用activex读取文件中整张表格的内容.labView中利用activex打开excel分openapplication,openworkbook自动化引用句柄:引用句柄>>自动化引用句柄;2.前面板中右击自动化引用句柄,在选择activex类下选择excel._application此时自动化引用句柄的名称会更新excel._application;3.程序框图中放下打开自动化:右击excel._application>>activex选板>>打开自动化;4.将excel._application连线至打开自动化的左侧自动化引用句柄端;5.程序框图中放下属性节点;(同步骤3)6.将打开自动化的右侧自动化引用句柄端连线至属性节点的引用端;7.单击属性节点的属性,在下拉列表中选择workbooks;8.程序框图中放下调用节点;(同步骤3)9.将步骤7中的workbooks连线至调用节点的引用端;10.单击调用节点的方法,在下拉列表中选择open;11.在open的Filename输入端连接所需打开excel文件的路径;12.同步骤5,放下属性节点,其引用端连接open,然后单击属性节点的属性,在下拉列表中选择worksheets;13.同步骤8,放下调用节点,其引用端连接worksheets,然后单击调用节点的方法,在下拉列表中选择item;14.在item的index输入端创建输入控件,此输入控件代表excel中的sheet#;(例如需要打开文件中的sheet2,可直接连接num2至index输入端)15.程序框图中放下变体至数据转换(同步骤3),将其变体端连接至item;16.同步骤1,在前面板中再次放下自动化引用句柄,然后如步骤2方式在选择activex类下选择excel._worksheet;17.程序框图中,将excel._worksheet连线至变体至数据转换的类型端;18.同步骤5,放下属性节点,其引用端连接变体至数据转换的数据端,然后单击属性节点的属性,在下拉列表中选择usedRange;19.同步骤8,放下调用节点,其引用端连接usedRan(labview写入电子表格)ge,然后单击调用节点的方法,在下拉列表中选择Value(获取);20.同步骤15,放下变体至数据转换,其变体端连接至Value;21.只要在变体至数据转换的类型端连接一个二维的字符型数组常量,就可以在数据端获取表格中的数据了;(连贯的程序如下)22.程序的最后需要closeapplication,closeworkbooks[]实例应用在写一个数据整理工具中用到的事例:data的文件类型可以是.csv或者.xls,其中.csvfile可以通过labView中的读取电子表格文件工具直接读取,而.xls则需要用到Readexcel子Vi来实现.实例框图如下:[前面板]篇二:使用labView读取excel的数值数据使用labView读取excel的数值数据一、题目概述:这是一个基于labview读取excel的数值数据的程序。
基于Labview环境的ActiveX编程实例
![基于Labview环境的ActiveX编程实例](https://img.taocdn.com/s3/m/b4b551cbb7360b4c2f3f6410.png)
基于Labview环境的ActiveX编程实例随着计算机测控技术的发展,测试报表的自动化生成已变得相当容易,并成为测控软件中的一个重要组成部分。
它不仅能使测试时间大为缩减从而提高测试速度,而且能避免手工生成报表时的人为错误从而提高测试准确度,所以将测试结果形成报表并存储成Word或Excel文件,将是最受用户欢迎的。
Labview中有专门的报表模块,可以实现简单报表功能,但使用不是很灵活,难以满足较高的报表要求。
文章主要讲述了Labview中利用ActiveX技术实现测试报表(Word 或Excel格式)的自动化生成功能。
标签:Labview环境;ActiveX技术;Word、Excel常见功能1 概述1.1 Labview环境Labview是一种基于“虚拟仪器”的可视化编程环境,核心概念是“软件即仪器”,特别强调软件在测控系统中的作用。
利用Labview编制的程序包括前面板界面与程序框图两部分,其操作和功能模拟了现实世界中的仪器,因此被称为VI(Virtual Instrument/虚拟仪器)。
Labview的优势主要体现在以下几个方面:(1)提供了丰富的图形控件,并采用图形化的编程方法,彻底把工程师们从复杂苦涩的文本编程工作中解放出来。
(2)内建的编译器在用户编写程序的同时就在后台自动完成了编译。
因此用户在编写程序的过程中如果有语法错误,它会被立即显示出来。
(3)通过应用程序生成器可以轻松地发布EXE、动态链接库或安装包。
(4)由于采用数据流模型,它实现了自动的多线程,从而能充分利用处理器尤其是多处理器的处理能力。
(5)通过DLL、CIN节点、ActiveX、NET或MATLAB脚本节点等技术,可以轻松实现Labview与其他编程语言混合编程。
(6)提供了大量的驱动与专用工具,几乎能与任何接口的硬件轻松连接。
(7)内建了600多个分析函数,用于数据分析和信号处理。
(8)NI同时提供了丰富的附加模块,用于扩展Labview在不同领域中的应用。
Labview利用activeX读取Excel文件报错3005等解决办法(有图)
![Labview利用activeX读取Excel文件报错3005等解决办法(有图)](https://img.taocdn.com/s3/m/d9d8bbfd360cba1aa811dad7.png)
利用activeX读取Excel时遇到一些坑,希望能帮到和我一样遇到此类问题的朋友,废话不多说,具体步骤如下。
Step1:前面板放置自动化打开引用句柄,如下图:
Step2:右击到最下端浏览,如下图:
Step3:从类型库选择Excel对象,(labview访问PC安装的EXCEL应用对象)如下图:
Step4:下拉框选择具体对象,注意选择图一中的(_Application)会报3005错,请往下拉请选择第二个Application,如下图二:
图一
图二
Step5:程序框图具体操作如下图,具体步骤略;
注意事项:可能遇到的坑Sheets类的方法Index索引从1开始,0无效(报错-2147352565)当直接建立输入变体控件时运行会报代码为-2147352565的错误;
Step6:最后,运行结束,调WookBook方法进行关闭.
本人第一次发文章,水平有限,请多指教。
若喜欢的话请点个赞。
LabVIEW读取并关闭excel文件
![LabVIEW读取并关闭excel文件](https://img.taocdn.com/s3/m/4f738899e53a580216fcfe82.png)
LabVIEW利用activeX读取excel文件后关闭文件方法
By smile跃日少年
最近帮我一个朋友用LabVIEW读取excel文件,excel文件中包含多个sheet。
然而LabVIEW函数选板中的读取电子表格文件并不兼容用Microsoft的Excel 建立的xls格式文件,它只能读取用LabVIEW自己建立的excel文档,对其他excel得到的都是0。
在网上一顿搜索,可以利用activeX来读取Excel文件,LabVIEW通过自动化引用句柄、属性节点、调用节点、变体至数值转换等函数,能将excel表格中各个sheet的数据读取,并以字符串二维数组的形式显示出来。
LabVIEW读取得到:
后面板程序为:
感觉挺好,但是程序有个bug,就是打开excel文件读取数据后,文件无法关闭,会一直在内存中。
再次运行,会出现下列提示。
关闭VI后,office提示excel文件处于锁定状态,只能以只读方式打开,注销或重启后才能正常打开。
解决方法很简单,读取之后把文件关闭就好了。
添加顺序结构,读取后,关闭文件,程序如下:
在workbook属性节点,添加调用节点,选择close,SaveChanges赋0,不保存。
一定要添加顺序结构,不然会出错。
By smile跃日少年
2017-03-24。
LabWindowsCVI中调用Excel
![LabWindowsCVI中调用Excel](https://img.taocdn.com/s3/m/9d015924647d27284b73519d.png)
LabWindows/CVI中调用Excel设计要求:1.启动Microsoft Excel并打开xls文件;2.向xls文件中写入数据;3.根据所填入的数据完成画图功能;4.Xls具有存盘,关闭等功能;5.关闭Microsoft Excel。
利用ActiveX技术进行Excel访问。
ActiveX技术以微软的COM技术为基础,也称之为ActiveX自动化。
ActiveX是一种软件组件,它可以插入到不同的应用程序中,并被当作程序的一部分来使用。
利用ActiveX可以把两个或两个以上的应用程序组合在一起,使其像应用程序一样工作,或者可以在同一应用程序外壳中进行不同应用程序间的切换。
生成自动化仪器驱动器在LabWindows/CVI的工程主窗口中选择Tool/Create ActiveXController,弹出ActiveX Controller Wizard对话框,点击Next进入自动化服务器选择对话框,如图1所示。
选择Microsoft Excel 12.0 Object Library,点击Next进入服务器配置对话框,如图所示。
ActiveX Server 表示已选中的ActiveX服务器名称,Instnmmnt Prefix表示生成驱动器的前缀,可以设置为空或键人有效的C语言标识符,若不输入任何字符,系统会默认产生一个有效的文件名,一般情况下不用修改此属性。
Target.fp File表示CVI产生的.fp文件在磁盘中的存储路径,点击Browse可以查找或定位一个.fp文件。
将Add.fp File To Project选中表示允许把所产生的.fp文件加入当前工程中。
点击Compatibility Options进入兼容选项对话框,通过该对话框选项可以保持所产生的代码源文件与已经存在的ActiveX仪器驱动的向后兼容性,系统默认为Per Property。
点击Next进入高级选项对话框,在高级选项对话框中,点击Advanced Option 将显示高级函数配置对话框,可以通过此对话框来增减ActiveX对象及修改对象的名称和标识符,高级函数一般采用默认配置即可。
VLISP调用EXCEL常用公共函数
![VLISP调用EXCEL常用公共函数](https://img.taocdn.com/s3/m/1cc567b669eae009591becbe.png)
;;;;;;;;此為經整理過后一些VLISP調用EXCEL常用公共函數;;;;;;;;;;;; ;;;;;;;;此為私人函數未經許可請勿............................... ;;;;;;;;開發:朱衛星 2005/02/22 rev01............................ ;;;;;;;;it's the first!ok!used in acad at least rev. 2000;;;;;;; (Defun vlxls-variant->list (VarX / Run Item Rtn)(setq Run T)(while Run(cond ((= (type VarX) 'SAFEARRAY)(setq VarX (vlax-safearray->list VarX)))((= (type VarX) 'VARIANT)(if (member (vlax-variant-type VarX) (list 5 4 3 2))(setq VarX (vlax-variant-change-type Varx vlax-vbString)))(setq VarX (vlax-variant-value VarX)))(t (setq Run nil))))(cond ((= (type VarX) 'LIST)(foreach Item VarX(setq Item (vlxls-variant->list Item) Rtn (append Rtn (list Item)) )))((= VarX nil) (setq Rtn ""))(t (setq Rtn VarX)))Rtn)(Defun vlxls-color-ECI->truecolor (Color / Rtn)(if (setq Rtn (cdr (assoc Color *xls-color*)))(setq Rtn (nth 1 Rtn)))(if (null Rtn)(setq Rtn 16711935))Rtn);;;EXAMPLE:;;;(vlxls-color-eci->truecolor 0)return: 16711935;;;(vlxls-color-eci->truecolor 1)return: 0;;;(vlxls-color-eci->truecolor 12)return: 8355584;;;(vlxls-color-eci->truecolor 120)return: 16711935(Defun vlxls-color-eci->aci (Color / Rtn)(if (null (setq Rtn (cdr (assoc Color *xls-color*))))(setq Rtn 256)(setq Rtn (nth 0 Rtn)))Rtn);;;EXAMPLE:;;;(vlxls-color-eci->aci 0)return: 256;;;(vlxls-color-eci->aci 1)return: 18;;;(vlxls-color-eci->aci 12)return: 56;;;(vlxls-color-eci->aci 120)return: 256(Defun vlxls-color-aci->eci (Color / Item Rtn)(foreach Item *xls-color*(if (= (nth 1 Item) Color)(setq Rtn (car Item))))(if (null Rtn)(setq Rtn 0))Rtn);;;Examples:;;;(vlxls-color-aci->eci 0)return: 0;;;(vlxls-color-aci->eci 1)return: 3;;;(vlxls-color-aci->eci 12)return: 0;;;(vlxls-color-aci->eci 120)return: 0(Defun vlxls-color-aci->truecolor (aci)(vlxls-color-eci->truecolor (vlxls-color-aci->eci aci)));;;Examples:;;;(vlxls-color-aci-> truecolor 0) return: 16711935;;;(vlxls-color-aci->truecolor 1) return: 16711680;;;(vlxls-color-aci-> truecolor 12)return: 16711935;;;(vlxls-color-aci-> truecolor 120)return: 16711935;;;OK!NOW LET'S GO! START EXCEL.APPLICATION!!............;;;before use these program you should install "Microsoft Excel" in your computer!! ;;;if not,you will recicieve an error messege!!;;;such as "warning:........."! ZWX 2005/02/22 COPYRIGHT .....(Defun vlxls-app-Init (/ OSVar GGG Olb8 Olb9 Olb10 TLB Out msg msg1 msg2) ;;;;;;;;;;該程序實現了初始化EXCEL應用程序!(if *Chinese*(setq msg "\n 初始化微軟Excel "msg1 "\042初始化Excel失敗\042"msg2 (strcat "\042 警告""\n ====""\n 無法在您的計算机上檢測到微軟Excel 軟件""\n 如果您确認已經安裝Excel, 請發送電子郵""\n 件到yota@獲取更多的解決方案\042"))(setq msg "\n Initializing Microsoft Excel "msg1 "\042Initialization Error\042"msg2 (strcat "\042 WARNING""\n =======""\n Can NOT detect Excel97/200X/XP in your computer" "\n If you already have Excel installed, please email""\n us to get more solution via yota@\042")))(if (null msxl-xl24HourClock)(progn (if (and (setq GGG (vl-registry-read"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Excel.EXE""Path"))(setq GGG (strcase (strcat GGG "Excel.EXE"))))(progn (foreach OSVar (list "SYSTEMROOT" "WINDIR""WINBOOTDIR" "SYSTEMDRIVE" "USERNAME" "COMPUTERNAME" "HOMEDRIVE" "HOMEPATH" "PROGRAMFILES") (if (vl-string-search (strcat "%" OSVar "%") GGG)(setq GGG (vl-string-subst (strcase (getenv OSVar))(strcat "%" OSVar "%")GGG))))(setq Olb8 (findfile (vl-string-subst "EXCEL8.OLB" "EXCEL.EXE" GGG))Olb9 (findfile (vl-string-subst "EXCEL9.OLB" "EXCEL.EXE" GGG))Olb10 (findfile (vl-string-subst "EXCEL10.OLB" "EXCEL.EXE" GGG))) (cond ((= (vl-filename-base (vl-filename-directory GGG))"OFFICE11")(setq TLB GGG Out "2003"))((= (vl-filename-base (vl-filename-directory GGG))"OFFICE10")(setq TLB GGG Out "XP"))(Olb9 (setq TLB Olb9 Out "2000"))(Olb8 (setq TLB Olb8 Out "97"))(t (setq Out "Version Unknown")))(if TLB (progn (princ (strcat MSG Out "..."))(vlax-import-type-library:tlb-filename TLB:methods-prefix "msxl-":properties-prefix "msxl-":constants-prefix "msxl-"))))(progn (if vldcl-msgbox(vldcl-msgbox "x" msg1 msg2)(alert (read msg2)))(exit)))))msxl-xl24HourClock);;;Examples:;;;(vlxls-app-init) return: 33(Defun vlxls-app-New (UnHide / Rtn);;;; 該程序實現功能:新建一個excel格;;;;;;;;;; THIS PROGRAM CAN BUILD A NEW EXCELFILE(if (vlxls-app-init)(progn(if *Chinese* (princ "\n 新建微軟Excel工作表...")(princ "\n Creating new Excel Spreadsheet file...")) ion"))(progn (vlax-invoke-method(vlax-get-property Rtn 'WorkBooks)'Add)(if UnHide (vla-put-visible Rtn 1)(vla-put-visible Rtn 0))))))Rtn);;;Examples:;;;(setq *xlapp* (vlxls-app-new T)) return: #(Defun vlxls-app-open(XLSFile UnHide / ExcelApp WorkSheet Sheets ActiveSheet Rtn) ;;;function: this program can open an excelfile(setq XLSFile (strcase XLSFile))(if (null (wcmatch XLSFile "*.XLS"))(setq XLSFile (strcat XLSFile ".XLS")))(if (and (findfile XLSFile)(setq Rtn (vlax-get-or-create-object "Excel.Application")))(progn (vlax-invoke-method (vlax-get-property Rtn 'WorkBooks)'Open XLSFile)(if UnHide(vla-put-visible Rtn 1)(vla-put-visible Rtn 0))))Rtn);;;Examples:;;;(setq *xlapp* (vlxls-app-open “” T)) e #(Defun vlxls-app-save (xlapp);;;;保存文件(equal (vlax-invoke-method(vlax-get-property Xlapp "ActiveWorkbook")"Save"):vlax-true));;;Examples:;;;(vlxls-app-save *xlapp*) return: T(Defun vlxls-app-saveas (xlapp Filename / Rtn);;;另存文件(if (null filename)(setq filename (strcat (getvar "dwgprefix") "XLS.XLS")))(if (null (wcmatch (setq filename (strcase Filename)) "*.XLS")) (setq filename (strcat filename ".XLS")))(if (findfile Filename)(vl-file-delete (findfile Filename)))(vlax-invoke-method(vlax-get-property Xlapp "ActiveWorkbook")"SaveAs"Filenamemsxl-xlNormal"""":vlax-False:vlax-Falsenil)(findfile Filename));;;Examples:;;;(vlxls-app-saveas *xlapp* nil) return: “”;;;(vlxls-app-saveas *xlapp* “”) return: “”;;;(vlxls-app-saveas *xlapp* nil) return: NIL(Defun vlxls-app-quit (ExlObj SaveYN);;退出應用程序(if SaveYN(vlax-invoke-method(vlax-get-property ExlObj "ActiveWorkbook")'Close)(vlax-invoke-method(vlax-get-property ExlObj "ActiveWorkbook")'Close:vlax-False))(vlax-invoke-method ExlObj 'QUIT)(vlax-release-object ExlObj)(setq ExlObj nil)(gc));;;Examples:;;;(vlxls-app-quit *xlapp* nil) return: nil(Defun vlxls-app-kill (SaveYN / ExlObj);;;強行清除所有EXCEL應用程序(while (setq ExlObj (vlax-get-object "Excel.Application"))(vlxls-app-quit ExlObj SaveYN)));;;Examples:;;;(vlxls-app-kill T) return: nil(Defun vlxls-app-autofit (xlapp / sh act Rtn);;;存儲格自動調整大小(setq act (vlxls-Sheet-Get-Active xlapp))(foreach sh (append (vl-remove act (vlxls-sheet-get-all Xlapp))(list act))(setq Rtn (variant-value (msxl-autofit(msxl-get-columns(msxl-get-Cells(vlxls-sheet-get-usedrange xlapp sh)))))))(equal Rtn :vlax-true));;;Examples:;;;(vlxls-app-autofit *xlapp*) return: T;;;(vlxls-app-autofit *xlapp*) return: NIL(Defun vlxls-sheet-get-all (xlapp / SH Rtn);;;;取得所有應用的頁(vlax-for SH (vlax-get-property Xlapp "sheets")(setq Rtn (cons (vlax-get-property sh "Name") Rtn)))(reverse Rtn));;;Examples:;;;(vlxls-sheet-get-all *xlapp*) e ("Sheet1" "Sheet2" "Sheet3")(Defun vlxls-Sheet-Get-Active (xlapp);;;;返回當前應用的頁(vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name));;;Examples:;;;(vlxls-sheet-get-active *xlapp*) return: "Sheet2"(Defun vlxls-sheet-delete (xlapp Name / sh Rtn);;;刪除頁(setq Rtn (vlxls-sheet-get-all Xlapp))(vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (vlax-get-property sh "Name") Name)(vlax-invoke-method sh "Delete")))(not (equal Rtn (vlxls-sheet-get-all Xlapp))));;;Examples:;;;(vlxls-sheet-delete *xlapp* “Sheet1”) return: T;;;(vlxls-sheet-delete *xlapp* “UnExistingSheet”) return: NIL(Defun vlxls-sheet-rename (New Old Xlapp / sh Rtn);;;給頁重新命名(if (null old)(setq old (msxl-get-name (msxl-get-activesheet Xlapp))))(if (member New (vlxls-sheet-get-all Xlapp))(setq Rtn nil)(progn (vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (msxl-get-name sh) Old)(msxl-put-name sh New)))(setq Rtn (equal New (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name)))))Rtn);;;Examples:;;;(vlxls-sheet-rename “New”“Sheet1” *xlapp*) return: T;;;(vlxls-sheet-rename “New” NIL *xlapp*) return: T;;;(vlxls-sheet-rename “Sheet3” NIL *xlapp*) return: NIL;;;(vlxls-sheet-rename “Sheet2”“Sheet1” *xlapp*) return: NIL;;;(vlxls-sheet-rename “Sheet2”“UnExistSheet” *xlapp*) return: NIL(Defun vlxls-sheet-add (xlapp Name / Rtn);;;增加頁(if (member name (vlxls-sheet-get-all xlapp))(setq Rtn nil)(progn (vlax-put-property(vlax-invoke-method(vlax-get-property Xlapp "sheets") "Add")"name" Name)(setq Rtn (equal (vlxls-sheet-get-active xlapp) name))))Rtn);;;Examples:;;;(vlxls-sheet-add *xlapp* “Sheet1”) return: T;;;(vlxls-sheet-add *xlapp* NIL) return: T;;;(vlxls-sheet-add *xlapp* “NewSheet”) return: NIL(Defun vlxls-sheet-put-active (xlapp Name / sh);;;設置當前使用頁(if (null (vlxls-sheet-add xlapp name))(vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (vlax-get-property sh "Name") Name)(vlax-invoke-method sh "Activate"))))(equal (vlxls-sheet-get-active xlapp) name));;;Examples:;;;(vlxls-sheet-put-active *xlapp* “Sheet1”) return: T;;;(vlxls-sheet-put-active *xlapp* “NewSheet”) return: T(Defun vlxls-sheet-get-UsedRange (xlapp Name / sh Rtn);;;取得使用頁的使用范圍(if (null Name)(setq Name (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'Name)))(vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (vlax-get-property sh "Name") Name)(setq Rtn (vlax-get-property sh "UsedRange"))))Rtn);;;Examples:;;;(vlxls-sheet-get-usedrange *xlapp* “Sheet1”) return: T;;;(vlxls-sheet- get-usedrange *xlapp* “NewSheet”) return: T(Defun vlxls-cellid (id / xx id1 id2 Rtn) ;;;;cell id 轉換(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(setq id (strcase id))(if (null (setq xx (vl-string-search ":" id)))(setq Rtn (list id ""))(setq id1 (substr id 1 xx)id2 (substr id (+ xx 2))id1 (vlxls-rangeid id1)id2 (vlxls-rangeid id2)Rtn (list (vlxls-rangeid (list (min (car id1) (car id2))(min (cadr id1) (cadr id2))))(vlxls-rangeid (list (max (car id1) (car id2))(max (cadr id1) (cadr id2)))))))Rtn);;;Examples:;;;(vlxls-cellid ‘(3 14)) return: ("C14" "");;;(vlxls-cellid “D23”) return: ("D23" "");;;(vlxls-cellid “C12:F3”) return: ("C3" "F12");;;(vlxls-cellid “F15:G22”) return: ("F15" "G22")(Defun vlxls-rangeid (id / str->list list->str xid->str Rtn) ;;;;range id 轉換(Defun str->list1 (str / ii xk xv rr pos x y)(setq rr (strlen str))(foreach ii '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")(if (setq pos (vl-string-search ii str))(setq rr (min pos rr))))(setq x (substr str 1 rr)y (substr str (1+ rr)))(if (= (strlen x) 2)(setq xk (- (ascii (substr x 1 1)) 64)xv (- (ascii (substr x 2)) 64))(setq xk 0xv (- (ascii x) 64)))(list (+ (* xk 26) xv) (read y)))(Defun xid->str (IntNum / PosNum Nm-One)(setq Nm-One (1- IntNum)PosNum (/ Nm-One 26))(if (= PosNum 0)(chr (+ 65 (rem Nm-One 26)))(strcat (chr (+ 64 PosNum)) (chr (+ 65 (rem Nm-One 26))))))(Defun list->str1 (idr / x y)(setq x (car idr)y (cadr idr)x (xid->str x)y (itoa y))(strcat x y))(cond ((= (type id) 'str) (setq Rtn (str->list1 id)))((= (type id) 'list) (setq Rtn (list->str1 id))))Rtn);;;Examples:;;;(vlxls-rangeid ‘(3 14)) return: "C14";;;(vlxls-rangeid “D23”) return: (4 23);;;(vlxls-rangeid “DD23”) return: (108 23)(Defun vlxls-range-autofit (range);;自動調整范圍內存儲格(equal (vlax-variant-value(msxl-autofit(msxl-get-columns (msxl-get-Cells range)))):vlax-true));;;Examples:;;;(vlxls-range-autofit (msxl-get-range *xlapp* “C12:F15”)) return: T ;;;(vlxls-range-autofit RangeObject) return: NIL(Defun vlxls-cell-put-active (xl id / Rtn);;范圍內激活(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(msxl-activate (setq Rtn (msxl-get-range xl id)))Rtn);;;Examples:;;;(vlxls-cell-put-active *xlapp* “C12:F15”) return: #;;;(vlxls-cell-put-active *xlapp* “F12”) return: #(Defun vlxls-cell-get-value (xl id);;取得范圍內值并列表(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(vlxls-variant->list(msxl-get-value2 (msxl-get-range xl id))));;;Examples:;;;(vlxls-cell-get-value *xlapp* “C12”) return: “g”;;;(vlxls-cell-get-value *xlapp* “C12:C12”) return: “g”;;;(vlxls-cell-get-value *xlapp* “C12:C15”) return: (("g") ("") ("") ("")) ;;;(vlxls-cell-get-value *xlapp* “C12:F12”) return: (("g" "ds" "" ""));;;(vlxls-cell-get-value *xlapp* “C12:F15”) return: (("g" "ds" "" "") ("" "" "g" "") ("" "" "" "") ("" "" "" ""))(Defun vlxls-cell-put-value (xl id Data / vllist-explode idx xx yy ary Rtn) ;;;;;將信息輸入區域內(Defun vllist-explode1 (lst)(cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode1 (car lst))(vllist-explode1 (cdr lst))))))(if (null id)(setq id "A1"))(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(if (= (type (car Data)) 'LIST)(setq ARY (vlax-make-safearrayvlax-vbstring(cons 0 (1- (length Data)))(cons 1 (length (car Data))))XX (1- (length (car Data)))YY (1- (length Data)))(setq ARY (vlax-make-safearrayvlax-vbstring(cons 0 1)(cons 1 (length Data)))XX (1- (length Data))YY 0))(if (= xx yy 0)(msxl-put-value2(setq Rtn (msxl-get-range xl id))(car (vllist-explode1 data)))(progn(setq id (vlxls-cellid-calc id xx yy))(msxl-put-value2(setq Rtn (msxl-get-range xl id))(vlax-safearray-fill ary data))))Rtn);;;Examples:;;;(vlxls-cell-put-value *xlapp* “C12”“xx”) return: #;;;(vlxls-cell-put-value *xlapp* “C12:F3”“xx”) return: #;;;(vlxls-cell-put-value *xlapp* “C12:D13”‘((“zz”“xx”)(“xx”“zz”))) ereturn:(Defun vlxls-cellid-calc (id x y / idx) ;;;計算范圍(setq id (car (vlxls-cellid id))idx (vlxls-rangeid id)x (+ x (car idx))x (if (< x 1)1x)y (+ y (cadr idx))y (if (< y 1)1y)idx (vlxls-rangeid (list x y))id (vlxls-cellid (strcat id ":" idx))id (strcat (car id) ":" (cadr id)))id);;;Examples:;;;(vlxls-cellid-calc “C12” 2 20) return: "C12:E32";;;(vlxls-cellid-calc ‘(2 23) 2 -120) return: "B1:D23"(Defun vlxls-get-row-value (xl id len / vllist-explode Rtn);;取出單列的內容(Defun vllist-explode4 (lst)(cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode4 (car lst))(vllist-explode4 (cdr lst))))))(if (> len 0)(setq id (vlxls-cellid-calc id (1- len) 0))(setq id (vlxls-cellid-calc id (1+ len) 0)))(setq Rtn (vllist-explode4 (vlxls-cell-get-value xl id)))Rtn);;;Examples:;;;(vlxls-get-row-value *xlapp* “C12” 2) return: ("zz" "xxx");;;(vlxls-get-row-value *xlapp* “C12” -20) return: ("" "" "zz")(Defun vlxls-put-row-value (xl id data flg / Rtn);;;單列輸入信息并且flg為t則自動調整尺寸(if (= (type data) 'str)??? (setq data (list data))??? )(setq?? id (car (vlxls-cellid id))id (vlxls-cellid-calc id (1- (length data)) 0))(setq Rtn (vlxls-cell-put-value xl id (list data)))(if flag(vlxls-range-autofit??? rtn??? ))Rtn);;;Examples:;;;(vlxls-put-row-value *xlapp* “C12”“abc”) return:#;;;(vlxls-put-row-value *xlapp* ‘(12 3) “abc”) return:#;;;(vlxls-put-row-value *xlapp* “C12”‘("zz" "xxx")) return:#;;;(vlxls-put-row-value *xlapp* ‘(12 3) ‘("zz" "xxx")) return:#(Defun vlxls-get-column-value (xl id len / vllist-explode Rtn);;取出單欄信息(Defun vllist-explode3?????? (lst)??? (cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode3 (car lst))?? (vllist-explode3 (cdr lst))?? )?? ))??? )(setq id (car (vlxls-cellid id)))(if (> len 0)??? (setq id (vlxls-cellid-calc id 0 (1- len)))??? (setq id (vlxls-cellid-calc id 0 (1+ len)))??? )(setq Rtn (vllist-explode3 (vlxls-cell-get-value xl id)))Rtn);;;Examples:;;;(vlxls-get-column-value *xlapp* “C12” 2) return: ("zz" "sdfsdf");;;(vlxls-get-column-value *xlapp* “C12” -20) return: ("" "" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "zz")(Defun vlxls-put-column-value (xl id data flg / item Rtn);;;單欄輸入信息并且flg 為t則自動調整尺寸(if (= (type data) 'str)??? (setq data (list data))??? )(setq?? id (car (vlxls-cellid id))id (vlxls-cellid-calc id 0 (1- (length data))))(foreach item??? data?? (setq Rtn (cons (list item) Rtn)))(setq Rtn (vlxls-cell-put-value xl id (reverse Rtn)))(if flg?? (vlxls-range-autofit??? rtn?? ))Rtn);;;Examples:;;;(vlxls-put-column-value *xlapp* “C12”“abc”) return: #;;;(vlxls-put-column-value *xlapp* ‘(12 3) “abc”) return: #;;;(vlxls-put-column-value *xlapp* “C12”‘("zz" "xxx")) return: # ;;;(vlxls-put-column-value *xlapp* ‘(12 3) ‘("zz" "xxx")) return: #(Defun vlxls-cell-get-aci (xl id)(vlxls-color-eci->aci??? (vlax-variant-value????? (msxl-get-colorindex(msxl-get-interior (msxl-get-range xl id)))????? )??? ));;;Examples:;;;(vlxls-cell-get-aci *xlapp* “C12”) return:256;;;(vlxls-cell-get-aci *xlapp* ‘(12 3)) return:15(Defun vlxls-cell-put-aci (xl id aci / Rtn)(if (null aci)??? (msxl-put-colorindex????? (msxl-get-interior (setq Rtn (msxl-get-range xl id))) ????? (vlax-make-variant -4142)????? )??? (msxl-put-colorindex????? (msxl-get-interior (setq Rtn (msxl-get-range xl id))) ????? (vlxls-color-aci->eci aci)????? )??? )Rtn);;;Examples:;;;(vlxls-cell-put-aci *xlapp* “C12” 6) return: #;;;(vlxls-cell-put-aci *xlapp* “C12” nil) return: #(Defun vlxls-text-get-aci (xl id)(vlxls-color-eci->aci??? (vlax-variant-value????? (msxl-get-colorindex(msxl-get-font (msxl-get-range xl id)))????? )??? ));;;Examples:;;;(vlxls-text-get-aci *xlapp* “C12”) return: 256;;;(vlxls-text-get-aci *xlapp* ‘(12 3)) return: 15(Defun vlxls-text-put-aci (xl id aci / Rtn)?? (if (null aci)???? (msxl-put-colorindex?????? (msxl-get-font (setq Rtn (msxl-get-range xl id)))?????? (vlax-make-variant -4105)?????? )???? (msxl-put-colorindex?????? (msxl-get-font (setq Rtn (msxl-get-range xl id)))?????? (vlxls-color-aci->eci aci)?????? )???? )Rtn);;;Examples:;;;(vlxls-text-put-aci *xlapp* “C12” 6) return: #;;;(vlxls-text-put-aci *xlapp* “C12” nil) return: #(Defun vlxls-text-get-prop(xl id / Cell Font DXF1 DXF7 DXF40 DXF72 DXF62 DXF420 Rtn) ;;;;取得單元格文字相關信息(setq?? id???? (car (vlxls-cellid id))cell?? (msxl-get-range xl id)font?? (msxl-get-font cell)DXF7?? (vlax-variant-value (msxl-get-name Font))DXF40 (vlax-variant-value (msxl-get-size Font))DXF72 (vlax-variant-value (msxl-get-HorizontalAlignment Cell)?? )DXF72 (cond ((= DXF72 -4152) 11)?????? ((= DXF72 -4108) 10)?????? (t 9)?????? )DXF62 (vlxls-color-eci->aci?? (vlax-variant-value (msxl-get-colorIndex Font))?? )DXF420 (vlxls-color-eci->truecolor?? (vlax-variant-value (msxl-get-colorIndex Font)))Rtn??? (list (cons 0 (strcase id))?????? (cons 7 DXF7)(cons 40 DXF40)(cons 62 DXF62)?????? (cons 72 DXF72)(cons 420 DXF420))));;;Examples:;;;(vlxls-text-get-prop *xlapp* “C12”) return:((0 . "C12") (7 . "Arial") (40 .12.0) (62 . 256) (72 . 9) (420 . 16711935));;;(vlxls-text-get-prop *xlapp* ‘(2 10)) return:((0 . "B10") (7 . "Arial") (40 .12.0) (62 . 256) (72 . 11) (420 . 16711935))(Defun vlxls-cell-get-prop(xl id / range left top width height dxf10 Rtn) ;;;;取得單元格信息(if (vlxls-cell-merge-p xl id)???? (setq id (vlxls-cell-get-mergeid xl id))??? )(setq?? range (msxl-get-range xl id)left?? (vlax-variant-value (msxl-get-left Range))top??? (vlax-variant-value (msxl-get-top Range))width (vlax-variant-value (msxl-get-width Range))height (vlax-variant-value (msxl-get-height Range))dxf10 (list left top)Rtn??? (list (cons 0 (strcase id))?????? (cons 1 (vlxls-cell-get-value xl id))?????? (cons 10 dxf10)?????? (cons 41 width)?????? (cons 42 height)?????? (cons -1 (vlxls-text-get-prop xl id))?????? ))Rtn);;;Examples:;;;(vlxls-cell-get-prop *xlapp* “C12:F14”) return:((0 . "C12:F14") (1 ("zz" "xxx" "xxx" "xxx") ("sdfsdf" "sdfsdf" "sdfsdf" "sdfsdf");;;????????? ("sdfsdf" "sdfsdf" "sdfsdf" "sdfsdf")) (10 108.0 156.75) (41 . 156.0) (42 . 42.75) (-1 (0 . "C12") (7 . "Arial");;;????????? (40 . 12.0) (62 . 256) (72 . 9) (420 . 16711935)));;;(vlxls-cell-get-prop *xlapp* “B8”) return: ((0 . "B8") (1 . "sdg") (10 54.0 99.75) (41 . 54.0) (42 . 14.25) (-1 (0 . "B8");;;??? (7 . "Arial") (40 . 12.0) (62 . 256) (72 . 10) (420 . 16711935)))(Defun vlxls-cell-border (xl id flg / bdr);;;外框線(if flg??? (msxl-put-value????? (msxl-get-borders(msxl-get-range xl id)????? 1????? )??? (msxl-put-value????? (msxl-get-borders(msxl-get-range xl id))????? 'linestylemsxl-xlnone????? )??? ));;;Examples:;;;(vlxls-cell-border *xlapp* “C12:F14” T) return:NIL ;;;(vlxls-cell-border *xlapp* “B8” NIL) return:NIL(Defun vlxls-cell-merge????? (xl id / vllist-explode Val Rtn) ;;;;;;;;;合并單元格(Defun vllist-explode2?????? (lst)??? (cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode2 (car lst))?? (vllist-explode2 (cdr lst))?? )?? ))??? )(setq val (vllist-explode2 (vlxls-cell-get-value xl id))) (while (vl-position "" val)??? (setq val (vl-remove "" val))??? )(setq?? val (car val)Rtn (msxl-get-range xl id))(msxl-clear Rtn)(msxl-merge Rtn nil)(msxl-put-value2 Rtn Val)(msxl-put-HorizontalAlignment Rtn -4108)Rtn);;;Examples:;;;(vlxls-cell-merge *xlapp* “C12:F14”) return: #(Defun vlxls-cell-unmerge (xl id / Rtn);;;取消合并單元格(if (vlxls-cell-merge-p xl id)??? (progn????? (vlax-invoke-method (msxl-get-range xl id) 'unmerge) ????? (setq Rtn (msxl-get-range xl id))????? )??? )Rtn);;;Examples:;;;(vlxls-cell-unmerge *xlapp* “C12:F14”) return:#;;;(vlxls-cell-unmerge *xlapp* “E14”) return:#(Defun vlxls-cell-merge-p (xl id);;;判斷單元格是否合并(equal (vlax-variant-value?? (msxl-get-mergecells (msxl-get-range xl id))?? ):vlax-true));;;Examples:;;;(vlxls-cell-merge-p *xlapp* “C12:F14”) return:T;;;(vlxls-cell-merge-p *xlapp* “E14”) return:NIL(Defun vlxls-cell-get-mergeid (XL ID / Rtn);;;取得單元格合并的范圍(if (vlxls-cell-merge-p xl id)??? (progn????? (msxl-select (msxl-get-range xl id))????? (setq Rtn (vlxls-range-getid (msxl-get-selection xl))) ????? )??? )Rtn);;;Examples:;;;(vlxls-cell-get-mergeid *xlapp* “C12:F14”) return: "B9:G19”;;;(vlxls-cell-get-mergeid *xlapp* “E14”) return: "A11:G19(Defun vlxls-range-getID (range / col row dx dy);;;取得單元格地址(setq?? dx (vlxls-get-property range "MergeArea.Rows.Count")dy (vlxls-get-property range "MergeArea.Columns.Count")row (vlxls-get-property range "MergeArea.Row")col (vlxls-get-property range "MergeArea.Column"))(strcat (vlxls-rangeid (list col row))":"(vlxls-rangeid (list (1- (+ col dy)) (1- (+ row dx))))));;;Examples:;;;(vlxls-range-getid RangeObject) return: ”C12:G19”;;;(vlxls-range-getid RangeObject) return: ”B16:B16”(Defun vlxls-range-size????? (range / xl row col rrr ccc xxx yyy);;;;取得單元范圍尺寸(setq?? xl (msxl-get-parent range)Row (msxl-get-count (msxl-get-rows Range))Col (msxl-get-count (msxl-get-columns Range))RRR (1- (msxl-get-row Range))CCC (msxl-get-column Range))(repeat Row??? (setq yyy (cons?? (vlax-variant-value(msxl-get-height(msxl-get-range??? xl??? (vlxls-rangeid (list CCC (setq RRR (1+ RRR))))??? )))????? yyy????? ))??? )(setq?? RRR (msxl-get-row Range)CCC (1- (msxl-get-column Range)))(repeat Col??? (setq xxx (cons?? (vlax-variant-value(msxl-get-width(msxl-get-range??? xl??? (vlxls-rangeid (list (setq CCC (1+ CCC)) RRR))??? )))????? xxx????? ))??? )(list (reverse xxx) (reverse yyy)));;;Examples:5 14.25 57.0 14.25))(Defun vlxls-Rangevalue->SafeArray (Data / XSub_GetXY XSub_GetMinMaxID xsub-MergeID->List??? MinID MaxID ID ID1 ID2 IDN X minid xy Y Rtn Item) ;;;;;;;;;;;;;安全數組(Defun xsub-MergeID->List1 (ID / KK ID1 ID2 IDX IDY Rtn)??? (Setq ID (strcase ID))??? (if??? (setq KK (vl-string-search ":" ID))????? (setq ID1?? (substr ID 1 KK)??? ID2 (substr ID (+ 2 KK))??? )????? (setq ID1?? ID??? ID2 ID)????? )??? (setq ID1 (vlxls-rangeid ID1)ID2 (vlxls-rangeid ID2)IDX (vlxls-rangeid(list (min (nth 0 ID1) (nth 0 ID2))????? (min (nth 1 ID1) (nth 1 ID2))????? ))IDY?? (vlxls-rangeid???? (list (max (nth 0 ID1) (nth 0 ID2))?? (max (nth 1 ID1) (nth 1 ID2))?? )???? )Rtn (list IDX IDY))??? Rtn??? )(Defun XSub_GetXY1 (ID SID / S10 S11 DX DY Rtn)??? (setq S10 (nth 0 MinID)S11 (nth 1 MinID)ID (vlxls-rangeid ID)DX (- (nth 0 ID) S10)DY (- (nth 1 ID) S11)Rtn (list DX DY))??? Rtn??? )。
LabVIEW中向Excel写入数据
![LabVIEW中向Excel写入数据](https://img.taocdn.com/s3/m/0694845afc4ffe473268ab41.png)
卑微如蝼蚁、坚强似大象LabVIEW 中向Excel 写入数据这里只讨论通过Activex 的方法,因为只有这种方法,才能完全发挥Excel 的所有强大的功能。
首先,Labview 是有一些自带的关于Excel 编程的例子的。
在find example 里search 一下,有挺多的,其中有一个叫write table to XL.vi,我最早就是跟着它学的。
学了不少,也被误导了很久,其实也不能算误导,只是以前没花时间去研究。
最近在用Labview 写一个类似ERP 一样的软件,接触很多Excel 表格,花了些功夫在Excel VBA 上,也算比以前有了更多的认识了。
先来看看write table to XL 这个程序:这个程序的目的就是把一个2维数组(表格)里的内容写到excel 里。
从上图看,步骤大致是这样的,先打开excel ,再打开一个workbook ,然后打开worksheet ,这实际上跟咱们使用excel 的过程是一样的。
打开worksheet 以后,它还定义了行与列的header ,最后才把table 里的数据写到excel 里。
那个cell value 子vi ,我是从开始就用它,也像这个例子一样,每次写都是套俩for loop ,然后往excel 里边猛写。
最近我才发现,原来有其他的方法,可以一次性写一个二维数组进去,非常快。
其实想想也是,不至于会那么傻了。
不过也怪VBA 里太多的属性和方法,不容易找。
前边的打开excel workbook 和worksheet 我就不说了,例子里就有,可以新建一个workbook 和sheet ,也可以打开现有的,这个在excelexample.llb里都能找到。
(excelexample在哪里?这个……,打开这些个VI,saveas一下就知道在哪里了,ok?)接下来说一下这几天找到的几个方法和属性。
首先是Insert,插入行或者列(就像你在excel里右键插入一样,每次只能一行或者一列,要多行的话,只能多来几次了,是这样吧?)在说这个之前,先说下怎么找这些属性和方法,在Excel里,打开VB编辑器(工具-》宏-》VB 编辑器,excel2007是在菜单开发工具下,我用的是Excel2007),打开以后看VB语言参考,重点就是里边的方法和属性,对应在Labview里边的Property和Method节点。
最新LabVIEW中向Excel写入数据
![最新LabVIEW中向Excel写入数据](https://img.taocdn.com/s3/m/9316a5e4d4d8d15abe234e7d.png)
LabVIEW中向Excel写入数据这里只讨论通过Activex的方法,因为只有这种方法,才能完全发挥Excel的所有强大的功能。
首先,Labview是有一些自带的关于Excel编程的例子的。
在find example里search一下,有挺多的,其中有一个叫write table to XL.vi,我最早就是跟着它学的。
学了不少,也被误导了很久,其实也不能算误导,只是以前没花时间去研究。
最近在用Labview写一个类似ERP一样的软件,接触很多Excel表格,花了些功夫在Excel VBA上,也算比以前有了更多的认识了。
先来看看write table to XL这个程序:这个程序的目的就是把一个2维数组(表格)里的内容写到excel里。
从上图看,步骤大致是这样的,先打开excel,再打开一个workbook,然后打开worksheet,这实际上跟咱们使用excel的过程是一样的。
打开worksheet 以后,它还定义了行与列的header,最后才把table里的数据写到excel里。
那个cell value子vi,我是从开始就用它,也像这个例子一样,每次写都是套俩for loop,然后往excel里边猛写。
最近我才发现,原来有其他的方法,可以一次性写一个二维数组进去,非常快。
其实想想也是,不至于会那么傻了。
不过也怪VBA里太多的属性和方法,不容易找。
前边的打开excel workbook和worksheet我就不说了,例子里就有,可以新建一个workbook和sheet,也可以打开现有的,这个在excelexample.llb里都能找到。
(excelexample在哪里?这个……,打开这些个VI,saveas一下就知道在哪里了,ok?)1接下来说一下这几天找到的几个方法和属性。
首先是Insert,插入行或者列(就像你在excel里右键插入一样,每次只能一行或者一列,要多行的话,只能多来几次了,是这样吧?)在说这个之前,先说下怎么找这些属性和方法,在Excel里,打开VB编辑器(工具-》宏-》VB 编辑器,excel2007是在菜单开发工具下,我用的是Excel2007),打开以后看VB语言参考,重点就是里边的方法和属性,对应在Labview里边的Property和Method节点。
LabVIEW怎么利用ActiveX读取Excel数据
![LabVIEW怎么利用ActiveX读取Excel数据](https://img.taocdn.com/s3/m/3401891e773231126edb6f1aff00bed5b9f373b4.png)
[][]在LabVIEW中利用ActiveX读取Excel数据网络上有很多关于读取Excel的例子,但一直没有找到读取文件中整sheet的数据,所以在这里介绍一下在LabVIEW中利用ActiveX读取文件中整张表格的内容.LabVIEW中利用ActiveX打开Excel分Open Application, Open Workbook & Open Worksheet 三个步骤,以下详细描述实现方法:1. 前面板中放下'自动化引用句柄': 引用句柄>>自动化引用句柄;2. 前面板中右击'自动化引用句柄',在'选择ActiveX类'下选择'Excel._Application'此时'自动化引用句柄'的名称会更新'Excel._Application';3. 程序框图中放下'打开自动化': 右击'Excel._Application'>>'ActiveX选板'>>'打开自动化';4. 将'Excel._Application'连线至'打开自动化'的左侧自动化引用句柄端;5. 程序框图中放下'属性节点';(同步骤3)6. 将'打开自动化'的右侧自动化引用句柄端连线至'属性节点'的引用端;7. 单击'属性节点'的属性,在下拉列表中选择'Workbooks';8. 程序框图中放下'调用节点';(同步骤3)9. 将步骤7中的'Workbooks'连线至'调用节点'的引用端;10. 单击'调用节点'的方法,在下拉列表中选择'Open';11. 在'Open'的'Filename'输入端连接所需打开Excel文件的路径;12. 同步骤5,放下'属性节点',其引用端连接'Open',然后单击'属性节点'的属性,在下拉列表中选择'Worksheets';13. 同步骤8,放下'调用节点',其引用端连接'Worksheets',然后单击'调用节点'的方法,在下拉列表中选择'Item';14. 在'Item'的'Index'输入端创建'输入控件',此'输入控件'代表Excel中的sheet#;(例如需要打开文件中的sheet2,可直接连接num 2至'Index'输入端)15. 程序框图中放下'变体至数据转换'(同步骤3),将其变体端连接至'Item';16. 同步骤1,在前面板中再次放下'自动化引用句柄',然后如步骤2方式在'选择ActiveX类'下选择'Excel._Worksheet';17. 程序框图中,将'Excel._Worksheet'连线至'变体至数据转换'的类型端;18. 同步骤5,放下'属性节点',其引用端连接'变体至数据转换'的数据端,然后单击'属性节点'的属性,在下拉列表中选择'UsedRange';19. 同步骤8,放下'调用节点',其引用端连接'UsedRange',然后单击'调用节点'的方法,在下拉列表中选择'Value(获取)';20. 同步骤15,放下'变体至数据转换',其变体端连接至'Value';21. 只要在'变体至数据转换'的类型端连接一个二维的字符型数组常量,就可以在数据端获取表格中的数据了;(连贯的程序如下)22. 程序的最后需要Close Application, Close Workbooks & Close Worksheets来关闭调用; []实例应用在写一个数据整理工具中用到的事例: Data的文件类型可以是.csv 或者.xls,其中.csv file可以通过LabVIEW中的'读取电子表格文件'工具直接读取,而.xls则需要用到Read Excel子VI 来实现实例框图如下:[前面板][程序框图][]结束分享: 分享到新浪Qing。
labview工程中常用技巧之excel报表
![labview工程中常用技巧之excel报表](https://img.taocdn.com/s3/m/aff7ae4c591b6bd97f192279168884868762b832.png)
labview工程中常用技巧之excel报表摘要:一、引言二、LabVIEW中读取Excel文件的方法1.使用ActiveX组件2.使用LabVIEW内置函数三、Excel报表在LabVIEW中的应用1.数据处理与分析2.实验结果可视化四、LabVIEW中常用Excel报表技巧1.单元格样式设置2.公式与函数应用3.数据透视表五、实例演示1.读取Excel文件并生成图表2.利用Excel报表分析数据六、总结与展望正文:一、引言在LabVIEW编程中,Excel报表的导入和处理是一项常见的任务。
LabVIEW提供了多种方法来读取和操作Excel文件,从而实现对数据的处理和分析。
本篇文章将详细介绍如何在LabVIEW中使用Excel报表,以及一些实用的技巧。
二、LabVIEW中读取Excel文件的方法1.使用ActiveX组件在LabVIEW中,可以使用ActiveX组件来读取Excel文件。
通过安装Microsoft Excel的OCX控件,LabVIEW可以调用Excel的各种功能。
具体操作如下:(1)添加ActiveX组件- 打开LabVIEW,进入“工具”>“控件选板”>“外部控件”>“Microsoft Excel”。
- 将Excel控件拖拽到程序框图上。
(2)读取Excel文件- 在Excel控件的“文件路径”属性中指定文件路径。
- 使用“读取工作表”函数读取指定工作表的数据。
2.使用LabVIEW内置函数LabVIEW还提供了内置的函数来读取Excel文件。
通过这些函数,可以方便地实现对Excel文件的导入和处理。
(1)使用“读取Excel文件”函数- 在LabVIEW中,找到“编程”>“数据导入与导出”>“读取Excel文件”函数。
- 将函数输入端子连接到程序框图上的适当位置。
- 设置文件路径和工作表编号等参数。
(2)使用“读取Excel单元格”函数- 在LabVIEW中,找到“编程”>“数据导入与导出”>“读取Excel单元格”函数。
在VB中利用ActiveX实现Excel函数的调用
![在VB中利用ActiveX实现Excel函数的调用](https://img.taocdn.com/s3/m/79b6f8b281c758f5f61f67b9.png)
在VB中利用ActiveX实现Excel函数的调用作者:迟津愉王红军来源:《硅谷》2009年第01期[摘要]Visual Basic是一个功能强大的软件开发工具,但在函数计算上却有不足之处,而Excel中包含许多Visual Basic中没有提供的数学函数,这为我们程序开发提供了便利条件,通过一个简单的例子来说明如何利用ActiveX对象实现Excel函数的调用。
[关键词]程序设计调用Excel函数中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2009)0110045-01一、问题的提出ActiveX是Microsoft对Windows和Internet构想的一个重要的组成部分。
ActiveX的总体核心是自动化(Automation)技术,该技术使得对象可在应用程序之间方便地共享。
而Visual Basic是一个功能强大的软件开发工具,它能创建一种能够定义被外部应用程序使用的ActiveX 对象的类模块,因此,自动化技术的引入使得Visual Basic成为Windows软件开发的首选工具。
虽然Visual Basic因功能强大而被广泛的应用,但在函数计算上却有不足之处,使用起来有一定的局限性。
而Excel中包含了许多Visual Basic中没有提供的数学函数,这为我们程序开发提供了便利条件,利用ActiveX对象便可方便地实现Excel函数的调用。
二、实现的方法实现Excel函数调用的代码很简单,我们只是想通过一个调用正切三角函数的简单例子来说明实现的方法,以便举一反三,灵活应用。
具体代码如下:Option ExplicitPrivate Sub Command1_Click( )'定义objxl对象Dim objxl As Object'创建Excel工作表Set objxl = CreateObject("Excel.sheet")Set objxl = objxl.Application.ActiveWorkbook.ActiveSheet '计算正切值If Text1.Text = 90 Or Text1.Text = 270ThenMsgBox "请重新输入角度"Text1.Text = ""Elseobjxl.Range("A1").Value = Text1.Textobjxl.Range("A2").Formula = "=A1*pi()/180"objxl.Range("A3").Formula = "=TAN(A2)"Label1.Caption = objxl.Range("A3").ValueSet objxl = NothingEnd IfEnd Sub运行的结果如下图:不难看出,本功能是在命令按钮的单击事件中添加相应的功能代码来实现的。
LabVIEW中利用ActiveX技术访问Excel的接口研究
![LabVIEW中利用ActiveX技术访问Excel的接口研究](https://img.taocdn.com/s3/m/3c04aa2eba68a98271fe910ef12d2af90342a84c.png)
LabVIEW中利用ActiveX技术访问Excel的接口研究董英斌;韩冰
【期刊名称】《微计算机信息》
【年(卷),期】2006(022)004
【摘要】介绍了在LabVIEW环境下利用ActiveX技术访问Microsoft Excel 2000的方法.阐述了调用节点,属性节点的使用,给出了采用此方法的实例,实现了对Excel的访问.
【总页数】3页(P165-166,36)
【作者】董英斌;韩冰
【作者单位】450008,河南省郑州市花园路20号华北水利水电学院,动力
系;450008,河南省郑州市花园路20号华北水利水电学院,动力系
【正文语种】中文
【中图分类】TP391
【相关文献】
b Windows/CVI中基于ActiveX技术的Excel访问 [J], 陈颖丽;刘繁明;王建敏
bView中利用ADO接口访问数据库的方法 [J], 黎洪生;李超;刘俊刚
bVIEW中利用ActiveX技术访问Excel的接口研究 [J], 董英斌;韩冰
4.在LabVIEW中利用ActiveX技术实现串行通信 [J], 夏星欣;戴瑜兴
5.在LabVIEW中利用ActiveX技术访问数据库 [J], 高国华;张永忠
因版权原因,仅展示原文概要,查看原文内容请购买。
使用LABVIEW读取Excel的数值数据
![使用LABVIEW读取Excel的数值数据](https://img.taocdn.com/s3/m/acc63d302bf90242a8956bec0975f46527d3a7b7.png)
使用LABVIEW读取Excel的数值数据使用LABVIEW读取Excel的数值数据一、题目概述:这是一个基于labview读取Excel的数值数据的程序。
微软的Word和Excel 是创建报表的有力的标准软件套件。
由于它们已被广泛使用,一些LABVIEW的使用者会使用LABVIEW的ActiveX接口来动态的控制这些文档处理软件,使用LABVIEW生成报表。
二、设计目的:如何在LabVIEW中读取微软Excel电子数据表中的数值数据,方便labview的使用者方便使用Excel表格中的数值数据。
三、设计总体方案:3.1设计思路我们可以使用读取测量文件的Express VI从Excel电子数据表中将数值数据读取到LabVIEW中,整个过程由以下两个步骤组成:首先将你的Excel电子数据表另存为以Tab键分割的文本文件;然后,将*.txt文件重命名为*.lvm文件。
使用读取测量文件的Express VI就可以将数值数据读取到LabVIEW中。
3.2设计方案1)打开包含了基本的数值信息的Excel电子数据表。
2)将你的Excel电子数据表另存为以T ab键分割的文本文件。
3)单击“确定”。
需要注意的是,你保存的只是活动工作表的数值数据。
4)单击“是”。
5)关闭你的Excel文档。
6)导航到你先前保存Tab键分割文本文件的目录,对你的filename.txt右击,选择“重命名”,将你的文件以.lvm的后缀命名,即命名为filename.lvm。
7)使用读取测量文件的Express VI,在配置窗口的文件名栏,选择filename.lvm,可以将你的数值电子数据表读取到LabVIEW中。
使用读取电子表格的VI:LabVIEW的读取电子表格文件的VI不能直接读取.xls的文件,只能读取分割文本文件。
如果是通过人工在读取电子表格的VI输入数据(不是使用LabVIEW的写入电子表格文件的VI)来创建的Excel电子数据表的话,该VI是无法很好地解读.xls文件的,而且将会向数组返回零值。
使用LABVIEW读取Excel的数值数据
![使用LABVIEW读取Excel的数值数据](https://img.taocdn.com/s3/m/2cd799cc2cc58bd63186bdcd.png)
使用LABVIEW读取Excel的数值数据一、题目概述:这是一个基于labview读取Excel的数值数据的程序。
微软的Word和Excel 是创建报表的有力的标准软件套件。
由于它们已被广泛使用,一些LABVIEW的使用者会使用LABVIEW的ActiveX接口来动态的控制这些文档处理软件,使用LABVIEW生成报表。
二、设计目的:如何在LabVIEW中读取微软Excel电子数据表中的数值数据,方便labview的使用者方便使用Excel表格中的数值数据。
三、设计总体方案:3.1设计思路我们可以使用读取测量文件的Express VI从Excel电子数据表中将数值数据读取到LabVIEW中,整个过程由以下两个步骤组成:首先将你的Excel电子数据表另存为以Tab键分割的文本文件;然后,将*.txt文件重命名为*.lvm文件。
使用读取测量文件的Express VI就可以将数值数据读取到LabVIEW中。
3.2设计方案1)打开包含了基本的数值信息的Excel电子数据表。
2)将你的Excel电子数据表另存为以Tab键分割的文本文件。
3)单击“确定”。
需要注意的是,你保存的只是活动工作表的数值数据。
4)单击“是”。
5)关闭你的Excel文档。
6)导航到你先前保存Tab键分割文本文件的目录,对你的filename.txt右击,选择“重命名”,将你的文件以.lvm的后缀命名,即命名为filename.lvm。
7)使用读取测量文件的Express VI,在配置窗口的文件名栏,选择filename.lvm,可以将你的数值电子数据表读取到LabVIEW中。
使用读取电子表格的VI:LabVIEW的读取电子表格文件的VI不能直接读取.xls的文件,只能读取分割文本文件。
如果是通过人工在读取电子表格的VI输入数据(不是使用LabVIEW的写入电子表格文件的VI)来创建的Excel电子数据表的话,该VI是无法很好地解读.xls文件的,而且将会向数组返回零值。
LabVIEW的ActiveX实验--调用excel(精)
![LabVIEW的ActiveX实验--调用excel(精)](https://img.taocdn.com/s3/m/635bf72c31126edb6f1a1074.png)
一台 一套
3.Excel
4.PowerPoint
一套
一套
实验原理
LabVIEW提供了强大的外部程序接口,包括DLL、CIN、ActiveX、 Matlab等。通过DLL,可以方便调用C、VC、VB等编程语言及 Windows自带的API函数;通过ActiveX,方便调用外部程序、控件 等。
利用LabVIEW调用Excel和PowerPoint提供的ActiveX来操作Excel 和PowerPoint
实验任务
1.按照介绍的“调用Excel”方法,调用Excel,并添加Excel保存程序。 参考前面板如下图:
THANK YOU FOR WATCHING
实验步骤1--调用Excel
(1)在函数面板→互连接口→ActiveX,选择“打 开自动化”,将其放在程序框图的合适位置。 (2)在“打开自动化”上单击鼠标右键,在弹出 的菜单中选择“选择ActiveX类→浏览”,出现 如图4-2所示的对话框,从类型库中选择 Microsoft Excel 11.0 Object Library Version 1.5,在对象框中,选择仅显示可创建的对象,然 后选择Application(Excel.Application.11), 单击“确定”,就可以完成Automation Refnum控件与Excel Application的连接。
LabVIEW培训
团队:晏 凯 韩 君 肖迎春 张胜宇
LabVIEW的ActiveX实验
实验目的 实验器材 实验原理 实验步骤
实验目的
1.了解LabVIEW的外部程序接口 2.掌握在LabVIEW中调用ActiveX的方法
实验器材
1.计算机 2.LABVIEW2013软件
LabVIEW中利用ActiveX技术访问Excel的接口研究
![LabVIEW中利用ActiveX技术访问Excel的接口研究](https://img.taocdn.com/s3/m/fcb44b4b2b160b4e767fcff7.png)
4 应用实例
本应用实例利用 ActiveX 技术 , 在 LabVIEW 中 打 开 Microsoft Excel , 建立一数据表 , 并写入数据 , 然后关 闭数据表 , 退出 Microsoft Excel 。 Excel 的版本为 Mi- crosoft Excel 2000 , LabVIEW 的版本为 6i。
LabVIEW5.0 以 上 版 本 开 始 支 持 ActiveX 技 术 。 LabVIEW 既 可 以 作 为 ActiveX 服 务 器 , 也 可 以 作 为 ActiveX 客户机。 LabVIEW 还能利用 ActiveX 包容器在 前 面 板 显 示 ActiveX 对 象 。 LabVIEW ActiveX 服 务 器 公布 VI 功能给 ActiveX 客户 ; ActiveX 客户 , 如 Visual Basic, Visual C++ , Excel 等 可以修改 LabVIEW 公 布的
示。 对 数 据 表 ( Sheets) 使 用 Invoke Node 调 用 其 Add 方法 , 并调用 Variant to Data 函数将变形体数据转化 为 LabVIEW 中 的 有 效 数 据 类 型 。 然 后 使 用 Invoke Node 调用 Worksheet 中的 Range 方法 , 指 定 输 出 数 据 单元格的行、 列号 ( 本例为第一行、 第一列 ) ; 通过 使用
ABSTRACT: This paper introduces a method of accessing to Microsoft Excel 2000 by using ActiveX technology in LabVIEW. The Invoke Node and Property Node are discussed. An example using this method is given and realized accessing to Excel. Key Wor ds: LabVIEW ; ActiveX; Excel
在LabVIEW中使用ActiveX
![在LabVIEW中使用ActiveX](https://img.taocdn.com/s3/m/785e1a6e48d7c1c708a14547.png)
在LabVIEW中使用ActiveX讀取Excel檔案在LabVIEW中要讀取Excel檔案有許多方法,NI公司有出一款Report Generation Toolkit的外掛模組以方便LabVIEW用戶使用。
但這Toolkit我沒有,再者這Toolkit要另外付費。
考量之下還是用ActiveX 嘗試做看看。
實際試寫程式時問題不少,相關設定找到的參考資料不多,錯誤多次後終於完成可用的程式。
程式的部份分成幾個區塊:1.第1步建立和Excel程式連接的基礎,這裡使用Automation Refnum這個元件來做,把Automation Refnum元件設定為Excel._Application,方法是在Automation Refnum元件上按右鍵,從跳出的選單中選取。
2.第2步用Property Node設定是否要開啟Excel程式來打開檔案,由於我不希望每次執行這程式都會自動打開Excel程式,所以在Visible這裡設定為不開啟Excel程式。
這一步有沒有開啟Excel程式影響到結尾要如何處理,後面的步驟再詳細說明。
3.第3步同樣用Property Node設定取得Excel程式Workbook(活頁簿)的控制權。
4.第4步用Invoke Node設定要打開的檔案,這裡使用Path元件來指定檔案路徑和檔名,基本上只要E xcel程式可以打開的檔案都可以指定。
5.第5步同樣用Property Node設定取得Excel程式Sheet(工作表)的控制權。
6.第6步用Invoke Node設定要讀取的工作表。
在這裡設定的不是工作表的名稱,而是工作表的順序編號,因此號碼的數值是從1開始。
若檔案中只有1頁工作表就直接設定為1。
7.第7步,為了後續處理要將到目前為止的資料轉換成Excel._Worksheet,方法一樣是在Automation Refnum元件上按右鍵,從跳出的選單中選取,再使用Variant To Data元件轉換資料。
LabVIEW中向Excel写入数据
![LabVIEW中向Excel写入数据](https://img.taocdn.com/s3/m/0694845afc4ffe473268ab41.png)
卑微如蝼蚁、坚强似大象LabVIEW 中向Excel 写入数据这里只讨论通过Activex 的方法,因为只有这种方法,才能完全发挥Excel 的所有强大的功能。
首先,Labview 是有一些自带的关于Excel 编程的例子的。
在find example 里search 一下,有挺多的,其中有一个叫write table to XL.vi,我最早就是跟着它学的。
学了不少,也被误导了很久,其实也不能算误导,只是以前没花时间去研究。
最近在用Labview 写一个类似ERP 一样的软件,接触很多Excel 表格,花了些功夫在Excel VBA 上,也算比以前有了更多的认识了。
先来看看write table to XL 这个程序:这个程序的目的就是把一个2维数组(表格)里的内容写到excel 里。
从上图看,步骤大致是这样的,先打开excel ,再打开一个workbook ,然后打开worksheet ,这实际上跟咱们使用excel 的过程是一样的。
打开worksheet 以后,它还定义了行与列的header ,最后才把table 里的数据写到excel 里。
那个cell value 子vi ,我是从开始就用它,也像这个例子一样,每次写都是套俩for loop ,然后往excel 里边猛写。
最近我才发现,原来有其他的方法,可以一次性写一个二维数组进去,非常快。
其实想想也是,不至于会那么傻了。
不过也怪VBA 里太多的属性和方法,不容易找。
前边的打开excel workbook 和worksheet 我就不说了,例子里就有,可以新建一个workbook 和sheet ,也可以打开现有的,这个在excelexample.llb里都能找到。
(excelexample在哪里?这个……,打开这些个VI,saveas一下就知道在哪里了,ok?)接下来说一下这几天找到的几个方法和属性。
首先是Insert,插入行或者列(就像你在excel里右键插入一样,每次只能一行或者一列,要多行的话,只能多来几次了,是这样吧?)在说这个之前,先说下怎么找这些属性和方法,在Excel里,打开VB编辑器(工具-》宏-》VB 编辑器,excel2007是在菜单开发工具下,我用的是Excel2007),打开以后看VB语言参考,重点就是里边的方法和属性,对应在Labview里边的Property和Method节点。
使用LabVIEW读取微软Excel的数值数据
![使用LabVIEW读取微软Excel的数值数据](https://img.taocdn.com/s3/m/c164821ba8114431b90dd86f.png)
使用LabVIEW读取微软Excel的数值数据主要软件:主要软件版本: 8.2.1主要软件修正版本:次要软件: N/A问题:如何在LabVIEW中读取微软Excel电子数据表中的数值数据?解答:使用读取测量文件的Express VI:你可以使用读取测量文件的Express VI从Excel电子数据表中将数值数据读取到LabVIEW中,整个过程由以下两个步骤组成:首先将你的Excel电子数据表另存为以Tab键分割的文本文件;然后,将*.txt文件重命名为*.lvm文件。
使用读取测量文件的Express VI就可以将数值数据读取到LabVIEW中。
你可以参照以下的步骤:1.打开包含了基本的数值信息的Excel电子数据表。
2.将你的Excel电子数据表另存为以Tab键分割的文本文件。
3.单击“确定”。
需要注意的是,你保存的只是活动工作表的数值数据。
4.单击“是”。
5.关闭你的Excel文档。
6.导航到你先前保存Tab键分割文本文件的目录,对你的filename.txt右击,选择“重命名”,将你的文件以.lvm的后缀命名,即命名为filename.lvm。
7.使用读取测量文件的Express VI,在配置窗口的文件名栏,选择filename.lvm,可以将你的数值电子数据表读取到LabVIEW中。
导航到你先前保存Tab键分割文本文件的目录,对你的filename.txt 右击,选择“重命名”,将你的文件以.lvm的后缀命名,即命名为filename.lvm。
使用读取电子表格的VI:LabVIEW的读取电子表格文件的VI不能直接读取.xls的文件,只能读取分割文本文件。
如果你是通过人工在读取电子表格的VI输入数据(不是使用LabVIEW的写入电子表格文件的VI)来创建你的Excel电子数据表的话,该VI是无法很好地解读你的.xls文件的,而且将会向你的数组返回零值。
你必须将你的excel 文件保存为分割文本文件,才可以在你的LabVIEW中正确地的将该 excel文件读取到你的数组中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一台 一套
3.Excel
4.PowerPoint
一套
一套
实验原理
LabVIEW提供了强大的外部程序接口,包括DLL、CIN、ActiveX、 Matlab等。通过DLL,可以方便调用C、VC、VB等编程语言及 Windows自带的API函数;通过ActiveX,方便调用外部程序、控件 等。
利用LabVIEW调用Excel和PowerPoint提供的ActiveX来操作Excel 和PowerPoint
实验步骤1--调用Excel
实验步骤1--调用Excel
实验步骤1--调用ExcelHale Waihona Puke 实验步骤1--调用Excel
实验步骤1--调用Excel
程序最终的运行结 果如。程序在指定的单 元格内写入指定的内容。 该Excel没有被保存,用 户可以增加新的属性节 点或者方法节点实现对 Excel的保存。
LabVIEW培训
团队:晏 凯 韩 君 肖迎春 张胜宇
LabVIEW的ActiveX实验
实验目的 实验器材 实验原理 实验步骤
实验目的
1.了解LabVIEW的外部程序接口 2.掌握在LabVIEW中调用ActiveX的方法
实验器材
1.计算机 2.LABVIEW2013软件
实验任务
1.按照介绍的“调用Excel”方法,调用Excel,并添加Excel保存程序。 参考前面板如下图:
THANK YOU FOR WATCHING
实验步骤1--调用Excel
(1)在函数面板→互连接口→ActiveX,选择“打 开自动化”,将其放在程序框图的合适位置。 (2)在“打开自动化”上单击鼠标右键,在弹出 的菜单中选择“选择ActiveX类→浏览”,出现 如图4-2所示的对话框,从类型库中选择 Microsoft Excel 11.0 Object Library Version 1.5,在对象框中,选择仅显示可创建的对象,然 后选择Application(Excel.Application.11), 单击“确定”,就可以完成Automation Refnum控件与Excel Application的连接。