java读Excel和下载Excel以及生成Excel
根据给定的信息,我们可以整理出以下几个关键的知识点: ### 一、Java读取Excel文件 在Java中,处理Excel文件通常会用到Apache POI库。这是一个强大的工具包,能够帮助开发者实现对Microsoft Office格式文件的读写操作,而无需安装Office软件。 #### 示例代码分析: ```java public List<List<String>> readExcel(String path) { List<List<String>> resultList = new ArrayList<>(); // 存储读取结果的列表 try (FileInputStream fileInputStream = new FileInputStream(new File(path))) { HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); // 创建工作簿对象 for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) { // 遍历所有工作表 HSSFSheet sheet = workbook.getSheetAt(numSheets); // 获取单个工作表 if (sheet != null) { for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) { // 遍历行 HSSFRow row = sheet.getRow(rowNum); // 获取单行 if (row != null) { List<String> rowList = new ArrayList<>(); // 存储单行数据 for (short cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) { // 遍历列 HSSFCell cell = row.getCell(cellNum); // 获取单元格 String cellValue = ""; // 初始化单元格值 if (cell != null) { switch (cell.getCellType()) { case NUMERIC: // 数值类型 cellValue = String.valueOf(cell.getNumericCellValue()); break; case STRING: // 字符串类型 cellValue = cell.getStringCellValue(); break; default: cellValue = "未知类型"; // 其他类型 } rowList.add(cellValue); // 添加单元格值到行列表 } } resultList.add(rowList); // 添加行列表到结果列表 } } } } } catch (IOException e) { e.printStackTrace(); } return resultList; // 返回最终的结果列表 } ``` ### 二、Java生成Excel文件 #### 示例代码分析: ```java public void generateExcel(String path, List<List<String>> data, String[] headers, String sheetName, HttpServletResponse response) throws IOException { response.setContentType("application/vnd.ms-excel;charset=GB2312"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(sheetName + ".xls", "UTF-8")); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(sheetName); // 创建表头 HSSFRow headerRow = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { headerRow.createCell(i).setCellValue(headers[i]); } // 填充数据 int rowIndex = 1; for (List<String> rowData : data) { HSSFRow row = sheet.createRow(rowIndex++); int cellIndex = 0; for (String cellData : rowData) { HSSFCell cell = row.createCell(cellIndex++); cell.setCellValue(cellData); } } // 输出流 OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); } ``` ### 三、Java下载Excel文件 在Web应用中,通过HTTP响应来实现文件下载是一种常见的做法。这里使用了`HttpServletResponse`来设置响应头,指定响应类型为Excel,并设置文件名。 #### 示例代码分析: ```java public void downloadExcel(HttpServletResponse response, String filename, List<List<String>> dataList) throws IOException { // 设置响应类型和字符集 response.setContentType("application/vnd.ms-excel;charset=GB2312"); // 设置响应头,指定文件名为附件并编码文件名 response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8")); // 使用Apache POI创建Excel工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表 HSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建表头 String[] headers = {"列1", "列2", "列3"}; // 示例表头 HSSFRow headerRow = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { headerRow.createCell(i).setCellValue(headers[i]); } // 填充数据 int rowIndex = 1; for (List<String> rowData : dataList) { HSSFRow row = sheet.createRow(rowIndex++); int cellIndex = 0; for (String cellData : rowData) { HSSFCell cell = row.createCell(cellIndex++); cell.setCellValue(cellData); } } // 输出流 OutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.flush(); outputStream.close(); } ``` 以上是关于Java中处理Excel文件的一些基础知识点,包括读取、生成和下载Excel文件的方法。希望这些信息对你有所帮助。
public List readExcel(String path) {
HSSFWorkBook workbook = new HSSFWorkBook(new fileInputStream("excel存放路径")); //读取Excel内容
for(int numSheets = 0;numSheets<sorkbook.getNumberOfSheets();numSheets++){ //判断表内个数
if(null != workbook.getSheetAt(numSheets)){
HsstSheet aSheet = Workbook.getSheetAt(numSheets); //获取一个表单
for(int rowNumOfSheet=0;rowNumOfSheet<aSheet.getLastRowNum();rowNumOfSheet++){ //判断表单的总行数
if(null != aSheet.getRow(rowNumOFSheet)){ //判断表单行是否存在
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); //实例表单的行
for(short cellNumOfRow = 0;cellNumOfRow<aRow.getLastCellNum();cellNumOfRow++){ //判断表彰列数
String strCell="";
if(null != aRow.getCell(cellNumOfRow){ //判断表单是否存在列
HSSFCell aCell = aRow.getCell(cellNumOfRow); //实例列
if(aCell.getCellType()==aCell.CELL_TYPE_NUMERIC){ //
strCell = String.valueOf(aCell.getNumericCellValue()); //
int index = strCell.indexOf("."); //
}else{
strCell = aCell.getStringCellValue(); //
}
List<String> list = new List<String>();
list.add(strCell);
}
}
}
List listrow = new ArrayList(); //把每一行封装成一个list放在一个list里面
listrow.add(list);
}
}
}
}
下面是生成Excel文件
response.setContentType("application/vnd.ms-excel;charset=GB2312"); //定义文件格式
response.setHeader("Content-Disposition", "attachment; filename=" + filename); //定义文件名字
List list = this.readExcel(path);
int size=0;
List newList=new ArrayList();
if(list.size()!=0)
for(int i=0;i<list.size();i++){
List tmp=(List)list.get(i);
size=tmp.size();
String[] temp=new String[size];
for(int j=0;j<temp.length;j++){
temp[j] = tmp.get(j)!=null?tmp.get(j).toString():"";
}
newList.add(temp);
}
String[] head = new String[11];
head[0]="受u29702 发u21345 标u31034 ";
head[1]="交u26131 类u22411 ";
head[2]="卡u21495 ";
head[3]="银u-32684 系u32479 跟u-29142 号;
head[4]="交u26131 时u-27148 ";
head[5]="交u26131 金u-26467 ";
head[6]="主u26426 流u27700 号;
head[7]="终u31471 号;
head[8]="对u26041 行u21495 ";
head[9]="当u21069 状u24577 ";
head[10]="备u27880 ";
String sheetName="退u-29401 文u20214 ";
剩余6页未读,继续阅读
- Gambler2012-10-12doc文件没有办法读取啊!
- 粉丝: 12
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- com.harmonyos4.exception.PowerFailureException(怎么解决).md
- 使用 Python 字典统计字符串中每个字符的出现次数.docx
- com.harmonyos4.exception.SystemBootFailureException(怎么解决).md
- ERR-NULL-POINTER(解决方案).md
- 计算机网络-socket-inet-master.zip
- Java编程学习路线:从基础到实战全攻略
- python爱心代码高级-6.完成链表类-大唐不夜城!.rar
- python爱心代码高级-3.阻止黑名单上的人-注意!!!.rar
- 详解冒泡排序原理、实现与优化-适用于初学者的教学与实践
- 610打印程序资源,完美驱动