平台网站开发可行性分析,外贸业务网络推广,郑州给公司做网站的公司,企业管理培训课程学习前言
报表[forms for reporting to the higher organizations]#xff0c;就是向上级报告情况的表格。简单的说#xff1a;报表就是用表格、图表等格式来动态显示数据#xff0c;可以用公式表示为#xff1a;“报表 多样的格式 动态的数据”。
1、开发环境搭建
功能说…前言
报表[forms for reporting to the higher organizations]就是向上级报告情况的表格。简单的说报表就是用表格、图表等格式来动态显示数据可以用公式表示为“报表 多样的格式 动态的数据”。
1、开发环境搭建
功能说明整个案例我们操作用户表做一个企业员工用户数据的导入导出。
我们使用SpringBoot通用mappervue方式搭建开发环境
第一步准备数据库把资料文件夹下中的sql脚本直接执行
《report_manager_db.sql》
/*
Navicat MySQL Data TransferSource Server : 127.0.0.1
Source Server Version : 50727
Source Host : 127.0.0.1:3306
Source Database : report_manager_dbTarget Server Type : MYSQL
Target Server Version : 50727
File Encoding : 65001Date: 2020-03-21 22:06:35
*/CREATE DATABASE /*!32312 IF NOT EXISTS*/report_manager_db /*!40100 DEFAULT CHARACTER SET utf8 */;USE report_manager_db;SET FOREIGN_KEY_CHECKS0;-- ----------------------------
-- Table structure for tb_dept
-- ----------------------------
DROP TABLE IF EXISTS tb_dept;
CREATE TABLE tb_dept (id bigint(20) DEFAULT NULL COMMENT 部门编号,dept_name varchar(100) DEFAULT NULL COMMENT 部门编号
) ENGINEInnoDB DEFAULT CHARSETutf8;-- ----------------------------
-- Records of tb_dept
-- ----------------------------
INSERT INTO tb_dept VALUES (5, 资产管理部);
INSERT INTO tb_dept VALUES (6, 质量监察部);
INSERT INTO tb_dept VALUES (7, 营销部);
INSERT INTO tb_dept VALUES (1, 销售部);
INSERT INTO tb_dept VALUES (2, 人事部);
INSERT INTO tb_dept VALUES (3, 财务部);
INSERT INTO tb_dept VALUES (4, 技术部);-- ----------------------------
-- Table structure for tb_province
-- ----------------------------
DROP TABLE IF EXISTS tb_province;
CREATE TABLE tb_province (id bigint(50) NOT NULL,name varchar(100) DEFAULT NULL COMMENT 省份或直辖市或特别行政区名称,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8;-- ----------------------------
-- Records of tb_province
-- ----------------------------
INSERT INTO tb_province VALUES (1, 北京市);
INSERT INTO tb_province VALUES (2, 天津市);
INSERT INTO tb_province VALUES (3, 上海市);
INSERT INTO tb_province VALUES (4, 重庆市);
INSERT INTO tb_province VALUES (5, 河北省);
INSERT INTO tb_province VALUES (6, 山西省);
INSERT INTO tb_province VALUES (7, 辽宁省);
INSERT INTO tb_province VALUES (8, 吉林省);
INSERT INTO tb_province VALUES (9, 黑龙江省);
INSERT INTO tb_province VALUES (10, 江苏省);
INSERT INTO tb_province VALUES (11, 浙江省);
INSERT INTO tb_province VALUES (12, 安徽省);
INSERT INTO tb_province VALUES (13, 福建省);
INSERT INTO tb_province VALUES (14, 江西省);
INSERT INTO tb_province VALUES (15, 山东省);
INSERT INTO tb_province VALUES (16, 河南省);
INSERT INTO tb_province VALUES (17, 湖北省);
INSERT INTO tb_province VALUES (18, 湖南省);
INSERT INTO tb_province VALUES (19, 广东省);
INSERT INTO tb_province VALUES (20, 海南省);
INSERT INTO tb_province VALUES (21, 四川省);
INSERT INTO tb_province VALUES (22, 贵州省);
INSERT INTO tb_province VALUES (23, 云南省);
INSERT INTO tb_province VALUES (24, 陕西省);
INSERT INTO tb_province VALUES (25, 甘肃省);
INSERT INTO tb_province VALUES (26, 青海省);
INSERT INTO tb_province VALUES (27, 台湾省);
INSERT INTO tb_province VALUES (28, 内蒙古自治区);
INSERT INTO tb_province VALUES (29, 广西壮族自治区);
INSERT INTO tb_province VALUES (30, 西藏自治区);
INSERT INTO tb_province VALUES (31, 宁夏回族自治区);
INSERT INTO tb_province VALUES (32, 新疆维吾尔自治区);
INSERT INTO tb_province VALUES (33, 香港特别行政区);
INSERT INTO tb_province VALUES (34, 澳门特别行政区);-- ----------------------------
-- Table structure for tb_resource
-- ----------------------------
DROP TABLE IF EXISTS tb_resource;
CREATE TABLE tb_resource (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(50) DEFAULT NULL,price double(10,1) DEFAULT NULL,user_id bigint(20) DEFAULT NULL,need_return tinyint(1) DEFAULT NULL COMMENT 是否需要归还,photo varchar(200) DEFAULT NULL COMMENT 照片,PRIMARY KEY (id),KEY fk_user_id (user_id),CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES tb_user (id)
) ENGINEInnoDB AUTO_INCREMENT8 DEFAULT CHARSETutf8;-- ----------------------------
-- Records of tb_resource
-- ----------------------------
INSERT INTO tb_resource VALUES (1, 记录本, 2.0, 3, 0, \\resource_photos\\3\\1.jpg);
INSERT INTO tb_resource VALUES (2, 笔记本电脑, 7000.0, 3, 1, \\resource_photos\\3\\2.jpg);
INSERT INTO tb_resource VALUES (3, 办公桌, 1000.0, 3, 1, \\resource_photos\\3\\3.jpg);
INSERT INTO tb_resource VALUES (4, 订书机, 50.0, 4, 1, \\resource_photos\\4\\1.jpg);
INSERT INTO tb_resource VALUES (5, 双面胶带, 5.0, 4, 0, \\resource_photos\\4\\2.jpg);
INSERT INTO tb_resource VALUES (6, 资料文件夹, 10.0, 4, 0, \\resource_photos\\4\\3.jpg);
INSERT INTO tb_resource VALUES (7, 打印机, 1200.0, 4, 1, \\resource_photos\\4\\4.jpg);-- ----------------------------
-- Table structure for tb_user
-- ----------------------------
DROP TABLE IF EXISTS tb_user;
CREATE TABLE tb_user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 用户ID,user_name varchar(100) DEFAULT NULL COMMENT 姓名,phone varchar(15) DEFAULT NULL COMMENT 手机号,province varchar(50) DEFAULT NULL COMMENT 省份,city varchar(50) DEFAULT NULL COMMENT 城市,salary int(10) DEFAULT NULL,hire_date datetime DEFAULT NULL COMMENT 入职日期,dept_id bigint(20) DEFAULT NULL COMMENT 部门编号,birthday datetime DEFAULT NULL COMMENT 出生日期,photo varchar(200) DEFAULT NULL COMMENT 照片路径,address varchar(300) DEFAULT NULL COMMENT 现在住址,PRIMARY KEY (id),KEY fk_dept (dept_id)
) ENGINEInnoDB DEFAULT CHARSETutf8;-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO tb_user VALUES (1, 大一, 13800000001, 北京市, 北京市, 11000, 2001-01-01 21:18:29, 1, 1981-03-02 00:00:00, \\static\\user_photos\\1.jpg, 北京市西城区宣武大街1号院);
INSERT INTO tb_user VALUES (2, 不二, 13800000002, 河北省, 石家庄市, 12000, 2002-01-02 21:18:29, 2, 1982-03-02 00:00:00, \\static\\user_photos\\2.jpg, 北京市西城区宣武大街2号院);
INSERT INTO tb_user VALUES (3, 张三, 13800000003, 河北省, 石家庄市, 13000, 2003-03-03 21:18:29, 3, 1983-03-02 00:00:00, \\static\\user_photos\\3.jpg, 北京市西城区宣武大街3号院);
INSERT INTO tb_user VALUES (4, 李四, 13800000004, 河北省, 石家庄市, 14000, 2004-02-04 21:18:29, 4, 1984-03-02 00:00:00, \\static\\user_photos\\4.jpg, 北京市西城区宣武大街4号院);
INSERT INTO tb_user VALUES (5, 王五, 13800000005, 河北省, 唐山市, 15000, 2005-03-05 21:18:29, 5, 1985-03-02 00:00:00, \\static\\user_photos\\5.jpg, 北京市西城区宣武大街5号院);
INSERT INTO tb_user VALUES (6, 赵六, 13800000006, 河北省, 承德市省, 16000, 2006-04-06 21:18:29, 6, 1986-03-02 00:00:00, \\static\\user_photos\\6.jpg, 北京市西城区宣武大街6号院);
INSERT INTO tb_user VALUES (7, 沈七, 13800000007, 河北省, 秦皇岛市, 17000, 2007-06-07 21:18:29, 7, 1987-03-02 00:00:00, \\static\\user_photos\\7.jpg, 北京市西城区宣武大街7号院);
INSERT INTO tb_user VALUES (8, 酒八, 13800000008, 河北省, 秦皇岛市, 18000, 2008-07-08 21:18:29, 6, 1988-03-02 00:00:00, \\static\\user_photos\\8.jpg, 北京市西城区宣武大街8号院);
INSERT INTO tb_user VALUES (9, 第九, 13800000009, 山东省, 德州市, 19000, 2009-03-09 21:18:29, 1, 1989-03-02 00:00:00, \\static\\user_photos\\9.jpg, 北京市西城区宣武大街9号院);
INSERT INTO tb_user VALUES (10, 石十, 13800000010, 山东省, 青岛市, 20000, 2010-07-10 21:18:29, 4, 1990-03-02 00:00:00, \\static\\user_photos\\10.jpg, 北京市西城区宣武大街10号院);
INSERT INTO tb_user VALUES (11, 肖十一, 13800000011, 山东省, 青岛市, 21000, 2011-12-11 21:18:29, 4, 1991-03-02 00:00:00, \\static\\user_photos\\11.jpg, 北京市西城区宣武大街11号院);
INSERT INTO tb_user VALUES (12, 星十二, 13800000012, 山东省, 青岛市, 22000, 2012-05-12 21:18:29, 4, 1992-03-02 00:00:00, \\static\\user_photos\\12.jpg, 北京市西城区宣武大街12号院);
INSERT INTO tb_user VALUES (13, 钗十三, 13800000013, 山东省, 济南市, 23000, 2013-06-13 21:18:29, 3, 1993-03-02 00:00:00, \\static\\user_photos\\13.jpg, 北京市西城区宣武大街13号院);
INSERT INTO tb_user VALUES (14, 贾十四, 13800000014, 山东省, 威海市, 24000, 2014-06-14 21:18:29, 2, 1994-03-02 00:00:00, \\static\\user_photos\\14.jpg, 北京市西城区宣武大街14号院);
INSERT INTO tb_user VALUES (15, 甄世武, 13800000015, 山东省, 济南市, 25000, 2015-06-15 21:18:29, 4, 1995-03-02 00:00:00, \\static\\user_photos\\15.jpg, 北京市西城区宣武大街15号院);-- ----------------------------
-- Table structure for tb_month
-- ----------------------------
DROP TABLE IF EXISTS tb_month;
CREATE TABLE tb_month (name varchar(2) DEFAULT NULL COMMENT 月份
) ENGINEInnoDB DEFAULT CHARSETutf8;-- ----------------------------
-- Records of tb_month
-- ----------------------------
INSERT INTO tb_month VALUES (01);
INSERT INTO tb_month VALUES (02);
INSERT INTO tb_month VALUES (03);
INSERT INTO tb_month VALUES (04);
INSERT INTO tb_month VALUES (05);
INSERT INTO tb_month VALUES (06);
INSERT INTO tb_month VALUES (07);
INSERT INTO tb_month VALUES (08);
INSERT INTO tb_month VALUES (09);
INSERT INTO tb_month VALUES (10);
INSERT INTO tb_month VALUES (11);
INSERT INTO tb_month VALUES (12);2、Excel说明
在企业级应用开发中Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式 1、为了方便操作基于Excel的报表批量上传数据也就是把Excel中的数据导入到系统中。 2、通过java代码生成Excel报表。也就是把系统中的数据导出到Excel中方便查阅。
2.1 Excel的两种版本
目前世面上的Excel分为两个大的版本Excel2003和Excel2007及以上两个版本 两者之间的区别如下 Excel2003 是一个特有的二进制格式其核心结构是复合文档类型的结构存储数据量较小
Excel2007 的核心结构是 XML 类型的结构采用的是基于 XML 的压缩方式使其占用的空间更小
操作效率更高
2.2 常见的Excel操作工具
Java中常见的用来操作Excel的方式一般有2种JXL和POI。
2.2.1 JXL
JXL只能对Excel进行操作,属于比较老的框架它只支持到Excel 95-2000的版本。现在已经停止更新和 维护,所以本课程中只时简单地演示一下jxl的代码不会把它作为重点
2.2.2 POI
POI是apache的项目,可对微软的Word,Excel,PPT进行操作,包括office2003和2007,Excle2003和2007。 poi现在一直有更新。所以现在主流使用POI。
Apache POI是Apache软件基金会的开源项目由Java编写的免费开源的跨平台的 Java APIApache POI提供API给Java语言操作Microsoft Office的功能。
API对象介绍 工作簿 WorkBook HSSFWordBook 2003版本XSSFWorkBook 2007级以上 工作表 Sheet HSSFSheet 2003版本XSSFSheet 2007级以上 行 Row HSSFRow 2003版本XSSFRow 2007级以上 单元格 Cell HSSFCell 2003版本XSSFCell 2007级以上
3、使用JXL导出excel
目前Excel的版本有2013、2010、2007这些都是新版本的excel新版本的excel已经出现十多年了使用人群已经比较多了所以目前做项目大都做的是导出新版本的excel而jxl只能操作低版本的excel所以现在使用jxl做项目已经比较少见那我们在这里使用jxl导出一个简单一些的excel。
3.1 使用jxl导出基本知识点
通过WritableWorkbookWritableSheetLabel这三个对象我们就可以实现Excel文件的导出工作。
1、 创建可写入的Excel工作薄
WritableWorkbook workbook Workbook.createWorkbook(输出流);2、创建工作表
WritableSheet sheet workbook.createSheet(工作表的名称, 工作表的索引值);3、创建单元格
添加文本类单元格
Label labelC new Label(列索引值, 行索引值, 单元格中的内容);sheet.addCell(labelC);4、写入到文件
workbook.write();// 写入数据5、释放资源
workbook.close();// 关闭文件3.2 代码实现导出用户列表数据
第一步UserController中添加方法
GetMapping(value /downLoadXlsByJxl,name 使用jxl下载)
public void downLoadXlsByJxl(HttpServletResponse response){userService.downLoadByJxl(response);
}第二步UserService中的方法
private static SimpleDateFormat simpleDateFormat new SimpleDateFormat(yyyy-MM-ss);public void downLoadXlsByJxl(HttpServletResponse response){try {
// 创建一个工作薄ServletOutputStream outputStream response.getOutputStream();WritableWorkbook workbook Workbook.createWorkbook(outputStream);
// 创建一个工作表WritableSheet sheet workbook.createSheet(一个JXL入门, 0);
// 设置列宽sheet.setColumnView(0,5);sheet.setColumnView(1,8);sheet.setColumnView(2,15);sheet.setColumnView(3,15);sheet.setColumnView(4,30);
// 处理标题String[] titles new String[]{编号,姓名,手机号,入职日期,现住址};Label label null;for (int i 0; i titles.length; i) {label new Label(i,0,titles[i]);sheet.addCell(label);}
// 处理导出的内容ListUser userList this.findAll();int rowIndex 1;for (User user : userList) {label new Label(0,rowIndex,user.getId().toString());sheet.addCell(label);label new Label(1,rowIndex,user.getUserName());sheet.addCell(label);label new Label(2,rowIndex,user.getPhone());sheet.addCell(label);label new Label(3,rowIndex,simpleDateFormat.format(user.getHireDate()));sheet.addCell(label);label new Label(4,rowIndex,user.getAddress());sheet.addCell(label);rowIndex;}// 导出的文件名称String filename一个JXL入门.xls;
// 设置文件的打开方式和mime类型response.setHeader( Content-Disposition, attachment;filename new String(filename.getBytes(),ISO8859-1));response.setContentType(application/vnd.ms-excel);
// 导出workbook.write();
// 关闭资源workbook.close();outputStream.close();} catch (Exception e) {e.printStackTrace();}}导出内容如下 4、POI操作excel
添加所需的依赖
dependencygroupIdorg.apache.poi/groupIdartifactIdpoi/artifactIdversion4.0.1/version
/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml/artifactIdversion4.0.1/version
/dependencydependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml-schemas/artifactIdversion4.0.1/version
/dependency4.1、POI操作Excel高低版本区别
在POI包中有如下几个主要对象和excel的几个对象对应
对应excel名称低版本中的类名高版本中的类名工作簿HSSFWorkbookXSSFWorkbook工作表HSSFSheetXSSFSheet行HSSFRowXSSFRow单元格HSSFCellXSSFCell单元格样式HSSFCellStyleXSSFCellStyle
入门案例代码创建一个新的工作薄里面随便写一句话
操作低版本
package com.itheima.demo;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
public class POIDemo01 {public static void main(String[] args) throws Exception{Workbook workbook new HSSFWorkbook(); //创建了一个全新里面什么都没有的工作薄Sheet sheet workbook.createSheet(demo测试); //创建了一个全新里面什么都没有的工作表Row row sheet.createRow(0); //创建了第一行空的Cell cell row.createCell(0);//创建的是第一行的第一个单元格cell.setCellValue(这是我第一次玩POI);
// 把工作薄输出到本地磁盘workbook.write(new FileOutputStream(d://test.xls));}
}
操作高版本
package com.itheima.demo;
import org.apache.poi.ss.usermodel.Cell;
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.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;public class POIDemo02 {public static void main(String[] args) throws Exception{Workbook workbook new XSSFWorkbook(); //创建了一个全新里面什么都没有的工作薄Sheet sheet workbook.createSheet(demo测试); //创建了一个全新里面什么都没有的工作表Row row sheet.createRow(0); //创建了第一行空的Cell cell row.createCell(0);//创建的是第一行的第一个单元格cell.setCellValue(这是我第一次玩POI);
// 把工作薄输出到本地磁盘workbook.write(new FileOutputStream(d://test.xlsx));}
}
比较上面两个代码会发现在开发中只是类的名称不一样方法是一样的。
4.2、实现用户数据的导入
4.2.1、需求
把资料中的《用户导入测试数据.xlsx》文档中的数据导入到系统中
内容如下 数据的导入就是读取excel中的内容转成对象插入到数据库中
4.2.2 、思路
一般来说即将导入的文件每个列代表什么意思基本上都是固定的比如第1列就是用户姓名最后一列就是用户的现住址并且在做excel时对每个列的类型都是有要求的这样就可以给我们开发带来很大的简便。
最终的目标就是读取每一行数据把数据转成用户的对象保存到表中
实现的步骤1、根据上传的文件创建Workbook
2、获取到第一个sheet工作表
3、从第二行开始读取数据
4、读取每一个单元格把内容放入到用户对象的相关的属性中
4.2.3、代码实现
第一步在Controller接收文件,具体的实现交给service
PostMapping(value /uploadExcel, name 上传用户数据)
public void uploadExcel(MultipartFile file) throws Exception{userService.uploadExcel(file);
}第二步UserService添加上传用户的方法
public void uploadExcel(MultipartFile file) throws Exception {Workbook workbook new XSSFWorkbook(file.getInputStream()); //根据上传的输入流创建workbookSheet sheet workbook.getSheetAt(0); //获取工作薄中的第一个工作表int lastRowIndex sheet.getLastRowNum(); //获取这个sheet中最后一行数据为了循环遍历// 以下三个为了节省栈内存所以提到循环的外面User user null;Row row null;Cell cell null;//开始循环每行获取每行的单元格中的值放入到user属性中for (int i 1; i lastRowIndex; i) {row sheet.getRow(i);user new User();// 因为第一个列单元格中是字符串可以直接使用getStringCellValue方法String userName row.getCell(0).getStringCellValue(); //用户名user.setUserName(userName);String phone null; //手机号try {phone row.getCell(1).getStringCellValue();} catch (IllegalStateException e) {phone row.getCell(1).getNumericCellValue();}user.setPhone(phone);String province row.getCell(2).getStringCellValue(); //省份user.setProvince(province);String city row.getCell(3).getStringCellValue(); //城市user.setCity(city);// 因为在填写excel中的数据时就可以约定这个列只能填写数值所以可以直接用getNumericCellValue方法Integer salary ((Double)row.getCell(4).getNumericCellValue()).intValue(); //工资user.setSalary(salary);String hireDateStr row.getCell(5).getStringCellValue(); //入职日期Date hireDate simpleDateFormat.parse(hireDateStr);user.setHireDate(hireDate);String birthdayStr row.getCell(6).getStringCellValue(); //出生日期Date birthday simpleDateFormat.parse(birthdayStr);user.setBirthday(birthday);String address row.getCell(7).getStringCellValue(); //现住地址user.setAddress(address);userMapper.insert(user);}}上传成功后直接查询数据库中的数据 4.3、实现用户数据的导出
4.3.1、需求
我们先来一个简单的excel的导出不要求有什么样式。就是和jxl导出的内容一样就可以 4.3.2、基本思路
1、创建一个全新的工作薄
2、在新的工作薄中创建一个新的工作表
3、在工作表创建第一行作为标题行标题固定
4、从第二行循环遍历创建有多少条用户数据就应该创建多少行
5、把每一个user对象的属性放入到相应的单元格中
4.3.3、代码实现
第一步在Controller添加方法,具体的实现交给service
GetMapping(value /downLoadXlsxByPoi,name 使用POI下载高版本)
public void downLoadXlsx(HttpServletResponse response) throws Exception{userService.downLoadXlsx(response);
}第二步UserService中实现
public void downLoadXlsx(HttpServletResponse response) throws Exception {// 创建一个空的工作薄Workbook workbook new XSSFWorkbook();// 在工作薄中创建一个工作表Sheet sheet workbook.createSheet(测试);// 设置列宽sheet.setColumnWidth(0,5*256);sheet.setColumnWidth(1,8*256);sheet.setColumnWidth(2,15*256);sheet.setColumnWidth(3,15*256);sheet.setColumnWidth(4,30*256);// 处理标题String[] titles new String[]{编号,姓名,手机号,入职日期,现住址};// 创建标题行Row titleRow sheet.createRow(0);Cell cell null;for (int i 0; i titles.length; i) {cell titleRow.createCell(i);cell.setCellValue(titles[i]);}// 处理内容ListUser userList this.findAll();int rowIndex 1;Row row null;for (User user : userList) {row sheet.createRow(rowIndex);cell row.createCell(0);cell.setCellValue(user.getId());cell row.createCell(1);cell.setCellValue(user.getUserName());cell row.createCell(2);cell.setCellValue(user.getPhone());cell row.createCell(3);cell.setCellValue(simpleDateFormat.format(user.getHireDate()));cell row.createCell(4);cell.setCellValue(user.getAddress());rowIndex;}// 导出的文件名称String filename员工数据.xlsx;// 设置文件的打开方式和mime类型ServletOutputStream outputStream response.getOutputStream();response.setHeader( Content-Disposition, attachment;filename new String(filename.getBytes(),ISO8859-1));response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet);workbook.write(outputStream);}4.4、导出时样式的设置
如果要求导出的excel如下内容 通过上图可以看出有些样式需要我们来设置来看一下都有哪些知识点 1.画框线
/**
* 设置框线
*/
HSSFCellStyle contentStyle book.createCellStyle();
contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//底线
contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//顶部线
contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左侧线
contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右侧线2.合并单元格
//合并单元格 起始行, 结束行, 起始列, 结束列
sheet.addMergedRegion(new CellRangeAddress(0,0,0,4));3.设置行高
/**
设置行高
*/
sheet.getRow(1).setHeight((short)500);4.设置表格的对齐方式和字体
//*设置对齐方式和字体***/
//内容部分的样式
style_content.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置水平居中
style_content.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置垂直居中HSSFFont font book.createFont();//创建字体
font.setFontName(宋体);//设置字体名称
font.setFontHeightInPoints((short)11);//设置字体大小
style_content.setFont(font);//对样式设置字体//标题样式
HSSFCellStyle style_title book.createCellStyle();//创建标题样式
style_title.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置水平居中
style_title.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置垂直居中
HSSFFont titleFont book.createFont();//设置标题字体
titleFont.setFontName(黑体);
titleFont.setBold(true);//加粗
titleFont.setFontHeightInPoints((short)18);//字体大小
style_title.setFont(titleFont);//将标题字体设置到标题样式
sheet.getRow(0).getCell(0).setCellStyle(style_title);//单元格设置标题样式
其实真正要用代码实现我们最终想要的效果的话难道不大但是代码写起来非常麻烦所以明天给大家介绍一种非常简单的方式并且还带有样式。