七库下载 手游攻略 手游攻略 java实现文件导入功能,java导出多个文件

java实现文件导入功能,java导出多个文件

时间:2024-04-23 11:37:03 来源:头条 浏览:0

1. 介绍使用Java实现文件进行数据库导入导出。这是大多数系统上相对常见的功能。今天我们将创建一个小demo来了解其原理。即使你是一个从未接触过这个的学生,也请看下面。供你参考。

我目前使用的导入导出技术主要是POI和iReport,POI主要是将数据批量导入到数据库中,iReport用于导出报表。还有一种类似JXL的POI方法,不过好像很久没有更新了,而且似乎不支持Office 2007以上版本,这里就不讨论了。

2. 如何使用POI 的详细说明2.1 什么是Apache POI? Apache POI 是Apache 软件基金会的一个开源函数库,为Java 程序读写Microsoft Office 格式文件提供API。

2.2 导入POI jar包本教程使用Maven项目,使用jar包版本poi-3.14和poi-ooxml-3.14。目前最新版本是3.16。请注意,3.15之后相关API将会更新,因此部分操作可能会有所不同。

org.apache.poipoi3.14org.apache.poipoi-ooxml3.142.3 POI API 描述2.3.1 结构HSSF - 提供读写Microsoft Excel 格式文件的能力。 XSSF - 提供Microsoft Excel OOXML 格式文件的读写功能。 HWPF - 提供读写Microsoft Word 格式文件的能力。 HSLF - 提供读取和写入Microsoft PowerPoint 格式文件的能力。 HDGF - 提供Microsoft Visio 格式文件的读写功能。

2.3.2 对象本文主要介绍两个组件:HSSF 和XSSF,简单来说,HSSF 是用来和Excel 一起工作的。

HSSF 包含在org.apache.poi.hssf.usermodel 包中。实现.xls 格式Excel 文件的工作簿接口。

常用组件:

HSSFWorkbook : Excel 文档对象HSSFSheet : Excel 表格HSSFRow : Excel 行HSSFCell : Excel 网格单元HSSFFont : Excel 字体HSSFDataFormat: 日期格式HSSFHeader : Sheet 页眉HSSFFooter : Sheet 页脚(仅打印时有效)

风格:

HSSFCellStyle : 单元样式

辅助操作包括:

HSSFDateUtil : DateHSSFPrintSetup : 打印HSSFErrorConstants : 错误信息表

XSSF 包含在org.apache.xssf.usemodel 包中,并为.xlsx 格式的Excel 文件实现了Workbook 接口。

常用组件:

XSSFWorkbook : Excel 文档对象XSSFSheet: Excel 表单XSSFRow: Excel 行XSSFCell: Excel 网格单元格XSSFFont: Excel 字体

与HSSF 类似。

2.3.3 两个组件的公共字段类型说明两个组件实际上是Excel 的两种形式,大部分操作是相同的。

单元格类型说明CELL_TYPE_BLANK 表示空白单元格CELL_TYPE_BOOLEAN 表示布尔单元格(true 或false) CELL_TYPE_ERROR 表示单元格中的错误值CELL_TYPE_FORMULA 表示单元格公式的结果CELL_TYPE_NUMERIC 表示单元格中的数字数据CELL_TYPE_STRING 表示单元格字符串(文本) 2.3 .4 操作流程以HSSF为例,但XSSF操作相同。

首先,了解Excel文件的格式。 Excel 文件相当于工作簿(HSSFWorkbook)。工作簿可以由多个工作表(HSSFSheet) 组成。一个工作表由多行(HSSFRow) 组成。一条线由以下部分组成:多个单元(HSSFCell)。

1.使用HSSFWorkbook打开或创建“Excel文件对象”

2.使用HSSFWorkbook对象返回或创建Sheet对象

3. 使用Sheet对象返回一个行对象,并使用该行对象获取一个Cell对象。

4. 读写Cell对象。

3. 使用代码3.1 渲染图规则,粘贴代码之前检查渲染

