能看懂的看注释,看不懂的直接复制代码用即可。
引入jar包
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
二级联动
package ExcelPoi;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
public class TwoExport {
public static void main(String[] args) {
Cascade();
}
public static void Cascade() {
// 创建一个excel
@SuppressWarnings("resource")
Workbook workbook = new XSSFWorkbook();
// 创建需要用户填写的sheet
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("省市县");
Row row0 = sheet.createRow(0);
row0.createCell(0).setCellValue("渠道类型");
row0.createCell(1).setCellValue("渠道来源");
//得到第一级省名称,放在列表里
String[] provinceArr = {"线上", "线下"};
String[] cityJiangSu = {"招标网站", "营销自动化ACRM", "门户网络媒体", "移动社交媒体", "移动社交媒体", "搜索引擎", "平面媒体", "户外媒体", "其他"};
String[] cityAnHui = {"行业博览会", "行业峰会/论坛/沙龙", "产业级市场活动", "大区/公路港市场活动", "本部门市场活动", "存量客户上下游", "政府关系网络", "个人关系网络", "传化生态业务", "其他"};
//将有子区域的父区域放到一个数组中
String[] areaFatherNameArr = {"线上", "线下"};
Map<String, String[]> areaMap = new HashMap<String, String[]>();
areaMap.put("线上", cityJiangSu);
areaMap.put("线下", cityAnHui);
//创建一个专门用来存放地区信息的隐藏sheet页
//因此也不能在现实页之前创建,否则无法隐藏。
Sheet hideSheet = workbook.createSheet("area");
//这一行作用是将此sheet隐藏,功能未完成时注释此行,可以查看隐藏sheet中信息是否正确
workbook.setSheetHidden(workbook.getSheetIndex(hideSheet), true);
int rowId = 0;
// 设置第一行,存省的信息
Row provinceRow = hideSheet.createRow(rowId++);
provinceRow.createCell(0).setCellValue("渠道");
for (int i = 0; i < provinceArr.length; i++) {
Cell provinceCell = provinceRow.createCell(i + 1);
provinceCell.setCellValue(provinceArr[i]);
}
// 将具体的数据写入到每一行中,行开头为父级区域,后面是子区域。
for (int i = 0; i < areaFatherNameArr.length; i++) {
String key = areaFatherNameArr[i];
String[] son = areaMap.get(key);
Row row1 = hideSheet.createRow(rowId++);
row1.createCell(0).setCellValue(key);
for (int j = 0; j < son.length; j++) {
Cell cell0 = row1.createCell(j + 1);
cell0.setCellValue(son[j]);
}
// 添加名称管理器
String range = getRange(1, rowId, son.length);
Name name = workbook.createName();
//key不可重复
name.setNameName(key);
String formula = "area!" + range;
name.setRefersToFormula(formula);
}
XSSFDataValida