Java 实现获取Excel模板并写入数据,再实现下载

/**
* 下载
*
* @return
*/
@ApiOperation(value = “下载”, response = Result.class)
@RequestMapping(value = “/exoprtAllList.do”, method = RequestMethod.GET)
public Result exoprtAllAdjustList(HttpServletResponse response) throws IOException {
try {
service.exoprtAllList( response);
} catch (Exception e) {
// TODO Auto-generated catch block
log.error(“下载出差啦。。” + e.getMessage(), e);
}
return ResultUtil.success();

}

@Override
public void exoprtAllList(HttpServletResponse response) {

	List<AssetConversionDownloadExcel> list = baseMapper.queryDownloadExcelsList();
	
	writeExcel(response, list);
	
}

private void writeExcel(HttpServletResponse response, List list) {
//File newFile = new File(GlobalConstant.ZGSQ_FILE_PATH);
File newFile = new File(“D:\工作笔记\2003\资产转固\固定资产增置单5.xlsx”);

    //新文件写入数据,并下载*****************************************************
    InputStream is = null;
    XSSFWorkbook xSSFWorkbook=null;
    XSSFSheet xSSFSheet=null;
    try {
        is = new FileInputStream(newFile);
        xSSFWorkbook = new XSSFWorkbook(is);
        //获取第一个sheet
        xSSFSheet = xSSFWorkbook.getSheetAt(0);
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    
    if(xSSFSheet != null){
        try {
            //写数据
            FileOutputStream fos = new FileOutputStream(newFile);
            //构建每行的数据内容
            int rowNum = 1;
            for (AssetConversionDownloadExcel data : list) {
            	if (data == null) {
                    continue;
                }
                //输出行数据
                Row row = xSSFSheet.createRow(rowNum++);
                int cellNum = 0;
                Cell cell;
                // 序号
                cell = row.createCell(cellNum++);
                cell.setCellValue(cellNum);
                // 项目编号
                cell = row.createCell(cellNum++);
                cell.setCellValue(null == data.getProjectNo() ? "" : data.getProjectNo());
                // 项目名称
                cell = row.createCell(cellNum++);
                cell.setCellValue(null == data.getProjectNm() ? "" : data.getProjectNm());
                // 所在金额
                cell = row.createCell(cellNum++);
                cell.setCellValue(null == data.getProjectAmount() ? null : data.getProjectAmount());
              
			}
            xSSFWorkbook.write(fos);
            fos.flush();
            fos.close();
            
            //下载
           InputStream fis = new BufferedInputStream(new FileInputStream(newFile));
           
           byte[] buffer = new byte[fis.available()];
           fis.read(buffer);
           fis.close();
           response.reset();
           response.setContentType("text/html;charset=UTF-8");
           OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
              response.setContentType("application/x-msdownload");
              String newName = URLEncoder.encode("固定资产增置单"+System.currentTimeMillis()+".xlsx", "UTF-8");
              response.addHeader("Content-Disposition", "attachment;filename=\""+ newName + "\"");
              response.addHeader("Content-Length", "" + newFile.length());
           toClient.write(buffer);
           toClient.flush();
        }
        catch(Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (null != is) {
                    is.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用POI将Excel模板写入数据并保存本地的工具类示例: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class ExcelWriter { private File file; private Workbook workbook; public ExcelWriter(String filePath) throws IOException { file = new File(filePath); workbook = WorkbookFactory.create(new FileInputStream(file)); } public void writeData(String[] sheetNames, Map<String, Object[][]> data) throws IOException { for (String sheetName : sheetNames) { Sheet sheet = workbook.getSheet(sheetName); Object[][] sheetData = data.get(sheetName); if (sheetData != null) { int rowIndex = 0; for (Object[] rowData : sheetData) { Row row = sheet.getRow(rowIndex); if (row == null) { row = sheet.createRow(rowIndex); } int columnIndex = 0; for (Object cellData : rowData) { Cell cell = row.getCell(columnIndex); if (cell == null) { cell = row.createCell(columnIndex); } if (cellData != null) { if (cellData instanceof Number) { cell.setCellValue(((Number) cellData).doubleValue()); } else if (cellData instanceof String) { cell.setCellValue((String) cellData); } else if (cellData instanceof Boolean) { cell.setCellValue((Boolean) cellData); } else { cell.setCellValue(cellData.toString()); } } columnIndex++; } rowIndex++; } } } } public void save() throws IOException { workbook.write(new FileOutputStream(file)); workbook.close(); } public static void main(String[] args) throws IOException { ExcelWriter writer = new ExcelWriter("template.xlsx"); Map<String, Object[][]> data = new HashMap<String, Object[][]>(); data.put("Sheet1", new Object[][] { { "A1", "B1", "C1" }, { "A2", "B2", "C2" } }); data.put("Sheet2", new Object[][] { { "X1", "Y1", "Z1" }, { "X2", "Y2", "Z2" } }); writer.writeData(new String[] { "Sheet1", "Sheet2" }, data); writer.save(); } } ``` 使用示例: 1. 创建Excel文件"template.xlsx",在Sheet1和Sheet2中分别添加3列数据; 2. 在Java中使用ExcelWriter类读取"template.xlsx"文件; 3. 调用writeData方法向Sheet1和Sheet2中写入数据; 4. 调用save方法保存更新后的Excel文件。 注意:ExcelWriter类中的写入数据方法是覆盖式写入,即会清空原有数据写入数据。如果需要追加数据,需要修改方法实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值