【IDL】读写Excel的方法总结
Excel文件是在做影像处理时常用到的格式,用IDL读取的话有下面几种方法。
1、 Excel文件转存为其他格式,如txt或csv;
推荐CSV(逗号分隔值文件),IDL作为ASCII码文件直接读取解析,快捷方便;
2、 用IDL的Excel读取补丁来读取,这个是基于COM的,得仔细读下说明;
附扩展功能包。
3、 用IDL的DataMiner,它是一个开放数据库连接( ODBC )接口,借助它IDL用户可快速访问、查询并管理ODBC兼容数据库,同时也支持Oracle、Informix、Sybase、MS SQL Server等大型商用数据库。
详细调用请参考下面示例代码与注释:
;
;IDL下调用ODBC读取Excel
;
PRO Using_ODBC_EXCEL
filename = file_dirname(ROUTINE_FILEPATH('Using_ODBC_EXCEL'))+'\data.xlsx'
; 判断是否支持数据库功能
IF DB_EXISTS() EQ 0 THEN BEGIN
msg = DIALOG_MESSAGE('不支持ODBC!',/Error)
RETURN
ENDIF
; 新建数据库对象
oDatabase = OBJ_NEW('IDLdbDatabase')
; 检查当前可用数据类型
sources = oDatabase->GETDATASOURCES()
index = WHERE(sources.DATASOURCE EQ 'Excel Files',count)
IF count EQ 0 THEN BEGIN
msg = DIALOG_MESSAGE('ODBC无法读取Excel Files',/Error)
OBJ_DESTROY,oDatabase
RETURN
ENDIF
;连接数据库
IF ~FILE_TEST(filename) THEN BEGIN
msg = DIALOG_MESSAGE('找不到数据库文件!',/Error)
OBJ_DESTROY,oDatabase
RETURN
ENDIF
; 连接到我们指定的数据库文件
oDatabase->CONNECT,DATASOURCE='Excel Files;DBQ='+filename
;连接数据库
oDatabase->GETPROPERTY,IS_CONNECTED = connectStat
IF connectStat EQ 0 THEN BEGIN
msg = DIALOG_MESSAGE('数据库连接不成功...',/Error)
OBJ_DESTROY,oDatabase
RETURN
ENDIF
;读取数据库内数据,获取数据表
tables = oDatabase->GETTABLES()
nTables = N_ELEMENTS(tables)
FOR i=0, nTables-1 DO BEGIN
; 操作指定表,注意表名,要加“[]”。
tname = '[' + tables[i].NAME + ']'
PRINT, 'table name', tname
oRecordset = OBJ_NEW('IDLdbRecordset',oDatabase,table=tname);, SQL=sqlstr)
; 获取字段信息
oRecordset->GETPROPERTY,field_info = fieldinfo
NFileds = N_ELEMENTS(fieldinfo)
;获取数据表中的记录数目
IF oRecordset->MOVECURSOR(/first) THEN BEGIN
FOR j=0, NFileds-1 DO BEGIN
Value = oRecordset->GETFIELD(j)
PRINT, 'Talbe: ' + (fieldinfo.TABLE_NAME)[j] + ', ' + $
'Filed Name: ' + (fieldinfo.FIELD_NAME)[j] + ', ' + $
'Value: ', Value
ENDFOR
WHILE oRecordset->MOVECURSOR(/next) DO BEGIN
FOR j=0, NFileds-1 DO BEGIN
Value = oRecordset->GETFIELD(j)
PRINT, 'Talbe: ' + (fieldinfo.TABLE_NAME)[j] + ', ' + $
'Filed Name: ' + (fieldinfo.FIELD_NAME)[j] + ', ' + $
'Value: ', Value
ENDFOR
ENDWHILE
ENDIF ELSE BEGIN ; 一条记录都没有
msg = DIALOG_MESSAGE('数据表无记录',/Infor)
OBJ_DESTROY, oRecordset
ENDELSE
; 销毁数据库对象
OBJ_DESTROY, oRecordset
ENDFOR
OBJ_DESTROY,oDatabase
END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界