在仿真中可以利用ODBC直接对Excel数据进行读写操作,在进行数据的大量读写时速度相对于ActiveX更快,并且支持sql语句,更加方便。

使用方法

1. 确认仿真软件是32位还是64位。

2.确认是否安装32位或64位的Microsoft Access 2010 数据库引擎。

打开ODBC数据源(32/64位),在用户DSN处选择添加。如存在Microsoft Excel Driver,则说明已安装Microsoft Access 2010 数据库引擎,如没有,则需手动安装。

Microsoft Access 2010 数据库引擎下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=13255

3.可通过以下语句访问Excel表格。

simtalk1.0:

local Driver:string;
if is64BitApplication then
    Driver:="Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)"
else
    Driver:="Microsoft Excel Driver (*.xls)"
end;
local path :string:=selectFileForOpen("Excel Files (*.xls)|*.xls||");
local str :string:="Driver="+Driver+";FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=";
str:=str+path+";DBQ="+path+";";
odbc_XLS.DriverConnect(str);
odbc_XLS.sql(tab,"select 列名 from [表名$] where 条件;");

simtalk2.0:

var Driver:string
if is64BitApplication
    Driver:="Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)"
else
    Driver:="Microsoft Excel Driver (*.xls)"
end
var path:string:=selectFileForOpen("Excel Files (*.xls)|*.xls||")
var str :string:="Driver="+Driver+";FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="
str:=str+path+";DBQ="+path+";"
odbc_XLS.DriverConnect(str)
odbc_XLS.sql(tab,"select 列名 from [表名$] where 条件;")

 

注意事项

  1. 通过ODBC传递SQL语句时,from后的表名要用”[表名$]”的格式,不可直接写表名。
  2. 32位软件只能读取.xls格式的Excel文件,64位软件可以读取.xls, .xlsx, .xlsm, .xlsb四种格式的Excel文件。
  3. 如已安装32位office则无法安装64位Microsoft Access 2010 数据库引擎,所以当安装32位office与64位仿真软件时,无法使用此方法。
  4. SQL语句中列名为Excel中首行内容,表名为Excel中的Sheet表名。

测试模型

文件下载:ExcelODBC

软件版本:11.3

发表评论