java生成带有下拉列表框的Excel

合集下载

Javapoi实现Excel下拉联动

Javapoi实现Excel下拉联动

Javapoi实现Excel下拉联动Java 实现Excel 下拉联动,本⽰例中实现了省市区乡镇村联动。

适⽤于03版本Exce。

⾸先我们需要导⼊我们依赖<!-- https:///artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><!-- https:///artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><!--模板导⼊--><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.1</version></dependency>代码实现如下:import ermodel.*;import ermodel.*;import org.apache.poi.ss.util.CellRangeAddressList;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.FileOutputStream;import java.io.IOException;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;/*** @Author zhouchuangbin* @Date 2021/8/2* @Description*/public class ExcelTest {/*** 影响最⼤⾏数*/private static final int XLS_MAX_ROW = 60000;/*** 导出模板** @param provinceList* @param areaFatherNameList* @param areaMap* @throws IOException*/public static void exportHSSFTemplate(List<String> provinceList, List<String> areaFatherNameList, Map<String, List<String>> areaMap) { String[] tileList = new String[]{"姓名", "⼿机号", "省", "市", "县", "乡镇", "村"};//创建⼯作簿对象HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("sheet");sheet.setDefaultColumnWidth(18);HSSFRow row = sheet.createRow(0);HSSFCellStyle style = getStyle(wb);HSSFCell cell = null;int provinceIndex = 0;for (int i = 0; i < tileList.length; i++) {String title = tileList[i];if ("省".equals(title)) {provinceIndex = i;}cell = row.createCell(i);cell.setCellValue(title);cell.setCellStyle(style);}//创建隐藏⽬录createHideSheetHSSF(wb, provinceList, areaFatherNameList, areaMap);//如果省市区的excel位置不是如上tileList中的位置,需要变更则需要INDIRECT中所在的列名称// 省规则DVConstraint provConstraint = DVConstraint.createExplicitListConstraint(provinceList.toArray(new String[]{}));CellRangeAddressList provRangeAddressList = new CellRangeAddressList(1, XLS_MAX_ROW, provinceIndex, provinceIndex);DataValidation provinceDataValidation = new HSSFDataValidation(provRangeAddressList, provConstraint);provinceDataValidation.createErrorBox("error", "请选择正确的省份");sheet.addValidationData(provinceDataValidation);//市规则CellRangeAddressList cityRange = new CellRangeAddressList(1, XLS_MAX_ROW, provinceIndex + 1, provinceIndex + 1);DataValidation cityValidation = new HSSFDataValidation(cityRange, DVConstraint.createFormulaListConstraint("INDIRECT($C1)"));cityValidation.createErrorBox("error", "请选择正确的市");sheet.addValidationData(cityValidation);//区县规则CellRangeAddressList areaRange = new CellRangeAddressList(1, XLS_MAX_ROW, provinceIndex + 2, provinceIndex + 2);DataValidation areaValidation = new HSSFDataValidation(areaRange, DVConstraint.createFormulaListConstraint("INDIRECT($D1)"));areaValidation.createErrorBox("error", "请选择正确的县");sheet.addValidationData(areaValidation);//区县乡镇CellRangeAddressList townRange = new CellRangeAddressList(1, XLS_MAX_ROW, provinceIndex + 3, provinceIndex + 3);DataValidation townValidation = new HSSFDataValidation(townRange, DVConstraint.createFormulaListConstraint("INDIRECT($E1)"));townValidation.createErrorBox("error", "请选择正确的乡镇");sheet.addValidationData(townValidation);//村规则CellRangeAddressList villageRange = new CellRangeAddressList(1, XLS_MAX_ROW, provinceIndex + 4, provinceIndex + 4);DataValidation villageValidation = new HSSFDataValidation(villageRange, DVConstraint.createFormulaListConstraint("INDIRECT($F1)"));villageValidation.createErrorBox("error", "请选择正确的村");sheet.addValidationData(villageValidation);FileOutputStream fileOut;try {fileOut = new FileOutputStream("d://excel_template.xls");wb.write(fileOut);fileOut.close();} catch (Exception e) {e.printStackTrace();}}/*** 创建隐藏页** @param wb* @param provinceArr* @param areaFatherNameArr* @param areaMap*/public static void createHideSheetHSSF(HSSFWorkbook wb, List<String> provinceArr, List<String> areaFatherNameArr, Map<String, List<String>> areaMap) { //创建⼀个专门⽤来存放地区信息的隐藏sheet页HSSFSheet hideSheet = wb.createSheet("area");int rowId = 0;// 设置第1⾏,存省的信息Row provinceRow = hideSheet.createRow(rowId++);for (int i = 0; i < provinceArr.size(); i++) {Cell provinceCell = provinceRow.createCell(i);provinceCell.setCellValue(provinceArr.get(i));}// 将具体的数据写⼊到每⼀⾏中,⾏开头为⽗级区域,后⾯是⼦区域。

excel java 列操作的方法

excel java 列操作的方法

excel java 列操作的方法在Java中与Excel进行交互是数据处理和报告生成中的一个常见需求。

Apache POI是一个流行的Java库,用于处理Microsoft Office文档,包括Excel。

本文将详细介绍几种使用Java对Excel中的列进行操作的方法。

### Excel列操作基础在进行列操作之前,需要确保你的项目中已经添加了Apache POI的依赖。

以下是一些基本的操作方法:#### 1.读取列数据```javaimport ermodel.*;public class ExcelColumnReader {public static void readColumnData(String excelFilePath, int sheetIndex, int columnIndex) throws IOException {try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {Cell cell = row.getCell(columnIndex);if (cell != null) {// 根据不同的数据类型处理单元格数据switch (cell.getCellType()) {case STRING:System.out.println(cell.getStringCellValue());break;case NUMERIC:System.out.println(cell.getNumericCellValue());break;// 其他类型处理...}}}}}}```#### 2.写入列数据```javaimport ermodel.*;public class ExcelColumnWriter {public static void writeColumnData(String excelFilePath, intsheetIndex, int columnIndex, String data) throws IOException {try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis);FileOutputStream fos = newFileOutputStream(excelFilePath)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {Cell cell = row.createCell(columnIndex);cell.setCellValue(data);}workbook.write(fos);}}}```#### 3.删除列```javaimport ermodel.*;public class ExcelColumnDeleter {public static void deleteColumn(String excelFilePath, int sheetIndex, int columnIndex) throws IOException {try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis);FileOutputStream fos = newFileOutputStream(excelFilePath)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {row.removeCell(row.getCell(columnIndex));}workbook.write(fos);}}}```### 高级列操作除了基本的读取、写入和删除操作外,以下是一些更高级的列操作方法:#### 1.复制列```java// 此处省略具体代码,因为复制列涉及到位操作和单元格样式复制等复杂操作```#### 2.遍历列并应用公式```javaimport ermodel.*;public class ExcelColumnFormulaApplier {public static void applyFormula(String excelFilePath, int sheetIndex, int columnIndex, String formula) throws IOException { try (FileInputStream fis = newFileInputStream(excelFilePath);Workbook workbook = WorkbookFactory.create(fis);FileOutputStream fos = newFileOutputStream(excelFilePath)) {Sheet sheet = workbook.getSheetAt(sheetIndex);for (Row row : sheet) {Cell cell = row.createCell(columnIndex);cell.setCellFormula(formula);}workbook.write(fos);}}}```#### 3.格式化列```java// 格式化列涉及到创建单元格样式,并对列中的所有单元格应用这个样式```### 结论使用Java对Excel进行列操作是一个强大且灵活的过程,可以满足各种数据处理需求。

