从EXCEL读取数据时,如何区分日期时间值和金额值?(50)

D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
无论是excel还是delphi里,日期时间是以浮点值保存。而金额等数据本身也是浮点值。当读取EXCEL文件时,如果预先不知道列的值类似,这时候怎么区分日期时间值和金额值?原来是用OLE方式,现在用XLSRW组件,先后都遇到这个问题。有合适答案,马上结贴。
 
C

cmd9x

Unregistered / Unconfirmed
GUEST, unregistred user!
用ADO连接EXCEL,用SELECT * FROM [$Sheet1]来查询EXECL是Sheet1的数据然后for循环,检查Fields.Field.FieldType
 
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
哦忘了介绍了。我不是用ADO原来是用OLE方式,现在用XLSRW组件,先后都遇到这个问题。先谢谢楼上,以后用ADO时就知道了。
 
Z

zkktom

Unregistered / Unconfirmed
GUEST, unregistred user!
最笨的方式就是 try stringtodate() stringtofloat() except 出错就不是金额或日期了
 
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
我的意思 是区分 日期时间和金额。不是区分日期时间金额 和其他类型。比如156654.56怎么知道这个是日期时间值还是金额值?
 
S

szhcracker

Unregistered / Unconfirmed
GUEST, unregistred user!
用TryFloatToDateTime()试试
 
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
楼上的方法也无法区分的。我原来的读取方式是OLE,现在用的是XLSReadWriteII组件。这个组件有单元格对象,也有单元格类型可以判断。但是根据 ctFloat, //* Floating point cell.同样无法区分这个单元格是日期时间值,还是普通的浮点数(金额这样的)值?//* Cell type constants.type TCellType = (ctNone, //* Undefined cell. ctBlank, //* Blank cell. ctNotUsed, //* Not used value. ctInteger, //* Integer cell. ctFloat, //* Floating point cell. ctString, //* String cell. ctBoolean, //* Boolean cell. ctError, //* Cell with an error value. ctNumberFormula, //* Formula cell where the result of the formula is a numeric value. ctStringFormula, //* Formula cell where the result of the formula is a string value. ctBooleanFormula, //* Formula cell where the result of the formula is a boolean value. ctErrorFormula, //* Formula cell where the result of the formula is an error value. ctNumberArrayFormula, //* Array formula cell where the result of the formula is a numeric value. ctStringArrayFormula //* Array formula cell where the result of the formula is a string value. );
 
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
看来这个问题还是有难度。其实就是这个问题。假设有个EXCEL表格,有3列数据,分别是字符数据列,日期时间列,金额列。但不知道列的顺序,也就是说不知道列对应的数据类型。现在要把这个EXCEL表格的数据用OLE,或者XLSRW组件读取到一个StringGrid里。
 
D

delhpi

Unregistered / Unconfirmed
GUEST, unregistred user!
接受答案了.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
959
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部