一个Excel 文件有两种格式:

代码结构:

导入后:(我导入了两次,没有验证)

导出效果:

3.2 详细代码解释这里基于Spring+SpringMVC+Mybatis,扩展版:SpringBoot+Mybatis多模块(module)项目搭建教程

控制器:

packagecom.allan.controller;导入java.util.List;导入javax.servlet.http.HttpServletResponse;导入org.apache.poi.ss.formula.functions.Mode;导入org.springframework.beans.factory.annotation.Autowired;导入org.springframework. stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg . springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.multipart.MultipartFile;importorg.springframework.web.servlet.ModelAndView;importcom.allan.pojo.Student;importcom.allan.service.StudentService;/*** *@author小店佬**/@ControllerpublicclassStudentController{@AutowiredprivateStudentServicestudentService;/***批量表单数据导入**@paramrequest*@parammyfile*@return*/@RequestMapping(value='/importExcel',method=RequestMethod.POST )publicStringimportExcel(@RequestParam('myfile')MultipartFilemyFile){ModelAndViewmodelAndView=newModelAndView();try{Integernum=studentService.importExcel(myFile);}catch(Exceptione){modelAndView.addObject('msg',e.getMessage() ) ;return'index';}modelAndView.addObject('msg','数据导入成功');return'index';}@RequestMapping(value='/exportExcel',method=RequestMethod.GET) publicvoidexportExcel( HttpServletResponseresponse ){尝试{studentService.exportExcel(response);}catch(Exceptione){e.printStackTrace();}}}服务

