文档章节

Apache POI .xlsx 下拉框实现

Geeyu
 Geeyu
发布于 2017/09/06 15:18
字数 473
阅读 110
收藏 1

主要对象

  • 工作本: HSSFWorkbook(.xls) / XSSFWorkbook(.xlsx)
  • 工作表:HSSFSheet / XSSFSheet
  • 行:Row
  • 单元格:Cell
  • 其他:CellRangeAddressList 选中区域,DataValidationConstraint 数据约束,DataValidation 数据验证,XSSFCellStyle 单元格样式

读取与创建 Excel

/**
 * 创建
 * 1. 如果是一个FileOutputStream,则会直接创建文件
 * 2. 可以是 response.getOutputStream(),则直接返回浏览器进行下载
 */
OutputStream os = ...;
XSSFWorkbook wb = new XSSFWorkbook();
wb.write(os);
os.flush();

// 读取
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
// 获取工作表
XSSFSheet sheet = workbook.getSheetAt(index);
// 获取总行数
int rows = sheet.getLastRowNum();

单元格合并

// 创建工作表
XSSFSheet sheet = wb.createSheet("sheetName");
// 添加合并区域,第一行前三个格子
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
// 设置合并区域的值,cell为0、1、2都一样
sheet.createRow(0)
    .createCell(0)
    .setCellValue("cellValue");

单元格样式

//创建样式对象、字体对象
XSSFCellStyle style = wb.createCellStyle();                       
XSSFFont font = wb.createFont();                                  

// 字体
font.setFontName("宋体");
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setColor(HSSFFont.COLOR_NORMAL);
font.setFontHeight((short) 12*20);
style.setFont(font);

// 填充色
style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

// 边框
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);

// 内容布局
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

// 给单元格设置样式
Cell cell = ...;
cell.setCellStyle("style");

下拉框

XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);

// 下拉框可选的数据,作为约束
XSSFDataValidationConstraint dvConstraint = 
    (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(new String[]{"a", "b", "c"});
// 设置为下拉框的范围
CellRangeAddressList addressList = 
    new CellRangeAddressList(0, 0, 0, 4);
// 创建 DataValidation 对象
XSSFDataValidation validation = 
    (XSSFDataValidation)dvHelper.createValidation(dvConstraint, addressList);
validation.setShowErrorBox(true);

// 作用于指定工作表
sheet.addValidationData(validation);

下拉框引用隐藏域

  • 用于解决上种方法,数组超过255和字节就会报错的问题
  • 公式不能漏掉 $
  • 与上面的区别只是创建了一个公式约束
// 创建一个隐藏域,users是下拉列表数组
String hiddenSheet = "hiddenSheet";
XSSFSheet sheet_hidden = wb.createSheet(hiddenSheet);
wb.setSheetHidden(1, true);
for (int i = 0; i < users.length; i++)
    sheet_hidden.createRow(i)
            .createCell(0)
            .setCellValue(users[i]);
            
// 然后用公式去引用,隐藏域中的 A1:A user.length 就是上面设置的格子
String formula = hiddenSheet + "!$A$1:$A$" + users.length;

XSSFDataValidationConstraint dvConstraint_agent = 
    (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(formula);
CellRangeAddressList addressList_agent = 
    new CellRangeAddressList(2, 11, 3, 3);
XSSFDataValidation validation_agent = 
    (XSSFDataValidation)dvHelper.createValidation(dvConstraint_agent, addressList_agent);
validation_agent.setShowErrorBox(true);

sheet.addValidationData(validation_agent);

© 著作权归作者所有

共有 人打赏支持
Geeyu
粉丝 2
博文 56
码字总数 30168
作品 0
昌平
使用Apache POI读取Excel文件

网上关于介绍Apache POI操作Excel的文章已经很多了,但都讲得比较复杂。poi的API 与实际使用中的Excel很类似,可以说是POI把Excel中的workbook、sheet、cell等对象化了,在实际使用中极易理解...

zlikun
2013/05/13
0
4
HSSF和XSSF

HSSF是POI工程对Excel(.xls)文件操作的实现,XSSF是POI工程对Excel(.xlsx)文件操作的实现.gradle.build`dependencies {compile('org.springframework.boot:spring-boot-starter')testCompile(......

不正经茂
2016/08/01
34
1
java读写excel之POI篇—001

POI 简单介绍 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 是创建和维护操作各种符合Office Open XML(OOXML...

Mysoft
2015/09/21
56
0
使用 Apache POI 处理 Microsoft Office 文档

原文同步至:http://www.waylau.com/apache-poi-handle-microsoft-documents/ POI 概述 Apache POI 项目的使命是创造和维护 Java API 操纵各种格式的文件,其中包括基于 Office Open XML 标准...

waylau
2015/02/01
0
0
Java读写excel

先下载JExcelapi的jar包。   读取的文件主要分两类:xls文件、xlsx文件。xls文件的相关操作用的是jxl.jar包,只要将这个包导入即可。xlsx文件的相关操作是利用apache的poi包。 一、xls文件...

pricker
2015/10/19
114
0

没有更多内容

加载失败,请刷新页面

加载更多

IDEA中Maven打包时如何跳过测试

方法1:直接使用IDEA提供的方式 Maven命令栏的工具栏有下图中的图标,上面就写着 Skip Tests 按下图标后,如下图,test就不可用了 直接使用package命令即可。 方法2:自己编辑maven命令 进入...

karma123
22分钟前
2
0
Device eth0 does not seem to be present,delaying initialization.

场景:在进行linux 主机克隆的时候,网卡初始化一般都会有问题,最常见的“Device eth0 does not seem to be present,delaying initialization.”,从字面意思 说eth0没有固化,延迟启动。由...

hnairdb
23分钟前
2
0
国内首个区块链试验区在海南成立

据新华社报道,10月8日,海南自贸区(港)区块链试验区正式在海南生态软件园授牌设立,这也是目前为止国内第一个区块链试验区。 该试验区位于海南生态软件园,与试验区同一天成立还有2家研究...

linuxCool
34分钟前
1
0
Java日期和时间获取问题

获取年月日时分秒 Calendar cal = Calendar.getInstance();//获取年int year = cal.get(Calendar.YEAR);//获取月,范围是0-11,最后使用需+1int month = cal.get(Cal...

lanyu96
53分钟前
12
0
Ceph学习笔记2-在Kolla-Ansible中使用Ceph后端存储

环境说明 使用Kolla-Ansible请参考《使用Kolla-Ansible在CentOS 7单节点上部署OpenStack Pike》; 部署Ceph服务请参考《Ceph学习笔记1-Mimic版本多节点部署》。 配置Ceph 以osdev用户登录: ...

LastRitter
57分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部