请问如何将TEXT字段类型的内容导出显示在EXCEL里?

fionazou 2012-02-06 01:50:53
在数据工作期里看到的内容是MEMO,导出在EXCEL里这个字段就不见了,请问有什么办法吗?
...全文
316 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lygcw9602 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 fionazou 的回复:]
在数据工作期里看到的内容是MEMO,导出在EXCEL里这个字段就不见了,请问有什么办法吗?
[/Quote]
为了这个问题,我查阅了有关资料,要想解决这个问题,单纯的一条命令是不够的,要通过代码编程的方法,逐条记录导出到EXCEL中,这样就能看到备注字段的内容了。这种方法经过验证是可行的。具体代码如下(转载):
CLOSE DATABASES ALL
SET DATE YMD
SET CENTURY ON
cDbfFile = GETFILE("dbf")
IF EMPTY(cDbfFile)
RETURN
ENDIF
USE (cDbfFile) ALIAS FoxTable IN 0
IF NOT USED("FoxTable")
=MESSAGEBOX("打开表失败,程序将中止!", 16, "Error")
RETURN
ENDIF
cExcelFile = PUTFILE("保存为(&N):",JUSTSTEM(cDbfFile)+".xls","xls")
IF EMPTY(cExcelFile)
CLOSE DATABASES ALL
RETURN
ENDIF
SELECT FoxTable
oExcelSheet = GETOBJECT("","Excel.Sheet") && 产生Excel对象
IF NOT TYPE("oExcelSheet") = "O"
=MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")
RETURN
ENDIF
oExcelApp = oExcelSheet.Application
oExcelApp.Workbooks.Add()
oExcelApp.ActiveWindow.WindowState=2
oSheet = oExcelApp.ActiveSheet
nFldCount = AFIELDS(aFldList, "FoxTable")
FOR i = 1 TO nFldCount
oSheet.Cells(1,i).Value = aFldList[i, 1]
ENDFOR
cRecc = STR(RECCOUNT("FoxTable"))
SCAN
WAIT WINDOW ALLTRIM(STR(RECNO())) + "/" + cRecc NOWAIT
FOR i = 1 TO nFldCount
vValue = .NULL.
IF AT(aFldList[i, 2], "CDLMNFIBYT") = 0
LOOP
ENDIF
cFldName = aFldList[i, 1]
vValue = EVALUATE(cFldName)
DO CASE
CASE aFldList[i, 2] = "C" && 字符/字符串
vValue = TRIM(vValue)
CASE aFldList[i, 2] = "D" && 日期
vValue = DTOC(vValue)
CASE aFldList[i, 2] = "T" && 日期时间
vValue = TTOC(vValue)
CASE INLIST(aFldList[i, 2], "N", "F", "I", "B", "Y") && 数值
CASE aFldList[i, 2] = "L" && 逻辑
CASE aFldList[i, 2] = "M" && 备注型
OTHERWISE
vValue = .NULL.
ENDCASE
IF VARTYPE(vValue) = "C" AND EMPTY(vValue)
LOOP
ENDIF
IF NOT ISNULL(vValue)
oSheet.Cells(RECNO("FoxTable")+1, i).Value = vValue
ENDIF
ENDFOR
ENDSCAN
cChrStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
FOR i = 1 TO nFldCount
cColumn = SUBSTR(cChrStr, INT((i-1)/26), 1) + SUBSTR(cChrStr, IIF(MOD(i, 26)= 0, 26, MOD(i, 26)) , 1)
oSheet.Columns(cColumn + ":" + cColumn).ColumnWidth = 12
IF aFldList[i, 2] = "M"
oSheet.Columns(cColumn + ":" + cColumn).WrapText = .F.
ENDIF
ENDFOR
oExcelApp.ActiveWorkbook.SaveAs(cExcelFile)
oExcelApp.ActiveWorkbook.Close(.F.)
oExcelApp.ActiveWorkbook.Close(.F.)
oExcelApp.Quit
oExcelSheet = .NULL.
oExcelApp = .NULL.
WAIT CLEAR
=MESSAGEBOX("转换完毕!", 64, "OK")
CLOSE DATABASES ALL

这段代码根据自己的需要,可以修改。
lygcw9602 2012-02-06
  • 打赏
  • 举报
回复
是在当前表复制的吗
fionazou 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lygcw9602 的回复:]

你的代码怎么写的
[/Quote]
COPY TO 结果.xls XL5 memo col
lygcw9602 2012-02-06
  • 打赏
  • 举报
回复
你的代码怎么写的
fionazou 2012-02-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lygcw9602 的回复:]

如果导出全部备注字段内容,请加范围语句,ALL
该命令是FOXPRO2.5 中经常使用的命令
use aa
COPY TO cc.xls XL5 memo bb
[/Quote]
按照您说的,结果导出了一张空白的EXCEL.
lygcw9602 2012-02-06
  • 打赏
  • 举报
回复
如果导出全部备注字段内容,请加范围语句,ALL
该命令是FOXPRO2.5 中经常使用的命令
use aa
COPY TO cc.xls XL5 memo bb
lygcw9602 2012-02-06
  • 打赏
  • 举报
回复
use aa
COPY TO cc.xls XL5 memo bb
fionazou 2012-02-06
  • 打赏
  • 举报
回复
十豆三老师,你有办法吗?
lygcw9602 2012-02-06
  • 打赏
  • 举报
回复
文本文件有格式吗
lc_apple 2012-02-06
  • 打赏
  • 举报
回复
不知道有啥好的办法

我一般是把memo中的内容转换成字符串(长度超过254,就得多弄几个字段了),然后再导出

假如表aa的memo字段字段名为bb

select left(bb,100) as bbb from aa
copy to cc.xls xl5

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