首页 > 编程语言 >Java导入、导出excel

Java导入、导出excel

时间:2023-08-01 15:45:35浏览次数:45  
标签:Java 单元格 excel Cell createCell 导入 workbook sheet row

Excel是由四个元素组成的分别是:WorkBook(工作簿)、Sheet(工作表)、Row(行)、Cell(单元格),其中包含关系是从左至右,一个WorkBook可以包含多个Sheet,一个Sheet又是由多个Row组成,一个Row是由多个Cell组成。

1.1 创建Excel的元素

1)创建WokrBook

Workbook workbook = new XSSFWorkbook();

2)创建Sheet

 Sheet sheet = workbook.createSheet();
<<===================>>

设置sheet的名称

 Sheet sheet = workbook.createSheet("sheet名称");

3)创建行Row

Row row = sheet.createRow(0);

4)创建单元格Cell

Cell cell = row.createCell(0, CellType.STRING);

可以指定单元格的类型,支持的类型有下面7种:

_NONE(-1),
NUMERIC(0),
STRING(1),
//公式
FORMULA(2),
BLANK(3),
//布尔
BOOLEAN(4),
ERROR(5);

1.2 样式和字体

创建样式:

CellStyle cellStyle = workbook.createCellStyle();

1)左右垂直居中

//左右居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

2)字体加粗、颜色

创建加粗样式并设置到CellStyle 中:

Font font = workbook.createFont();
//字体颜色为红色
font.setColor(IndexedColors.RED.getIndex());
//字体加粗
font.setBold(true);
cellStyle.setFont(font);


指定Cell单元格使用该样式:

cell.setCellStyle(style);

3)调整列宽和高

Sheet sheet = workbook.createSheet();
//自动调整列的宽度来适应内容
sheet.autoSizeColumn(int column); 
// 设置列的宽度
sheet.setColumnWidth(2, 20 * 256);  
autoSizeColumn()传递的参数就是要设置的列索引。setColumnWidth()第一个参数是要设置的列索引,第二参数是具体的宽度值,宽度 = 字符个数 * 256(例如20个字符的宽度就是20 * 256

4)倾斜、下划线

Font font = workbook.createFont();
font.setItalic(boolean italic); 设置倾斜
font.setUnderline(byte underline); 设置下划线

1.3 进阶用法

1)合并单元格

Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet(fileName);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 5));

CellRangeAddress()方法四个参数分别是fristRow:起始行、lastRow:结束行、fristCol:起始列、lastCol:结束列。

如果你想合并从第一行到第二行从一列到第十列的单元格(一共合并20格),那么就是CellRangeAddress(0,1,0,10)

2)字段必填

//创建数据验证
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
//创建要添加校验的单元格对象
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 10);
//创建必填校验规则
DataValidationConstraint constraint = dvHelper.createCustomConstraint("NOT(ISBLANK(A1))");
//设置校验
DataValidation validation = dvHelper.createValidation(constraint, addressList);
//校验不通过 提示
validation.setShowErrorBox(true);
sheet.addValidationData(validation);

CellRangeAddressList()方法传递四个参数,分别是:fristRow:起始行、lastRow:结束行、fristCol:起始列、lastCol:结束列。CellRangeAddressList(0, 0, 0, 10)表示的就是给第一行从第一列开始到第十列一共十个单元格添加数据校验。

3)添加公式

SUM:求和函数

//创建SUM公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell sumCell = row.createCell(0);
sumCell.setCellFormula("SUM(A1:A10)");
//计算SUM公式结果
Cell sumResultCell = row.createCell(1);
sumResultCell.setCellValue(evaluator.evaluate(sumCell).getNumberValue());

AVERAGE:平均数函数

//创建AVERAGE公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell averageCell = row.createCell(0);
averageCell.setCellFormula("AVERAGE(A1:A10)");

//计算AVERAGE公式结果
Cell averageResultCell = row.createCell(1);
averageResultCell.setCellValue(evaluator.evaluate(averageCell).getNumberValue());

COUNT:计数函数

//创建COUNT公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell countCell = row.createCell(0);
countCell.setCellFormula("COUNT(A1:A10)");

//计算COUNT公式结果
Cell countResultCell = row.createCell(1);
countResultCell.setCellValue(evaluator.evaluate(countCell).getNumberValue());

IF:条件函数

//创建IF公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell ifCell = row.createCell(0);
ifCell.setCellFormula("IF(A1>B1,\"Yes\",\"No\")");

//计算IF公式结果
Cell ifResultCell = row.createCell(1);
ifResultCell.setCellValue(evaluator.evaluate(ifCell).getStringValue());

CONCATENATE:连接函数

