*.dbf转换为.xlsx:先copy为.xls文件,再把讨厌的日期格式变成与.dbf相同的格式,省时。

close data

*------打开有日期字段的表
mydbf=getfile('自由表文件:dbf','打开表','确定',0,'请取含有日期字段的表')                         
if isblank(mydbf)
    retu
else
    use (mydbf)
endif

xlsname=Sys(5) + Curdir() + alias()+'.xls'          &&给Excel文件取名

delete file (xlsname)                               &&管它原来有没有.xls文件,删了它
copy to (xlsname) type xls                          &&把当前工作区中的表copy为.xls文件,日期格式不好

oExcel=createobject("excel.application")            &&建立Excel
oExcel.visible=.t.                                  &&显示Excel
oExcel.Workbooks.Open(xlsname)                      &&在Excel中打开已经copy为xls的文件

*-------求日期字段第次i,只考虑处理一个日期型字段
for i=1 to fcount()                                 
    if type(field(i))='D'
        datei=i
        exit
    endif
endfor

iTimea=SECONDS( )            &&计时开始

*------替换日期格式,使之与当前表中格式相同
for i=1 to recc()                                   
    go i
    a=field(datei)
    cDate=dtoc(&a)
    oExcel.Workbooks[1].Worksheets[alias()].Cells[1+i,datei]=cDate
endfor

iTimeb=SECONDS( )            &&计时结束
t=allt(str(iTimeb-iTimea))   &&耗时

oExcel.Columns.AutoFit       &&让所有的列宽都自动调整 

*------调整日期列列宽:
*oExcel.Workbooks[1].Worksheets[alias()].Columns(datei).ColumnWidth=;
  oExcel.Workbooks[1].Worksheets[alias()].Columns(datei).ColumnWidth+4

oExcel.Workbooks[1].saved=.t.           &&不保存

delete file (xlsname+'x')               &&管它原来有没有.xlsx文件,删了它
oExcel.Workbooks[1].SaveAs(xlsname+'x') &&另存为.xlsx文件
delete file (xlsname)                   &&删除.xls文件
 
oExcel.Workbooks.Close      &&关闭工作簿

oExcel.Quit                 &&退出EXCEL 
Release oExcel              &&释放变量 

messageb(str(recc())+'条记录的日期替换共费时 '+t+' 秒')

use