练习21下拉式列表框

练习21下拉式列表框

练习21 下拉式列表框本例知识点一句话讲解新学知识使用JComboBox类制作下拉式列表框使用Container类制作容器已学知识使用String类定义字符串数组使用JLabel类制作静态标签一、练习具体要求本练习制作下拉式列表框的实例。

如图21-1所示,程序执行后,创建一个查看商品内容的面板,用户可以通过鼠标来选择要查看的商品信息。

选中之后,面板将会显示该种商品的价格和库存情况。

二、程序及注释(1)编程思路:首先,本练习因为要制作下拉式列表框的实例,所以首先要生成下拉式列表框:先通过Container ctp=getContentPane()生成一个容器类对象,然后通过语句JComboBox cbx=new JComboBox()生成一个下拉式列表框的实例,最后通过函数ctp.add(cbx)将下拉式列表框加载。

然后,为了配合用户查看商品信息,所以要响应用户的动作,先通过语句cbx.addItemListener(this)为下拉式列表框添加消息监听,最后通过public void itemStateChanged(ItemEvent e)函数来响应用户操作,同步显示被选中商品的价格和库存数量。

(2)程序实现及注释://JComboBoxTest.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class JComboBoxTest extends JApplet implements ItemListener{//变量定义Container ctp=getContentPane();JTextField tf1=new JTextField(5),tf2=new JTextField(5);JLabel lb1=new JLabel("单价:"),lb2=new JLabel("库存量:");String obj[]={"大米","饮料","面粉","酱油","口香糖"},price[]={"12","118","29","24","47"}, num[]={"232","45","405","12","49"}; JComboBox cbx=new JComboBox();//初始化小程序public void init(){//设置页面布局风格ctp.setLayout(new FlowLayout());for (int n=0;n<obj.length;n++)cbx.addItem(obj[n]);ctp.add(cbx);//添加消息监听cbx.addItemListener(this);ctp.add(lb1);ctp.add(tf1);ctp.add(lb2);ctp.add(tf2);}//响应用户操作public void itemStateChanged(ItemEvent e) {int x=0,y;String ko=(String)e.getItem();for (y=0;y<obj.length;y++)if (ko==obj[y])x=cbx.getSelectedIndex();//设置价格tf1.setText(price[x]);//设置数量tf2.setText(num[x]);}}三、练习效果(如图21-1所示)本实例代码编写完毕,存盘为:C: j2sdk1.4.0\javaprograms\ JComboBoxTest.java。

Java生成Excel文件

Java生成Excel文件

Java生成Excel文件Java作为一种广泛应用的编程语言,提供了许多库和工具来生成和操作Excel 文件。

在本文中,我将详细介绍使用Java生成Excel文件的方法和技巧。

1. Apache POI库Apache POI是一个流行的Java库,用于处理Microsoft Office格式的文件,包括Excel。

它提供了一组API来创建、读取和修改Excel文件。

首先,您需要在项目中添加Apache POI的依赖。

可以通过Maven或手动下载jar文件来完成。

```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>```2. 创建Excel文件下面是一个简单的示例,展示了如何使用Apache POI创建一个包含数据的Excel文件。

```javaimport ermodel.*;import ermodel.XSSFWorkbook;public class ExcelGenerator {public static void main(String[] args) {Workbook workbook = new XSSFWorkbook();Sheet sheet = workbook.createSheet("Sheet1");// 创建标题行Row headerRow = sheet.createRow(0);Cell headerCell = headerRow.createCell(0);headerCell.setCellValue("姓名");headerCell = headerRow.createCell(1);headerCell.setCellValue("年龄");// 创建数据行Row dataRow = sheet.createRow(1);Cell dataCell = dataRow.createCell(0);dataCell.setCellValue("张三");dataCell = dataRow.createCell(1);dataCell.setCellValue(25);// 保存Excel文件try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) { workbook.write(outputStream);} catch (IOException e) {e.printStackTrace();}}}```上述代码创建了一个包含姓名和年龄的Excel文件。

javapoi导出excel设置下拉选择框

javapoi导出excel设置下拉选择框

javapoi导出excel设置下拉选择框基本的过程就是设置⼀个下拉选择框的校验,然后绑定到sheet的指定格⼦上。

XSS和HSS的⽅式有些许不同,但是原理是⼀样的。

代码⽰例如下://性别String[] datas = new String[]{"男","⼥"};if(excelType.equals(ExcelTypeEnum.XLSX)){//数据验证帮助程序XSSFDataValidationHelper dvHelper2 = new XSSFDataValidationHelper((XSSFSheet) sheet);XSSFDataValidationConstraint dvConstraint2 = (XSSFDataValidationConstraint) dvHelper2.createExplicitListConstraint(datas);CellRangeAddressList regions2 =new CellRangeAddressList(1, 5000, 2, 2);XSSFDataValidation dataValidation2 = (XSSFDataValidation) dvHelper2.createValidation( dvConstraint2, regions2);sheet.addValidationData(dataValidation2);}else{//性别// 设置第5列的2-5000⾏为下拉列表CellRangeAddressList regions2 = new CellRangeAddressList(1, 5000, 2, 2);// 创建下拉列表数据DVConstraint constraint2 = DVConstraint.createExplicitListConstraint(datas);// 绑定HSSFDataValidation dataValidation2 = new HSSFDataValidation(regions2, constraint2);sheet.addValidationData(dataValidation2);}------------完整的⼀个⽰例代码如下。

Java使用POI操作Excel并创建下拉框

Java使用POI操作Excel并创建下拉框