//创建CONCATENATE公式
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Cell concatenateCell = row.createCell(0);
concatenateCell.setCellFormula("CONCATENATE(A1,\" \",B1)");

//计算CONCATENATE公式结果
Cell concatenateResultCell = row.createCell(1);
concatenateResultCell.setCellValue(evaluator.evaluate(concatenateCell).getStringValue());

4)下拉选择

//下拉值
private List<String> grade = Arrays.asList("高", "中", "低");
(此处省略n行代码)
Sheet sheet = workbook.createSheet("sheet");
DataValidation dataValidation = this.addPullDownConstraint(i, sheet, grade );
sheet.addValidationData(dataValidation);

5)设置单元格的数据类型

数字格式

// 设置单元格样式 - 数字格式
CellStyle numberCellStyle = workbook.createCellStyle();
numberCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0.00"));
//指定单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellStyle(numberCellStyle);

日期格式

// 设置单元格样式 - 日期格式
CellStyle dateCellStyle = workbook.createCellStyle();
dateCellStyle.setDataFormat(workbook.createDataFormat().getFormat("yyyy-MM-dd"));
//指定单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellStyle(dateCellStyle);
 
 

标签:Java,单元格,excel,Cell,createCell,导入,workbook,sheet,row
From: https://www.cnblogs.com/KL2016/p/17596679.html

相关文章

  • python怎么把json文件夹转成Excel表?
    1、python怎么把json文件夹转成Excel表?2、Python代码json数据再别的目录下怎么调用?3、【Python】浅谈python中的json4、python的json怎么用5、如何使用Python处理JSON数据python怎么把json文件夹转成Excel表?可以用pandas来读取json文件,再to_excel保存为Excel文件。可......
  • Java学习-1
    今天学了点Java构建最小栈的方法,采用的是链表存储其中的最小值以及当前节点的数值,在插入栈内新元素的时候进行对应的最小值比对,插入到private链表中。classListNode{publicintval;publicintmin;publicListNodenext;publicListNode(intval,intmin......
  • #yyds干货盘点#Java虚拟机基本结构
    类加载子系统类加载子系统负责从文件系统或网络中加载Class信息,加载的类的数据结构存放于一块叫方法区的内存空间中。方法区方法区主要存储类加载后的数据结构信息、运行时常量池信息、字符串、数字常量(这部分常量信息是Class文件中常量池部分的内存映射)(JDK1.7之前,JDK1.7之后字符......
  • Cocoapods同时导入静态库和动态库
    platform:ios,'14.1'target:'LGNetworkManager'douse_frameworks!#静态库、动态库#指定需要被编译成static_framework的库$static_framework=['AFNetworking']pre_installdo|installer|installer.pod_targets.eachdo|pod|......
  • 如何在Excel中实现表关联取值
    需求: 员工表:编号,姓名工资表:编号,工资现要在Excel中在工资表后加一列把员工表中的姓名取过来。解决: 可以通过Vlookup实现,在新的列中添加函数  =VLOOKUP(@D:D,A2:B5,2,FALSE)参数一:关联列(即工资表的编号字段)(选中编号列即可)参数二:查询区域(选中查询区域,及员工表数据区域,......
  • 视频直播网站源码,前端效果-css+javascript
    视频直播网站源码,前端效果-css+javascript <!DOCTYPEhtml><html><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="w......
  • Java集合框架
    Java集合框架集合框架用于存储数据的容器,集合框架是为表示和操作集合而规定的一种统一的标准的体系结构任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法接口表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态......
  • java两个list对象取差集
    在Java开发中,我们经常会遇到需要对两个List对象进行比较并取得它们的差集的情况。差集是指在第一个List中出现而在第二个List中没有出现的元素集合。本文将介绍如何使用Java来实现这个功能,并提供代码示例。方法一:使用循环嵌套遍历比较一种常见的方法是通过嵌套循环遍历比较两个Li......
  • Excel VBA 窗体UserForm制作菜单栏与添加窗体最大化最小化功能(转载)
    窗体'--------------------------------------------------------'->Forms'Module'ClassModules'--------------------------------------------------------OptionExplicitPrivateDeclareFunctionFindWindowLib"user32&qu......
  • 剥下“java.lang.OutOfMemoryError: unable to create new native thread”的外衣
     星期一早上到了公司,据称产品环境抛出了最可爱的异常—OutOfMemory, 它是这样来描述他自己的:java.lang.OutOfMemoryError:unabletocreatenewnativethread而且这位仁兄竟然还堂而皇之地同时出现在了3个application里面,所有应用全部遭殃。那可爱的OOM是如何产生的呢?直接原因......