java导出excel,自定义列与行

本文介绍了一种使用Java实现的导出Excel的方法,通过创建一个包含特定标题和数据的Excel表格并提供下载功能。该方法接收一个由分号分隔的字符串来定义标题和列名,并使用一个字符串数组列表作为数据源。

 

private void createNewFolder(String folderPath) {
  try {
   File myFilePath = new File(folderPath);
   if (!myFilePath.exists()) {
    myFilePath.mkdir();
   }
  }
  catch (Exception e) {
   e.printStackTrace();
  }
 }

 

public String downloadMore(List<String[]> tjList, String name) {
  try {
   //name=new String(name.getBytes("ISO-8859-1"),"gbk");
   System.out.println("--name"+name);
   String subname=name;

   String[] strs=name.split(";");
   if(strs!=null&&strs.length>2)
   {
    subname=strs[0];//0:名字,1:第一个列民,2:第二个列民
 
   
   Date date=new Date();
   SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
   String time=sdf.format(date);
   
   int a=(int)(Math.random()*100000);
   // 通过参数拼接出文件名称
   String fileName =time +"-"+a+ ".xls";
   // 查看本地是否存在 存在直接下载
   String enc = "UTF-8";
   String realPath = ServletActionContext.getServletContext().getRealPath("");
   createNewFolder(realPath + "\\download\\");
   File downloadFile = new File(realPath + "\\download\\" + fileName);
   if (!downloadFile.exists()) {
    FileOutputStream output = new FileOutputStream(downloadFile);
    // 通过service获取到数据集合 ,然后生产 xls保存到本地
    

    // 将结果集生成 xls
    HSSFWorkbook workbook = new HSSFWorkbook();

    HSSFSheet sheet = workbook.createSheet(subname + "_" + time);

    //HSSFSheet hws=workbook.getSheet(name);
    HSSFRow rowTitle = sheet.createRow(0);
    HSSFCell titleCell = rowTitle.createCell(0);
    titleCell.setCellValue("编号");
    for(int i=1;i<strs.length;i++)
    {
      titleCell = rowTitle.createCell(i);
      titleCell.setCellValue(strs[i]);
    }
   

    for (int rowIndex = 0; rowIndex < tjList.size(); rowIndex++) {
     String[] tj=tjList.get(rowIndex);
     HSSFRow row = sheet.createRow(rowIndex + 1);
     HSSFCell cell = row.createCell(0);
     cell.setCellValue(new HSSFRichTextString(rowIndex+""));
     for(int k=0;k<tj.length;k++)
     {
      cell = row.createCell(k+1);
         cell.setCellValue(new HSSFRichTextString(tj[k]));
     }
     
    }
    sheet.setColumnWidth(0, 0);
    workbook.write(output);
   }
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("application/octet-stream");
   long length = downloadFile.length();
   response.setContentLength(Long.valueOf(length).intValue());
   fileName = URLEncoder.encode(downloadFile.getName(), enc);
   response.addHeader("Content-Disposition", "attachment; filename=" + fileName);

   ServletOutputStream servletOutputStream = response.getOutputStream();
   FileInputStream fileInputStream = new FileInputStream(downloadFile);
   BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
   int size = 0;
   byte[] b = new byte[4096];
   while ((size = bufferedInputStream.read(b)) != -1) {
    servletOutputStream.write(b, 0, size);
   }
   servletOutputStream.flush();
   servletOutputStream.close();
   bufferedInputStream.close();
  }

  }
  catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 }

 

参数说明:

List<String[]>tjList   ,String name  :name是由;隔开的一串字符串,第一个为标题,第二个为行名(所有行名一样的情况),从第三个开始为列名,可以自定义个数,但要和tjList中的个数对应

此方法其实还可以继续改造的,标题,行名可以传单独的参数过来,列名可以用一个数组传过来,这样更方便明了,容易看懂

 

使用 Java 导出 Excel 自定义模板可以按以下步骤进: ### 引入依赖 在 Maven 的 `pom.xml` 文件中引入 Apache POI 相关依赖,用于处理 Excel 文件: ```xml <!-- excel工具 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 上述依赖可以支持 Java 操作 Excel 文件,为后续自定义模板导出提供基础功能 [^1]。 ### 前端代码示例 在前端可以通过 JavaScript 代码实现调用后端接口进 Excel 导出。以下是一个示例: ```javascript function excelExportAll() { // 类型选中得值 var selectVal = $('#code').val(); // 关键字 var sq = $("#sqSearch").val(); var end = $("#endPicker").val(); window.location.href = BaseUtil.getCxtPath() + "/flow/export?code=" + selectVal + "&sq=" + sq + "&end=" + end; } ChangePage.prototype.init = function () { $('.change_infor').click(function () { $('#exporta').show(); $('.rjz_wrepper').show(); $('.change_infor').css({'background': '#2d7ec4'}) }) } new ChangePage(); ``` 此代码通过获取表单中的相关值,然后构造 URL 调用后端的导出接口,实现 Excel 导出的触发 [^2]。 ### 后端 Java 代码示例 以下是一个简单的后端 Java 代码示例,用于处理 Excel 导出: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; public class ExcelExportUtil { public static void exportExcel(HttpServletResponse response) throws IOException { // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row headerRow = sheet.createRow(0); String[] headers = {"1", "2", "3"}; for (int i = 0; i < headers.length; i++) { Cell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); } // 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=custom_template.xlsx"); // 输出流 OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); workbook.close(); outputStream.flush(); outputStream.close(); } } ``` 此代码创建了一个包含表头的简单 Excel 文件,并将其通过响应流输出给客户端,实现 Excel 导出。 ### 生成 Excel 下拉框数据 如果需要在模板中生成 Excel 下拉框数据,可以使用数据验证来实现: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFDataValidation; import org.apache.poi.xssf.usermodel.XSSFDataValidationConstraint; import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper; import org.apache.poi.xssf.usermodel.XSSFSheet; public class ExcelDropdownUtil { public static void addDropdown(Sheet sheet) { XSSFSheet xssfSheet = (XSSFSheet) sheet; XSSFDataValidationHelper validationHelper = new XSSFDataValidationHelper(xssfSheet); String[] dropdownValues = {"选项1", "选项2", "选项3"}; XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint) validationHelper.createExplicitListConstraint(dropdownValues); CellRangeAddressList addressList = new CellRangeAddressList(1, 100, 1, 1); XSSFDataValidation validation = (XSSFDataValidation) validationHelper.createValidation(constraint, addressList); xssfSheet.addValidationData(validation); } } ``` 此代码在指定的单元格范围内添加了下拉框数据,实现了自定义模板中下拉框的生成。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值