热点推荐:
您现在的位置: 电脑学习网 >> 软件专区 >> 正文

用Excel打开DBF文件

2013-09-12 17:11:49  来源: 软件专区 
  虽然Excel已经成为最常用的数据表格软件,不过一直沿用至今的DBF格式类数据表格文件仍然在广泛使用。而且Excel和部分DBF格式的文件不兼容,Excel在打开它们时会出现“不能识别的文件格式”错误。如何解决这个问题呢?
  简单地说,制作DBF文件的软件经历了Dbase、Foxbase、Foxpro、Visual Foxpro这四个阶段,尽管这些软件产生的文件的扩展名都是DBF,但是其内部格式并不相同(格式标志是文件的第一个字节),总共有十一种之多。在Visual Foxpro 3.0之前,DBF文件称为数据库,但自Visual Foxpro 3.0开始,DBF文件就称为数据表文件,其文件格式标志为30或者31(十六进制)。Excel不能正确打开的DBF文件就是后者。(本文为WWW.SQ120.COM电脑知识网推荐文章)
  笔者在实践中发现,Excel在识别DBF文件的具体格式时只辨认第一个字节,所以我们只要将文件格式标为30或者31的改为03(十六进制),Excel就能够正确打开DBF文件。这里还有一点需要说明,上述修改方法仅适用于不包括备注型/通用型等复杂数据类型的DBF数据表文件。wWw.iTcomPuTeR.COm.CN如果DBF数据表文件包含复杂数据类型,修改后的文件在Excel中打开时可能会产生数据丢失现象。
  使用WinHex等十六进制编辑软件可以很容易地对文件进行修改,没有这类软件也可以使用Windows系统所含的一个小程序:Debug。如果你感觉到使用这个小工具修改有点儿困难,可以参照如下方法:
  假定要修改 C:\database\fox 下的表文件 student.dbf。
  首先,利用“记事本”生成纯文本文件modify.txt(存储在C:\database目录下),文件内容如下:
  n C:\database\fox\student.dbf
  l
  e 100 03
  w
  q
  其次,进入MS-DOS方式(Windows 2000及其以后版本中的命令提示符),在命令提示符下键入如下命令:
  debug < c:\database\modify.txt
  这样就很轻松地完成了修改。
  如果你要修改某个表文件的话,要做的就是修改上述两个绝对路径。  
用Excel函数快速整理错乱成绩表    

单位教务部门拿来Excel两张工作表,要把“成绩表”中成绩列数据复制到“学生基本信息表”成绩列中。我对照了两个表,发现几个难点。   

(1) “学生基本信息表”的姓名与“成绩表”中的姓名不一样,“学生基本信息表”中的“王一”在“成绩表”中为“ 王 一”,出现了全角或半角空格。   

(2) “学生基本信息表”中王小平在“成绩表”中无此人,即“学生基本信息表”的人数多于“成绩表”的人数。   

(3) “成绩表”中成绩列为文本方式,且出现了全角数字。   

(4) 每个表的数据为几千条。如果对“成绩表”中的姓名列进行排序,把成绩列进行复制粘贴到“学生基本信息表”中的成绩列,出现错位。   

我通过Excel函数SUBSTITUTE和LOOKUP来解决,将“学生基本信息表”和“成绩表”进行了一些修改,实现将“成绩表”中的数据复制到“学生基本信息表”中,并且保持最终表格的清爽和数据的正确。   

除去“成绩表”中全角或半角空格   

首先,我要解决的问题是将“成绩表”中姓名的空格去掉,让“成绩表”中的学生姓名显示和“学生基本信息表”中的一样。此时我利用替换公式 SUBSTITUTE(SUBSTITUTE(A2,"半角空格 ",""),"全角空格","")。在D2单元格输入公式=SUBSTITUTE(SUBSTITUTE(A2," ","")," ",""),然后在整个D列复制公式。选择D列数据→进行复制,再选择A列所有数据→选择性粘贴→值和数字格式。   

转化“成绩表”中成绩列为数字   

删除了空格,下面的工作就是将“成绩表”中的数字规范为半角形式。同样利用函数SUBSTITUTE。在E2单元格输入公式= (SUBSTITUTE(C2,"。","."))*1,其中SUBSTITUTE(C2,"。",".")表示句号“。”转化为点号“.”,“*1”表示转化为数字。然后在E列复制公式。同样进行选择性粘贴。选择E列数据→进行复制,再选择C列所有数据→选择性粘贴→值和数字格式。删除“成绩表”中D 列、E列。   

复制“成绩表”中数据到“学生基本信息表”   

最后一步就是复制“成绩表”中的数据到“学生基本信息表”了,但是我们不能简单地利用复制粘贴来实现,因为我们的这个具体案例中包含没有成绩的同学,所以为了数据的正确性,我们知道查询函数LOOKUP有一个特性就是在查询结束后会在指定的区域返回查询结果,我就用它来达到复制“成绩表”中数据的效果。   

其语法为LOOKUP(lookup_value,lookup_vector,result_vector)。其中Lookup_value为要查找的数值,Lookup_vector为只包含一行或一列的区域,且必须按升序排列,否则要返回错误,Result_vector 返回只包含一行或一列的区域。   

如果函数LOOKUP找不到lookup_value,则查找lookup_vector中小于或等于lookup_value的最大数值,如果 lookup_value 小于lookup_vector 中的最小值,函数LOOKUP 返回错误值 #N/A,利用这个特性,我们把公式改为=LOOKUP(1,0/(条件),引用区域),条件——产生的是逻辑值True、False数组,0 /True=0,0/false=#DIV0!,即Lookup的第2参数便是由0、#DIV0!组成的数组(都比1小),如果找到满足条件,就返回对应行引用区域的值;如果没有找到满足条件的记录则返回#N/A错误,从而实行精确查找。   

在“学生基本信息表”中D2输入公式=LOOKUP(1,0/(成绩表!A$2:A$5=B2),成绩表!C$2:C$5)。在没找到数据的一栏出现了#N/A,影响了表格的美观。稍微改进一下,利用ISNA函数判断是否为#N/A,如果是,设置为空。   

因此在D2输入公式=IF(ISNA(LOOKUP(1,0/(成绩表!A$2:A$5=B2),成绩表!C$2:C$5)),"",LOOKUP(1,0/(成绩表!A$2:A$5=B2),成绩表!C$2:C$5)),这样#N/A不会出现在单元格中,最后在D列进行公式复制即可。


巧用Emeditor批量修改字符串 最近笔者要对大量文本文件中的某个词组作修改,难道要逐个文件进行查找和替换吗?工作量可是相当大啊。这时,无意中发现Emeditor的批量替换功能,能够轻松解决这个问题。Emeditor下载地址为http://www.onlinedown.net/soft/29556.htm

首先运行Emeditor,单击菜单的“搜索→在文件中替换”。在弹出的对话框中,输入查找和替换的字符串,接着填写查找的文件类型,然后选择文件所在的目录,并勾选“兼找子文件夹”,最后单击“全部替换”按钮,稍等一会儿,即可完成字符串的批量修改。

提示:笔者尝试对.html、.doc等格式的文件进行修改,都取得了成功。但由于这些操作完成后不能被撤销,为防止对原文件的破坏,建议勾选对话框中的“保存备份”,并选择备份的目录,那么在修改前便会对原文件进行备份。

 
From:http://www.itcomputer.com.cn/Article/Software/201309/1582.html
    Copyright © 2005-2013 电脑知识网 Computer Knowledge   All rights reserved.