maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
编码
@Test
public void formatLogFile() {
// 需要读取的文件
String filePath = "/Users/lizz/Documents/readDatas.xlsx";
File file = new File(filePath);
Workbook workbook = null;
try {
workbook = WorkbookFactory.create(new FileInputStream(file));
} catch (IOException e) {
e.printStackTrace();
}
// 获取文件的第几个Sheet,从0开始
Sheet sheetAt = workbook.getSheetAt(0);
int rowNum = 0;
int cellNum = 0;
//临时存储数据,这里可以根据自己的需要使用不同的存储类型
List<Map<String, String>> maps = new ArrayList<>(4096);
//循环读取数据,直到位空时
// 这里也可以固定读取行数
while (true) {
// 读取第n行数据
Row row = sheetAt.getRow(rowNum++);
if (row == null) {
break;
}
// 循环读取每行中每一列数据,值到有空值位置
// 这里也可以固定读取列数,防止某列位空就不读后面的字段了
// 比如当第一行位字段名时,可以使用字段名个数作为列的个数
Map map = new HashMap();
cellNum = 0;
while (true) {
// 获取某一列对象
Cell cell = row.getCell(cellNum++);
if (cell == null) {
break;
}
// 获取该列哪的数据,可以根据单元格类型获取数据
// 如:CellType.BOOLEAN/CellType.NUMERIC等
if (cell.getCellType() == CellType.STRING) {
String value = cell.getRichStringCellValue().getString();
map.put(cellNum, value);
}
}
maps.add(map);
}
// 保存写入文件
saveFile(maps);
}
private void saveFile(List<Map<String, String>> maps) {
HSSFWorkbook wb = new HSSFWorkbook();
// 写入execl文件的Sheet名称
HSSFSheet sheet = wb.createSheet("sheetLizz");
int outRowNum = 0;
// 单元格样式,创建过多会导致内存溢出。
// 根据自己需要设计
HSSFCellStyle style = wb.createCellStyle();
HSSFFont font = wb.createFont();
style.setFont(font);
// 写入数据
for (Map<String, String> map : maps) {
// 在第几行数据
HSSFRow row = sheet.createRow(outRowNum++);
// 在第几列写入数据
HSSFCell cell1 = row.createCell(0);
// 写入数据类型
// HSSFRichTextString为文本类型
HSSFRichTextString richString = new HSSFRichTextString(map.get(0));
// 设置单元格值
cell1.setCellValue(richString);
// 设置单元格样式
cell1.setCellStyle(style);
HSSFCell cell2 = row.createCell(1);
HSSFRichTextString richString1 = new HSSFRichTextString(map.get(1));
cell2.setCellValue(richString1);
cell2.setCellStyle(style);
HSSFCell cell3 = row.createCell(2);
HSSFRichTextString richString2 = new HSSFRichTextString(map.get(2));
cell3.setCellValue(richString2);
cell3.setCellStyle(style);
}
//输出到指定文件,不存在自动创建
try {
FileOutputStream output = new FileOutputStream("/Users/lizz/Documents/writeDatas.xlsx");
wb.write(output);
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
}