话不多说,先上工具类。里面的逻辑是将读到的数据转存list再进行插入excel、如果是读数据库 也可以将里面的逻辑改成遍历实体,道理是一样的。excel工具类有俩种方法,java excel 和apache poi ;本文是利用apache poi 进行编写,另一种方法在另一篇文章中。
package utils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import javax.swing.filechooser.FileSystemView;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
/**
* @Author:WeiPengCheng
* @Date:2021-11-18 17:05
**/
public class ExcelUtil2 {
/**
*
* @param data 数据集合
* @param titleList excel首行标题
* @param path excel保存路径
* @param excelFile excel名称
* @throws IOException
*/
public static void writeToExcel(List<String> data, String titleList, String path, String excelFile) throws IOException {
// 获取路径
File file1 = new File(path);
if (!file1.exists()) {
file1.mkdir();
}
File file2 = new File(file1, excelFile);
if (!file2.exists()) {
file2.createNewFile();
}
File file = new File(String.valueOf(file2));
OutputStream outputStream = new FileOutputStream(file);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFCellStyle cellStyle = wb.createCellStyle();
// 设置样式对象,这里仅设置了边框属性
cellStyle.setBorderBottom(BorderStyle.THIN); // 下边框
cellStyle.setBorderLeft(BorderStyle.THIN);// 左边框
cellStyle.setBorderTop(BorderStyle.THIN);// 上边框
cellStyle.setBorderRight(BorderStyle.THIN);// 右边框
//设置自动换行
cellStyle.setWrapText(true);
// 垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setAlignment(HorizontalAlignment.CENTER);
HSSFSheet sheet = wb.createSheet("sheet1");
String[] splitTitle = titleList.split(",");
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < splitTitle.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellValue(splitTitle[i]);
cell.setCellStyle(cellStyle);
}
int a = 1;
for (int i1 = 0; i1 < data.size(); i1++) {
String[] strings = data.get(i1).split(",");
HSSFRow row1 = sheet.createRow(a);
for (int i2 = 0; i2 < strings.length; i2++) {
HSSFCell cell = row1.createCell(i2);
cell.setCellValue(strings[i2]);
cell.setCellStyle(cellStyle);
}
a++;
}
wb.write(outputStream);
wb.close();
outputStream.close();
System.out.println("报表生成成功!!");
}
}
测试:
@Test
public void test() throws IOException {
List<String> list = ExcelUtil.readTxtFileToList("C:\\Users\\86187\\Desktop\\xxx客户编码.txt");
String titleName = "编码,名称,简码,税号,地址电话,银行账号,邮件地址,备注,身份证校验";
String excelPath = "D:\\test\\record";
ExcelUtil2.writeToExcel(list,titleName,excelPath,"3.xls");
}
测试利用的读文本转存list方法 也放在下面
public static List<String> readTxtFileToList(String filePath) {
//存放内容的map对象
List<String> strings = new ArrayList<>();
try {
String encoding = "GBK";
File file = new File(filePath);
int count = 0;//定义顺序变量
if (file.isFile() && file.exists()) { // 判断文件是否存在
InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);// 考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while ((lineTxt = bufferedReader.readLine()) != null) {//按行读取
if (!"".equals(lineTxt)) {
strings.add(lineTxt);//放入list
count++;
}
}
// System.out.println("count:"+count);
read.close();//关闭InputStreamReader
bufferedReader.close();//关闭BufferedReader
} else {
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
return strings;
}
完成!! 另外一种方法我也写过 放个链接,大家可以参考参考!https://blog.csdn.net/qq_45648512/article/details/121385012https://blog.csdn.net/qq_45648512/article/details/121385012