您的位置:首页 > 其它

使用JXL进行后台生成excel文件

2016-07-05 15:14 309 查看
现在公司项目,由于业务需要进行进行利用表数据进行导出对应的excel表出来,鉴于自己使用的是JXL,就用JXL进行讲述吧,

JXL使用比较简单明了,也支持中文,API也比较全,并且也支持单元格的定义。下面贴上自己稍微封装好的源码,可能封装得不是很好,不过也请海涵呢。

一.下载对应jxl.jar包,导入程序,或者使用maven引入依赖包

        <dependency>

            <groupId>net.sourceforge.jexcelapi</groupId>

            <artifactId>jxl</artifactId>

            <version>2.6</version>

        </dependency>

此处提供个jxl 的jar下载路径:http://download.csdn.net/detail/beu425210220/9567828  点击打开链接

二.然后详情看源码,大概步骤是

   1.创建WritableWorkbook对象,

   2.利用WritableWorkbook.createSheet()生成WritableSheet表内容页

   3.利用WritableSheet设置列的视图setColumnView(可有可无,有默认的)

   4.双循坏写入head跟data数据库。

   4.进行WritableWorkbook的写操作。

源代码如下:

/**
*
* @param file  要生成的excel文件
* @param sheetTitle 工作表标题
* @param headList 表头List
* @param dataList 数据List
* @param isSeq 是否需要序号列
* @return true or false
*/
private boolean exportToExcel(File file, String sheetTitle,
List headList, List> dataList, boolean isSeq) {
logger.info("list:{" + dataList + "}");
try {

WritableWorkbook wwb;
wwb = Workbook.createWorkbook(file);

WritableSheet ws1 = wwb.createSheet(sheetTitle, 0);

// 设置行高
ws1.setRowView(0, 600, false);

// 按照需求文档中的模版设置默认附件一的列宽
int k = 0;
if (isSeq == true) {
ws1.setColumnView(k++, 10);
}
for (String head : headList) {
ws1.setColumnView(k++, 20);
}

/* 定义附件一字体样式制定 */
// 表头
WritableFont font1_tableName = new WritableFont(
WritableFont.createFont("宋体"), 12, WritableFont.BOLD);
// 内容
WritableFont font1_tableContent = new WritableFont(
WritableFont.createFont("仿宋_GB2312"), 10,
WritableFont.NO_BOLD);

/* 定义附件一显示格式, */
// 表头
WritableCellFormat wcf1_tableName = new WritableCellFormat(
font1_tableName);
wcf1_tableName.setAlignment(Alignment.CENTRE);
wcf1_tableName.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf1_tableName.setWrap(true);

// 下面定义的是特殊说明居中部分
WritableCellFormat wcf1_tableContent_center = new WritableCellFormat(
font1_tableContent, NumberFormats.TEXT);
wcf1_tableContent_center.setAlignment(Alignment.CENTRE);
wcf1_tableContent_center
.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf1_tableContent_center.setBorder(Border.ALL,
BorderLineStyle.THIN);
wcf1_tableContent_center.setWrap(true);

// 下面定义的是特殊说明要左对齐部分
WritableCellFormat wcf1_tableContent_left = new WritableCellFormat(
font1_tableContent, NumberFormats.TEXT);
wcf1_tableContent_left.setAlignment(Alignment.LEFT);
wcf1_tableContent_left
.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf1_tableContent_left.setBorder(Border.ALL,
BorderLineStyle.THIN);
wcf1_tableContent_left.setWrap(true);

// 下面定义的是特殊说明要右对齐部分
WritableCellFormat wcf1_tableContent_right = new WritableCellFormat(
font1_tableContent, NumberFormats.TEXT);
wcf1_tableContent_right.setAlignment(Alignment.RIGHT);
wcf1_tableContent_right
.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf1_tableContent_right.setBorder(Border.ALL,
BorderLineStyle.THIN);
wcf1_tableContent_right.setWrap(true);

// 是否写入表头
int i = 0;
if (headList != null && headList.size() > 0) {
// 循环写入表头
int j = 0;
if (isSeq == true) {// 判断是否需要序号列
ws1.addCell(new Label(j++, 0, "序号", wcf1_tableName));
}
for (String head : headList) {
ws1.addCell(new Label(j++, 0, head, wcf1_tableName));
}
i++;
}
// 数据从第二行开始
for (List subList : dataList) {
int j = 0;
if (isSeq == true) {// 判断是否需要序号列的内容列
ws1.addCell(new Label(j++, i, i + "",
wcf1_tableContent_right));
}
for (String data : subList) {

ws1.addCell(new Label(j++, i, data,
wcf1_tableContent_left));
// logger.info("j:["+j+"],i:["+i+"]"+",data:{"+data+"}");

}
i++;
}
// 写入Exel工作表
wwb.write();

// 关闭Excel工作薄对象
wwb.close();

} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
ex.printStackTrace();
return false;
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: