Excel打开DBF文件并处理数据
Excel打开DBF文件并处理数据
1、Excel打开DBF文件
点击右上角文件。
点击打开。
点击浏览。
弹出对话框中选择所有文件。
找到想要打开的DBF文件(可以将所有文件类型更改为dBase文件,也可以不更改),点击打开进入导入向导。
选择原始数据类型为:分隔符,再选择文件原始格式为不出现乱码的格式:中文一般选择为中文简体,点击下一步进入向导第2步。
选择合适的分隔符号:以预览数据为准,我这里选择空格分割,勾选连续空格以单个处理,点击下一步进入向导第3步。
选择列数据格式:以实际情况选择,我这里选择列数据格式为常规,点击完成。
可以看到数据导入进来了,但是是很长的一行,不好看,接下来处理数据就是Excel的相关操作了。
2、Excel处理数据,将一列n行转换为n行8列(根据自己实际情况进行Excel操作,这里不再科普Excel知识)
复制所有数据。
选择一个空白单元格,粘贴选择为转置。
将一列n行转换为n行8列,选择空白单元格输入:=INDEX($A1:$A569,(ROW()-1)*7+COLUMN()-5),回车。(ROW()、COLUMN() 和 INDEX()等函数作用自行百度)
右下角出现十字光标后,往右拉8列。
再往下拉直到出现0为止。
3、将DBF文件转为Excel的最新方法(通过代码解决,java实现)
导入依赖
<!-- 引入lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 引入hutool依赖-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
<!-- 引入Hutool-poi依赖,Hutool-poi是针对Apache POI的封装,Java针对MS Office的操作的库 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<!-- 引入javadbf依赖 -->
<dependency>
<groupId>com.github.albfernandez</groupId>
<artifactId>javadbf</artifactId>
<version>1.9.2</version>
</dependency>新建DBFInfo.java
import lombok.Data;
import java.util.List;
import java.util.Map;
public class DBFInfo {
// 字段数量
private Integer fieldCount;
// 字段名
private String[] fieldName;
// 记录
List<Map<String, String>> rowList;
//记录数量
Integer recordCount;
}新建JavaDBFUtils.java
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.linuxense.javadbf.DBFReader;
import org.apache.commons.collections.CollectionUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 将dbf格式文件转换为Excel文件
*/
public class JavaDBFUtils {
public static void main(String[] args) {
String filePath = "C:\\Users\\Administrator\\Desktop\\";
DBFInfo dbfInfo = null;
try {
dbfInfo = readDBFFile(filePath+"T_JFMD_040104_20220906100214.DBF", "GBK");
System.out.println(dbfInfo);
} catch (IOException e) {
e.printStackTrace();
}
//创建实例,输出路劲
ExcelWriter writer = ExcelUtil.getWriter(filePath + "/用户信息.xlsx");
writer.write(dbfInfo.getRowList(),true);
// 关闭writer,释放内存
writer.close();
}
public static DBFInfo readDBFFile(String filePath, String charsetName) throws IOException {
DBFInfo dbfInfo = new DBFInfo();
FileInputStream inputStream = null;
DBFReader dbfReader = null;
Object[] rowVales = null;
List<Map<String, String>> rowList = new ArrayList<>();
File file = new File(filePath);
if (!file.exists()) {
System.out.println("文件路径:"+filePath+",该文件不存在!");
return dbfInfo;
}
try {
System.out.println("开始读取DBF文件,文件路径为: "+ filePath);
inputStream = new FileInputStream(filePath);
dbfReader = new DBFReader(inputStream, Charset.forName(charsetName), false);
// 字段数量
int fieldCount = dbfReader.getFieldCount();
System.out.println("读取DBF文件,字段数量为:"+ fieldCount+"个!");
// 记录数量
int recordCount = dbfReader.getRecordCount();
System.out.println("读取DBF文件,数据量为:"+ recordCount+"个!");
String[] fieldName = new String[fieldCount];
for (int i = 0; i < fieldCount; i++) {
fieldName[i] = dbfReader.getField(i).getName();
}
dbfInfo.setFieldCount(fieldCount);
dbfInfo.setFieldName(fieldName);
dbfInfo.setRecordCount(recordCount);
while ((rowVales = dbfReader.nextRecord()) != null) {
Map<String, String> rowMap = new HashMap<String, String>();
for (int i = 0; i < rowVales.length; i++) {
rowMap.put(dbfReader.getField(i).getName(), String.valueOf(rowVales[i]).trim());
}
rowList.add(rowMap);
}
if (CollectionUtils.isNotEmpty(rowList)) {
dbfInfo.setRowList(rowList);
}
return dbfInfo;
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != inputStream) {
inputStream.close();
}
if (null != dbfReader) {
dbfReader.close();
}
}
return dbfInfo;
}
}运行main函数,可以看到桌面生成了:用户信息.xlsx文件。
如有错误,欢迎评论区留言!
评论