packagecom.allan.service.impl;导入java.io.OutputStream;导入java.text.DecimalFormat;导入java.text.SimpleDateFormat;导入java.util.Date;导入java.util.List;导入javax.servlet.http.HttpServletResponse;导入org.apache。 commons.lang.StringUtils;导入org.apache.poi.hssf.usermodel.HSSFCell;导入org.apache.poi.hssf.usermodel.HSSFCellStyle;导入org.apache.poi.hssf.usermodel.HSSFDateUtil;导入org.apache.poi.hssf。 usermodel.HSSFRow;导入org.apache.poi.hssf.usermodel.HSSFSheet;导入org.apache.poi.hssf.usermodel.HSSFWorkbook;导入org.apache.poi.ss.usermodel.Cell;导入org.apache.poi.ss.usermodel。行;导入org.apache.poi.ss.usermodel.Sheet;导入org.apache.poi.ss.usermodel.Workbook;导入org.apache.poi.xssf.usermodel.XSSFWorkbook;导入org.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Service;importorg.springframework.web.multipart.MultipartFile;importcom.allan.mapper.StudentMapper;importcom.allan.pojo.Student;importcom.allan.service.StudentService;/****@authorsmall 老卖商店的人**/@ServicepublicclassStudentServiceImplementsStudentService{privatefinalstaticStringXLS='xls';privatefinalstaticStringXLSX='xlsx';@AutowiredprivateStudentMapperstudentMapper;/***Excel导入兼容xls和xlsx*/@SuppressWarnings('resource')publicIntegerimportExcel (MultipartFilemyFile) throwsException {//1. 使用HSSFWorkbook 打开或创建“Excel 文件对象” ////2. 使用HSSFWorkbook 对象返回或创建Sheet 对象////3. 使用Sheet 对象返回行对象,并使用该行对象检索Cell 对象////4. 读取并写入Cell 对象。

//获取文件名Workbookworkbook=null;StringfileName=myFile.getOriginalFilename();if(fileName.endsWith(XLS)){//2003workbook=newHSSFWorkbook(myFile.getInputStream());}elseif(fileName.endsWith(XLSX) ) {//2007workbook=newXSSFWorkbook(myFile.getInputStream());}else{thrownewException('文件不是Excel 文件');}Sheetsheet=workbook.getSheet('Sheet1');introws=sheet.getLastRowNum(); //查看行数,总行数+ if(rows==0){thrownewException('请输入数据');}for(inti=1;i=rows+1;i++ ){//左上角读取cell Rowrow=sheet.getRow(i);//行不为空if(row!=null){//**读取单元格**Studentstudent=newStudent();//Name Stringname=getCellValue(row.getCell(0) ));student.setName(name);//类Stringclasses=getCellValue(row.getCell(1));student.setClasses(classes);//分数StringscoreString=getCellValue(row.getCell( 2));if(! StringUtils.isEmpty(scoreString)){Integerscore=Integer.parseInt(scoreString);student.setScore(score);} //考试时间SimpleDateFormatsdf=newSimpleDateFormat('yyyy-MM-dd');//小写mm代表分钟StringdateString=getCellValue(row.getCell(3));if(!StringUtils.isEmpty(dateString)){Datedate=sdf.parse(dateString);student.setTime(date);}studentMapper 马苏. insert(student);}} returnrows-1;}/***获取单元格内容**@paramcell*@return*/publicStringgetCellValue(Cellcell){Stringvalue='';if(cell!=null){//判断下面的数据类型switch(cell .getCellType()){caseHSSFCell.CELL_TYPE_NUMERIC://数值=cell.getNumericCellValue()+'';if(HSSFDateUtil.isCellDateFormatted(cell)){Datedate=cell.getDateCellValue() ;if( date!=null){value=newSimpleDateFormat('yyyy-MM-dd').format(date);}else{value='';}}else{value=newDecimalFormat('0').format( Cell.getnumaRiccellValue ());}break; Casehssfcell.cell_String: //字符串值=Cell.getStringcellValue (); Breasf; Casehssf; Cell.cell_Type_boolean: //布尔值=Cell.getbooleancellValue ()+''; 蓝调; 漂白; casehssfcell.cell_type_formula: //公式value=cell.getCellFormula()+' ';break;caseHSSFCell.CELL_TYPE_BLANK://空值='';break;caseHSSFCell.CELL_TYPE_ERROR://故障值='非法字符';break;default:value='未知类型'; break; }}returnvalue.trim(); }/***导出Excel文件*/publicvoidexportExcel(HttpServletResponseresponse)throwsException{//第一步创建与Excel文件对应的webbook HSSFWorkbookwb=newHSSFWorkbook( );//第二步SheetHSSFSheetsheet=wb.createSheet('Sheet1');//第三步将标题行0添加到sheet中。请注意,旧版本的POI 对行数有限制。 Excel 列和shortHSSFRowrow=sheet.createRow(0 );//第四步创建单元格并设置值标题。将标题居中。 HSSFCellStylestyle=wb.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //创建居中格式HSSFCell=row.createCell( 0);cell.setCellValue('name');cell.setCellStyle(style); cell=row.createCell(1);cell.setCellValue('class');cell .setCellStyle(style);cell=row.createCell(2);cell.setCellValue('score');cell.setCellStyle(style); cell=row.createCell(3);cell.setCellValue('time');cell .setCellStyle(style);//第五步、写入实体数据在真实的应用程序中,这些数据会从数据库中检索。 Listlist=studentMapper.selectAll();for(inti=0;i3.3 文件导出API补充可以看到上面的服务代码只是最基本的导出。

实际应用程序通常需要读取和打印导出的Excel 文件,这需要对输出Excel 文档进行格式化和样式设置。关键操作包括合并单元格、设置单元格样式、设置字体样式等。

3.3.1 Cell合并使用HSSFSheet的addMergedRegion()方法

publicintaddMergedRegion(CellRangeAddressregion) 参数CellRangeAddress表示合并区域,构造如下:起始行、结束行、起始列、结束列。

CellRangeAddress(intfirstRow,intlastRow,intfirstCol,intlastCol)3.3.2 设置单元格行高和列宽HSSFSheetsheet=wb.createSheet();sheet.setDefaultRowHeightInPoints(10);//设置默认列高sheet.setDefaultColumnWidth(20) ) ;//设置默认列宽//设置指定列的列宽。宽度参数单位是单个字符的1/256,所以写成256*50 Sheet.setColumnWidth(cell.getColumnIndex(),256* 50) ;3.3.3 设置单元格样式1. 创建HSSFCellStyle 来做。

HSSFCellStylecellStyle=wkb.createCellStyle()2.样式设置

//设置单元格的水平和垂直对齐方式。没有列出具体参数。请参见HSSFCellStyle cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER)。 /*设置单元格填充方式和前景色关于背景色的三个注意事项: 1.如果想要前景色或背景色,必须指定填充方式。两者的顺序并不重要。 2、如果同时有前景色和背景色,则需要指定填充方式。前景色设置必须先写; 3、前景色不是字体颜色。 *///设置填充方式(填充图案) cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS);//设置前景色cellStyle.setFillForegroundColor(HSSFColor.RED.index);//设置背景色cellStyle.setFillBackgroundColor(HSSFColor. LIGHT_YELLOW.index ); //设置单元格的下边框及其样式和颜色//这里我们只设置下边框。同样可以设置左边框、右边框、上边框cellStyle.setBorderBottom(HSSFCellStyle. BORDER_SLANTED_DASH_DOT);cellStyle.setBottomBorderColor( HSSFColor.DARK_RED.index);//设置日期数据显示样式cellStyle.setDataFormat( HSSFDataFormat.getBuiltinFormat('m/d/yyh:mm')); 3. 将样式应用到单元格

cell.setCellStyle(cellStyle);//对行应用样式,但有些样式仅适用于单元格row.setRowStyle(cellStyle);3.3.4 设置字体样式1. 创建HSSFFont 对象(调用HSSFWorkbook 的createFont 方法) 。

HSSFWorkbookwb=newHSSFWorkbook();HSSFFontfontStyle=wb.createFont();HSSFWorkbookwb=newHSSFWorkbook();2.设置不同的字体样式

//设置字体样式fontStyle.setFontName('宋泰'); //设置字体高度fontStyle.setFontHeightInPoints((short)20); //设置字体颜色font.setColor( HSFColor.BLUE.index);//设置粗体字体fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置斜体font.setItalic(true);//设置下划线font.setUnderline(HSSFFont .U_SINGLE); 3.设置字体为单元格样式

//字体也是单元格格式的一部分,因此属于HSSFCellStyle //将字体对象赋值给单元格样式对象cellStyle.setFont(font);//将单元格样式应用到单元格cell.setCellStyle(cellStyle ) ;大家好,我知道使用POI导出文件比较麻烦,所以下次我会教大家如何导入它们。

导出的API基本上是:最后希望以上内容对您有所帮助。

结尾

标题:java实现文件导入功能,java导出多个文件
链接:https://www.7kxz.com/news/gl/23684.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
天地劫幽城再临归真4-5攻略:第四章归真4-5八回合图文通关教学

天地劫幽城再临归真4-5攻略:第四章归真4-5八回合图文通关教学[多图],天地劫幽城再临归真4-5怎么样八回合内通

2024-04-23
航海王热血航线艾尼路怎么玩?艾尼路加点连招攻略大全

航海王热血航线艾尼路怎么玩?艾尼路加点连招攻略大全[多图],航海王热血航线艾尼路怎么加点?艾尼路怎么连招?关

2024-04-23
坎公骑冠剑国际服怎么玩?国际服新手攻略

坎公骑冠剑国际服怎么玩?国际服新手攻略[多图],坎公骑冠剑国际服的玩法是什么样的?关于游戏中的一些新手玩法

2024-04-23
王者荣耀鸿运6+1地狱之眼怎么抽?鸿运抽奖地狱之眼概率获取攻略

王者荣耀鸿运6+1地狱之眼怎么抽?鸿运抽奖地狱之眼概率获取攻略[多图],王者荣耀鸿运抽奖活动的奖池中还有传说

2024-04-23