前后效果图对比
操作前:
操作后:
引入poi相关的jar包 (注:防止因为版本不一致出错 所以这里版本做了统一)
<!-- 引入poi,解析workbook视图 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
实现代码
我这里是根据第一行的第一列数据进行获取然后处理 再第三列进行追加(注:可根据不同需求进行修改处理) 最后依次循环
excel的后缀不一样 用到的Workbook也不一样 所以这里还专门有一个根据不同后缀创建不通Workbook的处理
/**
* Excel 中对 sheet 页进行多行多列数据写入操作
*
* @return
*/
public static void transformPyWb(String filePath) throws Exception {
FileInputStream fileInputStream = new FileInputStream(filePath);
Workbook workbook_des;
//获取后缀
String suffix = getSuffix(filePath);
if ("xls".equals(suffix)) {
workbook_des = new HSSFWorkbook(fileInputStream);
} else {
workbook_des = new XSSFWorkbook(fileInputStream);
}
Iterator<Sheet> iterator = workbook_des.sheetIterator();
//通过遍历迭代器获取sheet
while (iterator.hasNext()) {
Sheet sheet = iterator.next();
//判断获取的工作表是否为空
if (sheet == null) {
break;
}
/* 开始逐行遍历 */
for (int rowNum = 1, i = 1; i <= sheet.getLastRowNum(); rowNum++, i++) {
// 获取新的一行
Row row = sheet.getRow(rowNum);
int columnNum = 1;
// 针对下标为0的这一列 进行获取
Cell cell = row.getCell(0);
if (StringUtils.isEmpty(cell) || cell.equals("\\N")) {
break;
}
// 设置 Cell 类型为 String
cell.setCellType(CellType.STRING);
// 将单元格内容保存进 String 字符串
String data = new DataFormatter().formatCellValue(cell);
// 单元格数据进行业务处理并存储
row.createCell(columnNum + 1).setCellValue(data+":我是谁");
row.createCell(columnNum + 2).setCellValue("我是:"+data);
}
}
FileOutputStream out = new FileOutputStream(filePath);
//刷新输出流
out.flush();
//将数据写入excel
workbook_des.write(out);
//关闭输出流
out.close();
}
/**
* 获取后缀
*
* @param filepath 文件全路径或文件名称都可以
*/
private static String getSuffix(String filepath) {
if (StringUtils.isEmpty(filepath)) {
return "";
}
int index = filepath.lastIndexOf(".");
if (index == -1) {
return "";
}
return filepath.substring(index + 1, filepath.length());
}
版权声明:本文为博主原创文章,未经博主允许不得转载。