Java使用POI操作Excel并创建下拉框Java代码package poiexcel;import java.io.FileOutputStream;import java.util.Date;import ermodel.DVConstraint;import ermodel.HSSFCell;import ermodel.HSSFDataValidation;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.CellRangeAddressList;public class POI{public static void main(String [] args){String [] list={"东软","华信","SAP","海辉"};new POI().createListBox(list);return;}public void createListBox (String [] list){//文件初始化HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("new sheet");//在第一行第一个单元格,插入下拉框HSSFRow row = sheet.createRow(0);HSSFCell cell = row.createCell(0);//普通写入操作cell.setCellValue("请选择");//这是实验//生成下拉列表//只对(0,0)单元格有效CellRangeAddressList regions = new CellRangeAddressList(0,0,0,0);//生成下拉框内容DVConstraint constraint = DVConstraint.createExplicitListConstraint(list);//绑定下拉框和作用区域HSSFDataValidation data_validation = new HSSFDataValidation(regions,constraint); //对sheet页生效sheet.addValidationData(data_validation);//写入文件FileOutputStream fileOut;try {fileOut = new FileOutputStream("workbook.xls");wb.write(fileOut);fileOut.close();} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();}//结束System.out.println("Over");}}。

java动态生成带下拉框的Excel导入模板

java动态生成带下拉框的Excel导入模板

java动态⽣成带下拉框的Excel导⼊模板在实际开发中,由于业务需要,常常需要进⾏Excel导⼊导出操作。

以前做⼀些简单的导⼊时,先准备⼀个模板,再进⾏导⼊,单有⼗⼏、⼆⼗⼏个导⼊模板时,往往要做⼗⼏、⼆⼗⼏个模板。

⽽且,当在模板中需要有下拉框,⽽且下拉数据要实时查询时,这样的⽅法就不太好了;现在,做成了动态⽣成导⼊模板,只要参数传对了,就可以⽣成任何我们想要的导⼊模板,⽽且随意设置下拉框的数⽬、位置。

具体步骤如下:1、需要⽤到的jar包:poi-3.10-FINAL.jarpoi-ooxml-3.10-FINAL.jarpoi-ooxml-schemas-3.10-FINAL.jargradle引⼊:compile group: 'org.apache.poi', name: 'poi', version: '3.10'compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.10-FINAL'2、⽣成Excel导⼊模板 :/*** @Title: createExcelTemplate* @Description: ⽣成Excel导⼊模板* @param@param filePath Excel⽂件路径* @param@param handers Excel列标题(数组)* @param@param downData 下拉框数据(数组)* @param@param downRows 下拉列的序号(数组,序号从0开始)* @return void* @throws*/private static void createExcelTemplate(String filePath, String[] handers,List<String[]> downData, String[] downRows){HSSFWorkbook wb = new HSSFWorkbook();//创建⼯作薄//表头样式HSSFCellStyle style = wb.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建⼀个居中格式//字体样式HSSFFont fontStyle = wb.createFont();fontStyle.setFontName("微软雅⿊");fontStyle.setFontHeightInPoints((short)12);fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);style.setFont(fontStyle);//新建sheetHSSFSheet sheet1 = wb.createSheet("Sheet1");HSSFSheet sheet2 = wb.createSheet("Sheet2");HSSFSheet sheet3 = wb.createSheet("Sheet3");//⽣成sheet1内容HSSFRow rowFirst = sheet1.createRow(0);//第⼀个sheet的第⼀⾏为标题//写标题for(int i=0;i<handers.length;i++){HSSFCell cell = rowFirst.createCell(i); //获取第⼀⾏的每个单元格sheet1.setColumnWidth(i, 4000); //设置每列的列宽cell.setCellStyle(style); //加样式cell.setCellValue(handers[i]); //往单元格⾥写数据}//设置下拉框数据String[] arr = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};int index = 0;HSSFRow row = null;for(int r=0;r<downRows.length;r++){String[] dlData = downData.get(r);//获取下拉对象int rownum = Integer.parseInt(downRows[r]);if(dlData.length<5){ //255以内的下拉//255以内的下拉,参数分别是:作⽤的sheet、下拉内容数组、起始⾏、终⽌⾏、起始列、终⽌列sheet1.addValidationData(setDataValidation(sheet1, dlData, 1, 50000, rownum ,rownum)); //超过255个报错} else { //255以上的下拉,即下拉列表元素很多的情况//1、设置有效性//String strFormula = "Sheet2!$A$1:$A$5000" ; //Sheet2第A1到A5000作为下拉列表来源数据String strFormula = "Sheet2!$"+arr[index]+"$1:$"+arr[index]+"$5000"; //Sheet2第A1到A5000作为下拉列表来源数据sheet2.setColumnWidth(r, 4000); //设置每列的列宽//设置数据有效性加载在哪个单元格上,参数分别是:从sheet2获取A1到A5000作为⼀个下拉的数据、起始⾏、终⽌⾏、起始列、终⽌列 sheet1.addValidationData(SetDataValidation(strFormula, 1, 50000, rownum, rownum)); //下拉列表元素很多的情况//2、⽣成sheet2内容for(int j=0;j<dlData.length;j++){if(index==0){ //第1个下拉选项,直接创建⾏、列row = sheet2.createRow(j); //创建数据⾏sheet2.setColumnWidth(j, 4000); //设置每列的列宽row.createCell(0).setCellValue(dlData[j]); //设置对应单元格的值} else { //⾮第1个下拉选项int rowCount = sheet2.getLastRowNum();//System.out.println("========== LastRowNum =========" + rowCount);if(j<=rowCount){ //前⾯创建过的⾏,直接获取⾏,创建列//获取⾏,创建列sheet2.getRow(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值} else { //未创建过的⾏,直接创建⾏、创建列sheet2.setColumnWidth(j, 4000); //设置每列的列宽//创建⾏、创建列sheet2.createRow(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值}}}index++;}}try {File f = new File(filePath); //写⽂件//不存在则新增if(!f.getParentFile().exists()){f.getParentFile().mkdirs();}if(!f.exists()){f.createNewFile();}FileOutputStream out = new FileOutputStream(f);out.flush();wb.write(out);out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}3、设置有效性:/**** @Title: SetDataValidation* @Description: 下拉列表元素很多的情况 (255以上的下拉)* @param@param strFormula* @param@param firstRow 起始⾏* @param@param endRow 终⽌⾏* @param@param firstCol 起始列* @param@param endCol 终⽌列* @param@return* @return HSSFDataValidation* @throws*/private static HSSFDataValidation SetDataValidation(String strFormula,int firstRow, int endRow, int firstCol, int endCol) {// 设置数据有效性加载在哪个单元格上。

jxl创建下拉列表

jxl创建下拉列表

xl创建下拉框2010-05-05 17:32:41| 分类:jxl|字号订阅import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import jxl.Workbook;import bel;import jxl.write.WritableCellFeatures;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;public class jxlLabel {public static void main(String arg[]) throws IOException, RowsExceededException, WriteException{WritableWorkbook book = Workbook.createWorkbook(new File("c:/test.xls"));WritableSheet sheet = book.createSheet("test", 0);List angerlist = new ArrayList();angerlist.add("是");angerlist.add("否");Label norFormat = null;norFormat = new Label(0, 0, "请选择");WritableCellFeatures ws = new WritableCellFeatures();ws.setDataValidationList(angerlist);norFormat.setCellFeatures(ws);sheet.addCell(norFormat);book.write();book.close();}}jxl创建excel代码(含各种数据样式下拉框)(2012-01-11 12:06:53)转载▼标签:分类:Javajavajxlexcel下拉框itimport java.io.FileOutputStream;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.format.CellFormat;import bel;import jxl.write.WritableCellFeatures;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class JXLExample {public static void main(String[] args) {// 准备设置excel工作表的标题String[] title = { "编号", "产品名称", "产品价格", "产品数量", "生产日期", "产地", "是否出口" };try {// 获得开始时间long start = System.currentTimeMillis();// 输出的excel的路径String filePath = "c:\\test.xls";// 创建Excel工作薄WritableWorkbook wwb;// 新建立一个jxl文件,即在C盘下生成test.xlsOutputStream os = new FileOutputStream(filePath);wwb = Workbook.createWorkbook(os);// 添加第一个工作表并设置第一个Sheet的名字WritableSheet sheet = wwb.createSheet("产品清单", 0);Label label;for (int i = 0; i < title.length; i++) {label = new Label(i, 0, title[i]);// 将定义好的单元格添加到工作表中sheet.addCell(label);}// WritableSheet.setRowView(int i,int height); 指定第i+1行的高度 // WritableSheet.setColumnView(int i,int width); 指定第i+1列的宽度// 填充产品编号jxl.write.Number number = new jxl.write.Number(0, 1, 20071001);sheet.addCell(number);// 填充产品名称label = new Label(1, 1, "金鸽瓜子");sheet.addCell(label);jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat( nf);// 填充产品价格jxl.write.Number nb = new jxl.write.Number(2, 1, 2.45, wcf);sheet.addCell(nb);// 填充产品数量jxl.write.Number numb = new jxl.write.Number(3, 1, 200);sheet.addCell(numb);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String newdate = sdf.format(new Date());// 填充出产日期label = new Label(4, 1, newdate);sheet.addCell(label);// 填充产地label = new Label(5, 1, "陕西西安");sheet.addCell(label);jxl.write.Boolean bool = new jxl.write.Boolean(6, 1, true);sheet.addCell(bool);sheet.mergeCells(0, 3, 2, 3);label = new Label(0, 3, "合并了三个单元格");sheet.addCell(label);CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();WritableCellFormat wc = new WritableCellFormat();// 设置居中wc.setAlignment(Alignment.CENTRE);// 设置边框线wc.setBorder(Border.ALL, BorderLineStyle.THIN);// 设置单元格的背景颜色wc.setBackground(jxl.format.Colour.RED);label = new Label(1, 5, "字体", wc);sheet.addCell(label);// 设置字体WritableFont wfont = new WritableFont(WritableFont.createFont("隶书"), 20);WritableCellFormat font = new WritableCellFormat(wfont);label = new Label(2, 6, "隶书", font);sheet.addCell(label);label = new Label(0, 4, "");WritableCellFeatures wcf1 = new WritableCellFeatures();List<String> angerlist = new ArrayList<String>();angerlist.add("电话");angerlist.add("手机");angerlist.add("呼机");wcf1.setDataValidationList(angerlist);label.setCellFeatures(wcf1);sheet.addCell(label);for (int i = 8; i < 500; i++) {WritableCellFeatures wcf2 = new WritableCellFeatures();wcf2.setDataValidationList(angerlist);label = new Label(0, i, "");label.setCellFeatures(wcf2);sheet.addCell(label);}// 写入数据wwb.write();// 关闭文件wwb.close();long end = System.currentTimeMillis();System.out.println("----完成该操作共用的时间是:" + (end - start)+"ms"); } catch (Exception e) {System.out.println("---出现异常---");e.printStackTrace();}使用JXL创建带下拉列表的单元格(2010-02-21 17:22:06)转载▼标签:分类:技术jxlexceljavaitWritableWorkbook book = Workbook.createWorkbook(new File("D:/test.xls")); WritableSheet sheet = book.createSheet("test", 0);List angerlist = new ArrayList();angerlist.add("是");angerlist.add("否");Label norFormat = null;norFormat = new Label(0, 0, "请选择");WritableCellFeatures ws = new WritableCellFeatures();ws.setDataValidationList(angerlist);norFormat.setCellFeatures(ws);sheet.addCell(norFormat);book.write();book.close();WritableWorkbook book = Workbook.createWorkbook(new File("D:/test.xls")); WritableSheet sheet = book.createSheet("test", 0);List angerlist = new ArrayList();angerlist.add("是");angerlist.add("否");Label norFormat = null;norFormat = new Label(0, 0, "请选择");WritableCellFeatures ws = new WritableCellFeatures();ws.setDataValidationList(angerlist);norFormat.setCellFeatures(ws);sheet.addCell(norFormat);book.write();book.close();头段时间要做个excel导出。

如何在Excel中创建一个带有下拉菜单的

如何在Excel中创建一个带有下拉菜单的

如何在Excel中创建一个带有下拉菜单的数据表格Excel是一款功能强大的电子表格软件,可以用于处理和分析大量的数据。

在Excel中,我们可以通过创建带有下拉菜单的数据表格,提高数据输入和分析的效率。

本文将介绍如何在Excel中创建一个带有下拉菜单的数据表格。

一、准备工作在开始创建带有下拉菜单的数据表格之前,我们需要先准备好数据。

打开Excel软件,并新建一个工作表。

在工作表的不同单元格中输入我们需要的数据,例如商品名称、价格、销售量等。

二、创建下拉菜单1. 选择需要添加下拉菜单的单元格或者单元格范围。

例如,我们想要在商品类别一列中创建一个下拉菜单,可以选择该列的单元格范围。

2. 点击Excel菜单栏中的“数据”选项,然后选择“数据验证”。

3. 在数据验证对话框中,选择“设置”选项卡。

4. 在允许下拉菜单中,选择“列表”。

5. 在“来源”文本框中输入下拉菜单的选项值。

例如,我们可以输入商品的不同类别,每个类别之间用逗号隔开。

6. 确定完成后,点击“确定”按钮。

三、测试下拉菜单1. 完成上述步骤后,在选定的单元格中会显示一个下拉箭头。

2. 点击下拉箭头,会出现之前输入的选项值。

3. 选择其中一个选项后,该单元格的数值会自动填充为所选的选项。

四、复制下拉菜单如果我们需要将下拉菜单复制到其他单元格,可以按照以下步骤进行操作:1. 选定带有下拉菜单的单元格。

2. 将鼠标指针移动到单元格的右下方,会出现一个黑色十字箭头。

3. 按住鼠标左键并向下拖动,选择需要添加下拉菜单的单元格范围。

4. 松开鼠标左键后,复制的单元格范围会自动应用之前创建的下拉菜单。

五、使用下拉菜单进行数据分析通过创建带有下拉菜单的数据表格,我们可以更方便地进行数据分析。

例如,我们可以通过选择不同的商品类别,来查看该类别下的销售量和价格情况。

在数据表格的其他列中,输入相应的数据和公式,并使用下拉菜单来切换商品类别,实时查看数据分析结果。

六、总结通过在Excel中创建带有下拉菜单的数据表格,我们可以提高数据输入和分析的效率。

javapoiexcel操作下拉菜单及数据有效性

javapoiexcel操作下拉菜单及数据有效性

javapoiexcel操作下拉菜单及数据有效性 1private InputStream updateTemplateStyleHSSF(InputStream inputStream,CsCustCon csCustCon) throws IOException, DAOException{2 HSSFWorkbook workbook = new HSSFWorkbook(inputStream);3 HSSFSheet firstSheet= workbook.getSheetAt(0);4 List<String> strList=csConAcceDao.getAcceNameAndNoListByConId(csCustCon);5 String[] strs=(String[])strList.toArray(new String[strList.size()]);67 String secondSheetName="合同附件名称和编号";8 HSSFSheet secondSheet= workbook.createSheet(secondSheetName);9if(null!=strs&&strs.length>0){10for(int i=0;i<strs.length;i++){11 HSSFRow row=secondSheet.createRow(i);12 HSSFCell cell= row.createCell(0);13 cell.setCellValue(strs[i]);14 }15 }16 Name name=workbook.createName();17 name.setNameName(secondSheetName);18 name.setRefersToFormula(secondSheetName+"!$A$1:$A$"+strs.length);19 CellRangeAddressList newStyleRange=new CellRangeAddressList(1,65535,0,0);20 DVConstraint constraint=DVConstraint.createFormulaListConstraint(secondSheetName);21 HSSFDataValidation dataValidation=new HSSFDataValidation(newStyleRange, constraint);22 dataValidation.setShowPromptBox(true);23 firstSheet.addValidationData(dataValidation);2425 ByteArrayOutputStream out=new ByteArrayOutputStream();26 workbook.write(out);27byte[] contents=out.toByteArray();28 InputStream newInputStream= new ByteArrayInputStream(contents);29return newInputStream;30 }需求说明:excel 第⼀页第⼀列为下拉菜单菜单的数据在第⼆页全部显⽰出来如果在第⼆页删除了⼀项保存后第⼀页第⼀列下拉菜单中的数据就少⼀项List<String> strList=csConAcceDao.getAcceNameAndNoListByConId(csCustCon);这⾏代码为返回下拉菜单中的数据参数InputStream inputStream 为 file 对象⽣成的 file 对象则是对应的要解析的excel ⽣成的ByteArrayOutputStream out=new ByteArrayOutputStream();workbook.write(out);byte[] contents=out.toByteArray();InputStream newInputStream= new ByteArrayInputStream(contents);return newInputStream;这段代码为 excel 更新后重新保存 excel ⽂件另:HSSFWorkbook 对象只能处理 2003及以前版本XSSFWorkbook 对象处理 2007及以后版本。

生成Excel表的java代码

生成Excel表的java代码

题记:这是我到宇信易诚的第二个年头,我被调到了数据部门,现在的我现在无休止的和数据与Excel之间纠结。

1. 我们先定义这三个类DataItem类,表示一个单元格内的数字Java代码1package com.tntxia.pem.entity;23public class DataItem {45 private String value;67 private String dataType;89 private String cellStyle="";1011 public String getCellStyle() {12 return cellStyle;13 }1415 public void setCellStyle(String cellStyle) {16 this.cellStyle = cellStyle;17 }1819 /**20 * 空构造函数21 */22 public DataItem(){2324 }2526 /**27 * 字符串参数的构造函数,默认将参数作为这个DataItem的值28 */29 public DataItem(String value){30 this.value = value;31 }3233 public String getDataType() {34 return dataType;35 }3637 public void setDataType(String dataType) {38 this.dataType = dataType;39 }4041 public String getValue() {42 return value;43 }4445 public void setValue(String value) {46 this.value = value;47 }4849}DataRow类,表示Excel中的一行,由多个DataItem组成Java代码50package com.tntxia.pem.entity;5152import java.util.ArrayList;5354public class DataRow {5556 private ArrayList<DataItem> dataItems=newArrayList<DataItem>();5758 public ArrayList<DataItem> getDataItems() {59 return dataItems;60 }6162 public void setDataItems(ArrayList<DataItem> dataItems) {63 this.dataItems = dataItems;64 }6566 public void add(DataItem item){67 this.dataItems.add(item);68 }6970 public void add(String value){71 this.dataItems.add(new DataItem(value));72 }7374 public int size(){75 return this.getDataItems().size();76 }7778}DataList类,整个表的数据,由多个DataRow组成。

Java生成Excel实例

Java生成Excel实例
response.setContentType("application/msexcel");// 定义输出类型
WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件
wsheet.addCell(new Label(1, 0, tmptitle, wcfFC));
wfont = new jxl.write.WritableFont(WritableFont.ARIAL, 14,WritableFont.BOLD,
false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
WritableCellFormat wcfFC = new WritableCellFormat(wfont);
wcfFC.setBackground(Colour.AQUA);
2、在web.xml中注册
<filter>
<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>
org.displaytag.filter.ResponseOverrideFilter
</filter-class>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.jsp</url-pattern>

Java生成Excel文件

Java生成Excel文件

Java生成Excel文件Java是一种功能强大的编程语言,它提供了许多库和工具,可以用来生成Excel文件。

在本文中,我将详细介绍如何使用Java生成Excel文件,包括创建工作簿、工作表和单元格,以及填充数据和设置样式。

1. 导入所需的库在开始之前,我们需要导入Apache POI库,它是一个流行的Java库,用于处理Microsoft Office格式的文件,包括Excel。

您可以从Apache POI的官方网站上下载并导入所需的JAR文件。

2. 创建工作簿和工作表要生成一个Excel文件,首先需要创建一个工作簿对象。

工作簿是Excel文件的顶级容器,其中包含一个或者多个工作表。

以下是创建一个工作簿的示例代码:```javaWorkbook workbook = new XSSFWorkbook(); // 创建一个新的Excel工作簿```接下来,我们可以使用工作簿对象创建一个工作表。

工作表是Excel文件中的一个表格,用于组织数据。

以下是创建一个工作表的示例代码:```javaSheet sheet = workbook.createSheet("Sheet1"); // 创建一个名为"Sheet1"的工作表```3. 创建单元格并填充数据在工作表中,数据存储在单元格中。

要创建一个单元格并填充数据,可以使用以下示例代码:```javaRow row = sheet.createRow(0); // 创建第一行Cell cell = row.createCell(0); // 创建第一个单元格cell.setCellValue("Hello, World!"); // 设置单元格的值为"Hello, World!"```在上面的示例中,我们创建了一个名为"Hello, World!"的单元格,并将其放在第一行的第一个位置。

easy poi下拉框 模版 写法

easy poi下拉框 模版 写法

Easy POI是一个用于生成Excel和Word文档的Java API库,它提供了许多方便快捷的操作方式,其中包括对下拉框模板的写法。

在本文中,我将针对easy poi下拉框模板的写法进行深入探讨,并共享我的个人观点和理解。

让我们来了解一下easy poi下拉框模板的基本概念。

在使用Easy POI 库生成Excel文档时,有时我们需要向特定单元格添加下拉框,以便用户在填写表格时能够从预设的选项中进行选择。

这种下拉框的设置在实际工作中非常常见,比如在数据录入和报表生成等场景中都会用到。

针对easy poi下拉框模板的写法,我们需要考虑以下几个方面:1. 数据源:在设置下拉框时,需要指定下拉框的数据源,也就是用户可以选择的选项列表。

在Easy POI中,我们可以使用DataValidationHelper类来创建下拉框的数据源,可以是一个固定的字符串数组,也可以是一个动态获取的列表数据。

2. 区域设置:除了数据源之外,还需要指定下拉框的作用区域,也就是下拉框所在的单元格范围。

在Easy POI中,我们可以使用DataValidationHelper类的createFormulaListConstraint方法来设置下拉框的区域。

3. 下拉框类型:Easy POI支持不同类型的下拉框,包括普通下拉框和日期下拉框。

在设置下拉框时,我们需要根据实际需求选择合适的下拉框类型,并按照相应的方式进行设置。

4. 模板写法:在实际操作中,我们通常会将下拉框的设置作为模板,以便在生成多个相似结构的Excel文档时能够重复使用。

在Easy POI 中,我们可以将下拉框的设置逻辑封装为模板,以便在需要时进行调用和生成。

基于以上几点,我认为在编写easy poi下拉框模板时,需要遵循以下步骤:第一步,确定下拉框的数据源,包括静态数据源和动态数据源,根据需要进行选择。

第二步,设置下拉框的作用区域,根据实际需求确定下拉框所在的单元格范围。

java使用poi操作excel并创建下拉框

java使用poi操作excel并创建下拉框

Java使用POI操作Excel并创建下拉框Java代码package poiexcel;import java.io.FileOutputStream;import java.util.Date;import ermodel.DVConstraint;import ermodel.HSSFCell;import ermodel.HSSFDataValidation;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.CellRangeAddressList;public class POI{public static void main(String [] args){String [] list={"东软","华信","SAP","海辉"};new POI().createListBox(list);return;}public void createListBox (String [] list){//文件初始化HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("new sheet");//在第一行第一个单元格,插入下拉框HSSFRow row = sheet.createRow(0);HSSFCell cell = row.createCell(0);//普通写入操作cell.setCellValue("请选择");//这是实验//生成下拉列表//只对(0,0)单元格有效CellRangeAddressList regions = new CellRangeAddressList(0,0,0,0);//生成下拉框内容DVConstraint constraint = DVConstraint.createExplicitListConstraint(list);//绑定下拉框和作用区域HSSFDataValidation data_validation = new HSSFDataValidation(regions,constraint); //对sheet页生效sheet.addValidationData(data_validation);//写入文件FileOutputStream fileOut;try {fileOut = new FileOutputStream("workbook.xls");wb.write(fileOut);fileOut.close();} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();}//结束System.out.println("Over");}}。

使用Java写入Excel下拉选择框选项过多不显示问题

使用Java写入Excel下拉选择框选项过多不显示问题
网络错误503请刷新页面重试持续报错请பைடு நூலகம்试更换浏览器或网络环境
使用 Java写入 Excel下拉选择框选项过多不显示问题
setXSSFValidation("hiddenSelect", sheet, comSubExp, 1, 1000, column, column);
public void setXSSFValidation(String hiddenSelect, Sheet sheet, String[] comSubExp, int firstRow, int endRow, int firstCol, int endCol) { Sheet hiddenSheet = wb.createSheet(hiddenSelect); // 把下拉框列表数据放进隐藏sheet Cell cell = null; for (int i = 0; i < comSubExp.length; i++) { Row ro = hiddenSheet.createRow(i); cell = ro.createCell(0); cell.setCellValue(comSubExp[i]); } Name nameCell = wb.createName(); nameCell.setNameName(hiddenSheet.getSheetName()); nameCell.setRefersToFormula(hiddenSheet.getSheetName() + "!$A$1:$A$" + comSubExp.length); wb.setSheetHidden(wb.getSheetIndex(hiddenSheet), true); CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); DataValidationConstraint constraint = null; DataValidation validation = null; DataValidationHelper helper = sheet.getDataValidationHelper(); // 为了适配xls和xlsx不同版本的Excel(即2003和2007版本的) if (sheet instanceof XSSFSheet || sheet instanceof SXSSFSheet) { constraint = helper.createFormulaListConstraint(hiddenSheet.getSheetName()); validation = helper.createValidation(constraint, addressList); } else { constraint = DVConstraint.createFormulaListConstraint(hiddenSheet.getSheetName()); validation = new HSSFDataValidation(addressList, constraint); } if (validation instanceof XSSFDataValidation) { validation.setSuppressDropDownArrow(true); validation.setShowErrorBox(true); } else { validation.setSuppressDropDownArrow(false); } sheet.addValidationData(validation); }

java生成Excel时,为某列(单元格)创建下拉框

java生成Excel时,为某列(单元格)创建下拉框

java⽣成Excel时,为某列(单元格)创建下拉框在做项⽬时,有时需要批量导⼊的功能,通过Excel来进⾏批量导⼊....遇到个⼩问题,希望在Java⽣成Excel中,有个模板,对于某些单元格,如性别等列,可以通过下拉框的⽅式来进⾏为⽤户提⽰。

这样既让⽤户觉得⽅便了,⽽且Excel会⾃动进⾏检查,⼀旦不是下拉框中的内容,将不允许其进⾏输⼊。

代码如下:/*for(int nRow = 2;nRow<10000;nRow++){Label lblColumn = new Label(1,nRow,"");WritableCellFeatures wcf = new WritableCellFeatures();List angerlist = new ArrayList();angerlist.add("男");angerlist.add("⼥");wcf.setDataValidationList(angerlist);lblColumn.setCellFeatures(wcf);ws.addCell(lblColumn);}*/缺点在于nRow要⾃动填充了。

在后台对Excel进⾏循环读取的时候,可加⼊⼀个变量,⽤于记录⼀⾏中单元格为空的数⽬,⼀旦符合要求,则停⽌循环。

if(iBlank >= 16 || bMaxVehicle){inputStream.close();rwb.close();//out.println("100");%><script>top.SetTipsIntoTable("批量导⼊结束");top.ExtWaitSerach(0);top.ShowErrorInfoModal();window.frames.top.FrameDivNoTree.location.href = "vehicleframe.jsp";</script><%conn.close();return ;}。

Java使用POI生成带联动下拉框的excel表格实例代码

Java使用POI生成带联动下拉框的excel表格实例代码

Java使⽤POI⽣成带联动下拉框的excel表格实例代码废话不多说了,直接给⼤家贴代码了,具体代码如下所⽰:import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import ermodel.DVConstraint;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFDataFormat;import ermodel.HSSFDataValidation;import ermodel.HSSFFont;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;import ermodel.DataValidation;import ;import org.apache.poi.ss.util.CellRangeAddressList;public class ExcelLinkage {// 样式private HSSFCellStyle cellStyle;// 初始化省份数据private List<String> province = new ArrayList<String>(Arrays.asList("湖南","⼴东"));// 初始化数据(湖南的市区)private List<String> hnCity = new ArrayList<String>(Arrays.asList("长沙市","邵阳市"));// 初始化数据(⼴东市区)private List<String> gdCity = new ArrayList<String>(Arrays.asList("深圳市","⼴州市"));public void setDataCellStyles(HSSFWorkbook workbook, HSSFSheet sheet) {cellStyle = workbook.createCellStyle();// 设置边框cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 设置背景⾊cellStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);// 设置居中cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 设置字体HSSFFont font = workbook.createFont();font.setFontName("宋体");font.setFontHeightInPoints((short) 11); // 设置字体⼤⼩cellStyle.setFont(font);// 选择需要⽤到的字体格式// 设置单元格格式为⽂本格式(这⾥还可以设置成其他格式,可以⾃⾏百度)HSSFDataFormat format = workbook.createDataFormat();cellStyle.setDataFormat(format.getFormat("@"));}/*** 创建数据域(下拉联动的数据)** @param workbook* @param hideSheetName* 数据域名称*/private void creatHideSheet(HSSFWorkbook workbook, String hideSheetName) {// 创建数据域HSSFSheet sheet = workbook.createSheet(hideSheetName);// ⽤于记录⾏int rowRecord = 0;// 获取⾏(从0下标开始)HSSFRow provinceRow = sheet.createRow(rowRecord);// 创建省份数据this.creatRow(provinceRow, province);// 根据省份插⼊对应的市信息rowRecord++;for (int i = 0; i < province.size(); i++) {List<String> list = new ArrayList<String>();// 我这⾥是写死的,实际中应该从数据库直接获取更好if (province.get(i).toString().equals("湖南")) {// 将省份名称放在插⼊市的第⼀列,这个在后⾯的名称管理中需要⽤到list.add(0, province.get(i).toString());list.addAll(hnCity);} else {list.add(0, province.get(i).toString());list.addAll(gdCity);}//获取⾏HSSFRow Cityrow = sheet.createRow(rowRecord);// 创建省份数据this.creatRow(Cityrow, list);rowRecord++;}}/*** 创建⼀列数据** @param currentRow* @param textList*/public void creatRow(HSSFRow currentRow, List<String> text) {if (text != null) {int i = 0;for (String cellValue : text) {// 注意列是从(1)下标开始HSSFCell userNameLableCell = currentRow.createCell(i++);userNameLableCell.setCellValue(cellValue);}}}/*** 名称管理** @param workbook* @param hideSheetName* 数据域的sheet名*/private void creatExcelNameList(HSSFWorkbook workbook, String hideSheetName) { Name name;name = workbook.createName();// 设置省名称name.setNameName("province");name.setRefersToFormula(hideSheetName + "!$A$1:$"+ this.getcellColumnFlag(province.size())+ "$1");// 设置省下⾯的市for (int i = 0; i < province.size(); i++) {List<String> num = new ArrayList<String>();if (province.get(i).toString().equals("湖南")) {name = workbook.createName();num.add(0,province.get(i).toString());num.addAll(hnCity);name.setNameName(province.get(i).toString());name.setRefersToFormula(hideSheetName + "!$B$" + (i + 2) + ":$"+ this.getcellColumnFlag(num.size()) + "$" + (i + 2));} else {name = workbook.createName();num.add(0,province.get(i).toString());num.addAll(gdCity);name.setNameName(province.get(i).toString());name.setRefersToFormula(hideSheetName + "!$B$" + (i + 2) + ":$"+ this.getcellColumnFlag(num.size()) + "$" + (i + 2));}}}// 根据数据值确定单元格位置(⽐如:28-AB)private String getcellColumnFlag(int num) {String columFiled = "";int chuNum = 0;int yuNum = 0;if (num >= 1 && num <= 26) {columFiled = this.doHandle(num);} else {chuNum = num / 26;yuNum = num % 26;columFiled += this.doHandle(chuNum);columFiled += this.doHandle(yuNum);}return columFiled;}private String doHandle(final int num) {String[] charArr = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J","K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W", "X", "Y", "Z" };return charArr[num - 1].toString();}/*** 使⽤已定义的数据源⽅式设置⼀个数据验证** @param formulaString* @param naturalRowIndex* @param naturalColumnIndex* @return*/public DataValidation getDataValidationByFormula(String formulaString, int naturalRowIndex, int naturalColumnIndex) {// 加载下拉列表内容DVConstraint constraint = DVConstraint.createFormulaListConstraint(formulaString);// 设置数据有效性加载在哪个单元格上。

EasyExcel导出创建Excel下拉框

EasyExcel导出创建Excel下拉框

EasyExcel导出创建Excel下拉框话不多说,上才艺。

下⾯代码粘贴即⽤/**** 导出表格带下拉框*/@GetMapping("exportBox")public void export(HttpServletResponse response)throws IOException{String fileName = "模板.xls";WriteCellStyle headWriteCellStyle = new WriteCellStyle();// 设置背景颜⾊headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());// 设置头字体WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short)14);// 字体加粗headWriteFont.setBold(true);headWriteCellStyle.setWriteFont(headWriteFont);// 设置头居中headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 内容策略WriteCellStyle contentWriteCellStyle = new WriteCellStyle();// 设置内容字体WriteFont contentWriteFont = new WriteFont();contentWriteFont.setFontHeightInPoints((short)12);contentWriteFont.setFontName("宋体");contentWriteCellStyle.setWriteFont(contentWriteFont);// 设置⽔平居中contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 设置垂直居中contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 设置单元格格式为⽂本contentWriteCellStyle.setDataFormat((short)49);HorizontalCellStyleStrategy horizontalCellStyleStrategy =new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);// 假数据实际开发中⼀般是从数据库中查询List<Employee> objects = new ArrayList<>();for (int i = 0; i < 3; i++){Employee employee = new Employee();employee.setSchool(i + "⼤学");employee.setName(i + "RR");objects.add(employee);}response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));// 设置表名,引脚名,⽂件格式,list数据EasyExcel.write(response.getOutputStream(), Employee.class).registerWriteHandler(horizontalCellStyleStrategy).registerWriteHandler(new SpinnerWriteHandler()).sheet("模板").doWrite(objects);}controllerpackage com.temporary.handle;import com.alibaba.excel.write.handler.SheetWriteHandler;import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;import ermodel.*;import org.apache.poi.ss.util.CellRangeAddressList;import ermodel.XSSFDataValidation;import java.util.HashMap;import java.util.Map;/*** @author Han* @Description* @date 2022/3/21*/public class SpinnerWriteHandler implements SheetWriteHandler{@Overridepublic void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {}@Overridepublic void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {String[] ageTypes = new String[] {"0 - 14", "15 - 25", "26 - 50", "51 - ~"};String[] schoolTypes = new String[] {"清华⼤学", "北京⼤学", "郑州⼤学", "南京⼤学"};Map<Integer, String[]> mapDropDown = new HashMap<>();// 这⾥的key值对应导出列的顺序从0开始mapDropDown.put(1, ageTypes);mapDropDown.put(2, schoolTypes);Sheet sheet = writeSheetHolder.getSheet();/// 开始设置下拉框DataValidationHelper helper = sheet.getDataValidationHelper();// 设置下拉框for (Map.Entry<Integer, String[]> entry : mapDropDown.entrySet()){/*** 起始⾏、终⽌⾏、起始列、终⽌列 **/CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, entry.getKey(), entry.getKey());/*** 设置下拉框数据 **/DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue());DataValidation dataValidation = helper.createValidation(constraint, addressList);/*** 处理Excel兼容性问题 **/if (dataValidation instanceof XSSFDataValidation){dataValidation.setSuppressDropDownArrow(true);dataValidation.setShowErrorBox(true);}else{dataValidation.setSuppressDropDownArrow(false);}sheet.addValidationData(dataValidation);}}}Handle。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package wstar.wwwrot.util;import java.io.FileOutputStream;import java.util.HashMap;import ermodel.Row;import ermodel.*;import ermodel.*;import org.apache.poi.ss.util.CellRangeAddressList;public class CreateExcelMoBusiness {private static String EXCEL_HIDE_SHEET_NAME = "excelhidesheetname"; private static String HIDE_SHEET_NAME_PROVINCE = "provinceList";private HashMap map = new HashMap();//设置下拉列表的内容private static String[] provinceList = {"浙江","山东"};public static void main(String[] args) {//使用事例Workbook wb = new HSSFWorkbook();createExcelMo(wb);creatExcelHidePage(wb);setDataValidation(wb);FileOutputStream fileOut;try {fileOut = new FileOutputStream("d://test1.xls");wb.write(fileOut);fileOut.close();} catch (Exception e) {e.printStackTrace();}}public static void createExcelMo(Workbook wb){Sheet sheet = wb.createSheet("用户分类添加批导");// Create a row and put some cells in it. Rows are 0 based.Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("手机号码");cell = row.createCell(1);cell.setCellValue("所属父类");}/*** 设置模板文件的横向表头单元格的样式* @param wb* @return*/public static void creatExcelHidePage(Workbook workbook){ Sheet hideInfoSheet =workbook.createSheet(EXCEL_HIDE_SHEET_NAME);//隐藏一些信息//在隐藏页设置选择信息//第二行设置省份名称列表Row provinceNameRow = hideInfoSheet.createRow(1);creatRow(provinceNameRow, provinceList);//第二行设置省份名称列表creatExcelNameList(workbook, HIDE_SHEET_NAME_PROVINCE, 2, provinceList.length, false);//设置隐藏页标志workbook.setSheetHidden(workbook.getSheetIndex(EXCEL_HIDE_SHEET_N AME), true);}/*** 创建一个名称* @param workbook*/private static void creatExcelNameList(Workbook workbook,String nameCode,int order,int size,boolean cascadeFlag){Name name;name = workbook.createName();name.setNameName(nameCode);name.setRefersToFormula(EXCEL_HIDE_SHEET_NAME+"!"+creatExcelName List(order,size,cascadeFlag));}/*** 名称数据行列计算表达式* @param workbook*/private static String creatExcelNameList(int order,int size,boolean cascadeFlag){char start = 'A';if(cascadeFlag){start = 'B';if(size<=25){char end = (char)(start+size-1);return "$"+start+"$"+order+":$"+end+"$"+order;}else{char endPrefix = 'A';char endSuffix = 'A';if((size-25)/26==0||size==51){//26-51之间,包括边界(仅两次字母表计算)if((size-25)%26==0){//边界值endSuffix = (char)('A'+25);}else{endSuffix = (char)('A'+(size-25)%26-1);}}else{//51以上if((size-25)%26==0){endSuffix = (char)('A'+25);endPrefix = (char)(endPrefix + (size-25)/26 - 1);}else{endSuffix = (char)('A'+(size-25)%26-1);endPrefix = (char)(endPrefix + (size-25)/26);}}return"$"+start+"$"+order+":$"+endPrefix+endSuffix+"$"+order;}}else{if(size<=26){char end = (char)(start+size-1);return "$"+start+"$"+order+":$"+end+"$"+order;}else{char endPrefix = 'A';char endSuffix = 'A';if(size%26==0){endSuffix = (char)('A'+25);if(size>52&&size/26>0){endPrefix = (char)(endPrefix + size/26-2);}}else{endSuffix = (char)('A'+size%26-1);if(size>52&&size/26>0){endPrefix = (char)(endPrefix + size/26-1);}}return "$"+start+"$"+order+":$"+endPrefix+endSuffix+"$"+order; }}}/*** 创建一列数据* @param currentRow* @param textList*/private static void creatRow(Row currentRow,String[] textList){if(textList!=null&&textList.length>0){int i = 0;for(String cellValue : textList){Cell userNameLableCell = currentRow.createCell(i++);userNameLableCell.setCellValue(cellValue);}}}/*** 添加数据验证选项* @param sheet*/public static void setDataValidation(Workbook wb){int sheetIndex = wb.getNumberOfSheets();if(sheetIndex>0){for(int i=0;i<sheetIndex;i++){Sheet sheet = wb.getSheetAt(i);if(!EXCEL_HIDE_SHEET_NAME.equals(sheet.getSheetName())){DataValidation data_validation_list = null;//省份选项添加验证数据for(int a=2;a<3002;a++){data_validation_list =getDataValidationByFormula(HIDE_SHEET_NAME_PROVINCE,a,2);sheet.addValidationData(data_validation_list);}}}}}/*** 使用已定义的数据源方式设置一个数据验证* @param formulaString* @param naturalRowIndex* @param naturalColumnIndex* @return*/private static DataValidation getDataValidationByFormula(String formulaString,int naturalRowIndex,int naturalColumnIndex){//加载下拉列表内容DVConstraint constraint =DVConstraint.createFormulaListConstraint(formulaString);//设置数据有效性加载在哪个单元格上。

相关文档
最新文档