jxl生成excel

Posted zhangxiaozhen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jxl生成excel相关的知识,希望对你有一定的参考价值。

最近项目中要用到生成excel,就写下来分享给大家

其实很简单,码代码,自己看:

首先需要导jxl jar包进来

<!-- jxl execl -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>

代码:

public static void main(String[] args) throws IOException, RowsExceededException, WriteException
File excelFile = new File("C:\\Users\\zhangzhen\\Desktop\\excel\\补盲扩总表.xls");
WritableWorkbook workbook = Workbook.createWorkbook(excelFile);// 生成工作簿
WritableSheet sheet = workbook.createSheet("扩容明细", 0);// 生成工作表,此处参数一为工作表名称,参数二为第几个工作业,默认从0开始
// 居中 字体11
WritableFont Bwf1 = new WritableFont(WritableFont.ARIAL, 11, WritableFont.NO_BOLD, false);
WritableCellFormat wcf1 = new WritableCellFormat(Bwf1);
wcf1.setAlignment(jxl.write.Alignment.CENTRE);//
// 设置垂直对齐为居中对齐
wcf1.setVerticalAlignment(VerticalAlignment.CENTRE);
// 设置框线为实线
wcf1.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN);

Map<String, Object> map = new LinkedHashMap<String, Object>();// 设置表头,
map.put("需求日期", 20);// 表头,表格宽度
sheet.mergeCells(0, 0, 0, 1);// 此函数为合并单元格,参数分别为列,行,合并到哪一列,合并到哪一行,
map.put("扩容类型", 20);
sheet.mergeCells(1, 0, 1, 1);
map.put("所属单位", 20);
sheet.mergeCells(2, 0, 2, 1);
map.put("所属工队", 20);
sheet.mergeCells(3, 0, 3, 1);
map.put("是否超时", 20);
sheet.mergeCells(4, 0, 4, 1);
map.put("修补扩类型", 20);
sheet.mergeCells(5, 0, 5, 1);
map.put("关联安装工单号", 20);
sheet.mergeCells(6, 0, 6, 1);
map.put("片区", 20);
sheet.mergeCells(7, 0, 7, 1);
map.put("镇区", 20);
sheet.mergeCells(8, 0, 8, 1);
map.put("五级站点", 60);
sheet.mergeCells(9, 0, 9, 1);
map.put("需求内容", 60);
sheet.mergeCells(10, 0, 10, 1);
map.put("箱体名称", 60);

map.put("分光器名称", 60);

map.put("完成情况", 20);// 此处因为合并单元格,第十四列和第十五列需另外设置列宽
sheet.setColumnView(14, 20);
sheet.setColumnView(15, 20);
sheet.mergeCells(13, 0, 15, 0);
setCols(sheet, 0, 0, map, wcf1);
map.clear();
map.put("结算费用", 20);
sheet.mergeCells(16, 0, 16, 1);
map.put("完工日期", 20);
sheet.mergeCells(17, 0, 17, 1);
map.put("现场当前环节", 20);
sheet.mergeCells(18, 0, 18, 1);
setCols(sheet, 16, 0, map, wcf1);
map.clear();
map.put("", 60);
setCols(sheet, 19, 0, map, wcf1);
setCols(sheet, 20, 0, map, wcf1);
map.clear();
map.put("系统当前环节", 20);
sheet.mergeCells(21, 0, 21, 1);
setCols(sheet, 21, 0, map, wcf1);
map.clear();
map.put("", 20);
setCols(sheet, 22, 0, map, wcf1);
setCols(sheet, 23, 0, map, wcf1);
setCols(sheet, 24, 0, map, wcf1);
setCols(sheet, 25, 0, map, wcf1);
setCols(sheet, 26, 0, map, wcf1);
map.clear();
map.put("服开工单号", 60);
sheet.mergeCells(27, 0, 27, 1);
map.put("服开起单时间", 60);
sheet.mergeCells(28, 0, 28, 1);
map.put("派单时间", 60);
sheet.mergeCells(29, 0, 29, 1);
map.put("服开环节", 60);
sheet.mergeCells(30, 0, 30, 1);
map.put("备注", 60);
sheet.mergeCells(31, 0, 31, 1);
setCols(sheet, 27, 0, map, wcf1);
// 设置第二行表头
map.clear();
map.put("", 60);
setCols(sheet, 11, 1, map, wcf1);
setCols(sheet, 12, 1, map, wcf1);
map.clear();
map.put("箱体个数", 20);
map.put("分光器数", 20);
map.put("总端口数", 20);
setCols(sheet, 13, 1, map, wcf1);
map.clear();
map.put("装维人员联系电话", 60);
map.put("装维人员姓名", 60);
setCols(sheet, 19, 1, map, wcf1);
map.clear();
map.put("GF箱体材料", 20);
map.put("光缆芯数", 20);
map.put("光缆米数", 20);
map.put("分光器类型", 20);
map.put("分光器个数", 20);
setCols(sheet, 22, 1, map, wcf1);

