返回目录:excel表格制作
public SXSSFWorkbook(XSSFWorkbook workbook)
Construct a workbook from a template.
There are three use-cases to use
SXSSFWorkbook(XSSFWorkbook) :Append new sheets to existing workbooks. You can open existing workbook from
a file or create on the fly with XSSF.Append rows to existing sheets. The row number MUST be greater than
max(rownum) in the template sheet.Use existing workbook as a template and re-use global objects such as cell
styles, formats, images, etc.Access initial cells and rows in the template. After constructing SXSSFWorkbook(XSSFWorkbook) all internal windows are empty and SXSSFSheet.getRow(int) and SXSSFRow.getCell(int) return null.
Override existing cells and rows. The API silently allows that but the
output file is invalid and Excel cannot read it.
All three use cases can work in a
combination. What is not supported:
API文档里面有,反正就是7a686964616fe78988e69d83333说,使用SXSSFWorkbook附加数据到已经存在的Excel中的话就是不行的;SXSSFSheet.getRow(int) 和 SXSSFRow.getCell(int) 会返回空。
SXSSFWorkbook只能用在新创建Excel中才行。
Workbook work = Workbook.getWorkbook(new File("D://test.xsl"));//Excel获得文件
WritableWorkbook book = Workbook.createWorkbook(new File("D://test.xsl"));//这个是百创度建excel
上面你选知择你 得到 book的方式
WritableSheet sheet = book.getSheet(0);
sheet.getSettings().setProtected(true);
这样道是锁上了整个excel
sheet.getSettings().setPassword("12345678") ;
这个是解回锁的时候所设置答的密码
望采纳
package cn.com.jsoft.utils;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
import jxl.SheetSettings;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
/**
* jxl导出excel
* @author jamboree
* @date 2013-11-28
*/
public class JxlExcelUtils {
/**
* @author
* @param objData 导出内容数组
* @param sheetName 导出工作表的名称
* @param columns 导出Excel的表头数组
* @return
*/
public static int exportToExcel(HttpServletResponse response, List<Map<String, Object>> objData, String sheetName,List<String> columns) {
int flag = 0;
//声明工作簿jxl.write.WritableWorkbook
WritableWorkbook wwb;
try {
//根据传进来的file对象创建可写入的Excel工作薄
OutputStream os = response.getOutputStream();
wwb = Workbook.createWorkbook(os);
/*
* 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表
* 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样
* 代码中的"0"就是sheet1、其它的一一对应。
* createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置
*/
WritableSheet ws = wwb.createSheet(sheetName, 0);
SheetSettings ss = ws.getSettings();
ss.setVerticalFreeze(1);//冻结表头
WritableFont font1 =new WritableFont(WritableFont.createFont("微软雅黑"), 10 ,WritableFont.BOLD);
WritableFont font2 =new WritableFont(WritableFont.createFont("微软雅黑"), 9 ,WritableFont.NO_BOLD);
WritableCellFormat wcf = new WritableCellFormat(font1);
WritableCellFormat wcf2 = new WritableCellFormat(font2);
WritableCellFormat wcf3 = new WritableCellFormat(font2);//设置样式,字体
//创建单元格样式
//WritableCellFormat wcf = new WritableCellFormat();
//背景颜色
wcf.setBackground(jxl.format.Colour.YELLOW);
wcf.setAlignment(Alignment.CENTRE); //平行居中
wcf.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直居中
wcf3.setAlignment(Alignment.CENTRE); //平行居中
wcf3.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直居中
wcf3.setBackground(Colour.LIGHT_ORANGE);
wcf2.setAlignment(Alignment.CENTRE); //平行居中
wcf2.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直居中
/*
* 这个是单元格内容居中显示
* 还有很多很多样式
*/
wcf.setAlignment(Alignment.CENTRE);
//判断一下表头数组是否有数据
if (columns != null && columns.size() > 0) {
//循环写入表头
for (int i = 0; i < columns.size(); i++) {
/*
* 添加单元格(Cell)内容addCell()
* 添加Label对象Label()
* 数据的类型有很多种、在这里你需要什么类型就导入什么类型
* 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label
* Label(i, 0, columns[i], wcf)
* 其中i为列、0为行、columns[i]为数e79fa5e98193e4b893e5b19e332据、wcf为样式
* 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中
*/
ws.addCell(new Label(i, 0, columns.get(i), wcf));
}
//判断表中是否有数据
if (objData != null && objData.size() > 0) {
//循环写入表中数据
for (int i = 0; i < objData.size(); i++) {
//转换成map集合{activyName:测试功能,count:2}
Map<String, Object> map = (Map<String, Object>)objData.get(i);
//循环输出map中的子集:既列值
int j=0;
for(Object o:map.keySet()){
//ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)
ws.addCell(new Label(j,i+1,String.valueOf(map.get(o))));
j++;
}
}
}else{
flag = -1;
}
//写入Exel工作表
wwb.write();
//关闭Excel工作薄对象
wwb.close();
//关闭流
os.flush();
os.close();
os =null;
}
}catch (IllegalStateException e) {
System.err.println(e.getMessage());
}
catch (Exception ex) {
flag = 0;
ex.printStackTrace();
}
return flag;
}
/**
* 下载excel
* @author
* @param response
* @param filename 文件名 ,如:20110808.xls
* @param listData 数据源
* @param sheetName 表头名称
* @param columns 列名称集合,如:{物品名称,数量,单价}
*/
public static void exportexcle(HttpServletResponse response,String filename,List<Map<String, Object>> listData,String sheetName,List<String> columns)
{
//调用上面的方法、生成Excel文件
response.setContentType("application/vnd.ms-excel");
//response.setHeader("Content-Disposition", "attachment;filename="+filename);
try {
response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("gb2312"), "ISO8859-1") + ".xls");
exportToExcel(response, listData, sheetName, columns);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
调用的时候:
jxlUtils.exportexcle(response, filename, listData, sheetName, columns);
response.setHeader("Content-Disposition", "attachment;filename=" + new
String(filename.getBytes("gb2312"), "ISO8859-1") + ".xls");
//创作工作薄
WritableWorkbook wbook = Workbook.createWorkbook(os);
//创建新的一知页
WritableSheet wsheet = wbook.createSheet(writableSheet, 0);
//格式化字符串道
WritableCellFormat wcfFC = new WritableCellFormat();
//添加一列ID自动增长回 i表示行 j表示列wsheet.addCell表示添答加单元格
wsheet.addCell(new Label(0, j, String.valueOf(i + 1)));