// 填充数据
List list = new ArrayList<Object>();
List list1 = new ArrayList<Object>();
list1.add("2019-08-15");
list1.add("TOP站点");
list1.add("铁通本网");
list1.add("新余施工队");
list1.add("否");
list1.add("新址加箱");
list1.add("GC-20150822");
list1.add("北区");
list1.add("寮步镇");
list1.add("(铁通本网)西溪社区珠东新村");
list1.add("新址加箱:【JIA】武威市苏武镇苏武社区15号后墙-GJ20建议安装位置:西溪珠西250号");
list1.add("【JIA】武威市苏武镇苏武社区新村西溪珠西250号-GJ20-GF18");
list1.add("武威市苏武镇苏武社区新村城中村小区(二级)1/4-POS001-1:8-快");
list1.add("1");
list1.add("1");
list1.add("8");
list1.add("");
list1.add("2019-08-15");
list1.add("扩容完成");
list1.add("15623144000");
list1.add("新余");
list1.add("");
list1.add("016芯 非金属");
list1.add("6芯");
list1.add("2");
list1.add("插片式1:8-SC(大方头)");
list1.add("1");
list1.add("201905220120");
list1.add("2019-08-15");
list1.add("2019-08-15");
list1.add("1");
list1.add("暂无");
list.add(list1);

setExeclSheetData(2, 0, list, sheet, wcf1);

workbook.write();
workbook.close();

 

/***
*
* @param sheet 工作表
* @param cols 第几列
* @param rows 第几行
* @param map 表头数据
* @param format 单元格格式
* @throws RowsExceededException
* @throws WriteException
*/
public static void setCols(WritableSheet sheet, int cols, int rows, Map<String, Object> map,
WritableCellFormat format) throws RowsExceededException, WriteException

int c = cols;

Set<Entry<String, Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet)
int width = (int) entry.getValue();
sheet.addCell(new Label(c, rows, entry.getKey(), format));// 设置单元格内容和格式
sheet.setColumnView(c, width);// 设置单元格格式
c++;

/**
* 指定起点的块级数据填充
*
* @param row 起点 行
* @param col 起点 列
* @param list 欲填充数据的二维列表
* @param sheet
* @param format 单元样式 若设置为null 将使用默认样式
* @throws RowsExceededException
* @throws WriteException
*/

public static void setExeclSheetData(int row, int col, List<List<Object>> list, WritableSheet sheet,
WritableCellFormat format) throws RowsExceededException, WriteException

if (format == null)
WritableFont Bwf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false);
format = new jxl.write.WritableCellFormat(Bwf);
format.setAlignment(jxl.write.Alignment.LEFT);// 默认居左
// 设置垂直对齐为居中对齐
format.setVerticalAlignment(VerticalAlignment.CENTRE);
// 设置框线为实线
format.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN);

// 索引第几行的数据
int index = 0;
// 行
for (int i = row; i < list.size() + row; i++)
// 索引的第几列的数据
int index_x = 0;
// 列
for (int j = col; j < list.get(index).size() + col; j++)

Object data = list.get(index).get(index_x);
// 数值型
if (data instanceof Double) //此处做判断是为方便使用聚合函数
double d = ((Double) data).doubleValue();
jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
sheet.addCell(numberC);
else if (data instanceof Float)
float d = ((Float) data).floatValue();
jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
sheet.addCell(numberC);
else if (data instanceof Integer)
int d = ((Integer) data).intValue();
jxl.write.Number numberC = new jxl.write.Number(j, i, d, format);
sheet.addCell(numberC);
else // 字符串 类型
sheet.addCell(new Label(j, i, data + "", format));

index_x++;

index++;

就这么多,上面注释也写得很清楚,不懂可以下方留言(本人也是菜鸟,不喜勿喷!)

以上是关于jxl生成excel的主要内容,如果未能解决你的问题,请参考以下文章

java如何生成excel,具体的

JXL包大解析;Java程序生成excel文件和解析excel文件内容

JXL包大解析;Java程序生成excel文件和解析excel文件内容

java jxl 导出excel出现代码走完 页面不出现下载对话框

如何通过java代码将access数据库表中的数据导出生成excel格式的文件,谢谢各位。

如何导出生成excel文件 java