1、前台组织数据
$("input[name='import']").click(function(){
if($("#tableData tr").length>6){
//获取表头数据的长度
var columnNumber = $("#tableData tr:eq(6) td").length;
//定义表格表头
var columnName="";
for(var ii=0;ii<columnNumber;ii++){
columnName+=$("#tableData tr:eq(3) td:eq("+ii+")").text()+",";
}
//定义数据
var dataList="";
for(var dd=6;dd<$("#tableData tr").length;dd++){
for(var ss=0;ss<columnNumber;ss++){
//判空处理
if($("#tableData tr:eq("+dd+") td:eq("+ss+")").text()==""||$("#tableData tr:eq("+dd+") td:eq("+ss+")").text()==null){
$("#tableData tr:eq("+dd+") td:eq("+ss+")").text("-");
}
//最后一条数据分隔标志:#@#
if(ss==columnNumber-1){
//各个居民以“#@#”隔开
dataList+=$("#tableData tr:eq("+dd+") td:eq("+ss+")").text()+"#@#";
}else{
//各个居民对应的数据以“@#@”隔开
dataList+=$("#tableData tr:eq("+dd+") td:eq("+ss+")").text()+"@#@";
}
}
}
//数据总数(总行数)
var dataNumber = $("#tableData tr").length-6;
//获取总数量
jp.post("${ctx}/satistics/socialAssistanceInformation/import",{dataNum:dataNumber,number:columnNumber,title:columnName.substring(0,columnName.length-1),dat:dataList.substring(0,dataList.length-3),dqNumber:dqNum,fdqNumber:fdqNum},function(data){
if(data.success){
jp.success(data.msg);
}else{
alert(data.msg);
};
});
}else{
jp.error("无数据,请先查询数据!");
}
})
2、方法调用时将数据处理
public AjaxJson importFile(HttpServletRequest request,HttpServletResponse response, RedirectAttributes redirectAttributes) throws Exception {
AjaxJson j = new AjaxJson();
String sheetName = "社会救助信息台账";
String titleName = "全区困难群众社会救助信息统计台帐";
String fileName = "社会救助信息台账";
String dataNumber = request.getParameter("dataNum");//总数据行
String columnNumbers = request.getParameter("number");//总数据列
String columnNames = request.getParameter("title");//表头信息
String dataLists = request.getParameter("dat");//总数据
int dqNumber = Integer.parseInt(request.getParameter("dqNumber"));//定期数量
int fdqNumber = Integer.parseInt(request.getParameter("fdqNumber"));//非定期数量
//下载路径
String downloadPath=Global.getConfig("downloadPath");
//定义数据总数量(总行数)
int dataNum= Integer.parseInt(dataNumber);
//定义列数量(纵列数)
int columnNumber = Integer.parseInt(columnNumbers);
//定义列宽
//int[] columnWidth = { 10, 20, 30 };
//表头
String[] columnName = columnNames.split(",");//前台传来由逗号隔开的字符串,转换为数组
//数据
//定义所有人数据的数组
String[][] dataAll = new String[dataNum][columnNumber];
//定义个人数据数组
String [] data = null;
data=dataLists.split("#@#");
for(int i=0;i<data.length;i++) {
dataAll[i]=data[i].split("@#@");
}
String[][] dataList = dataAll;
//导出结果
j = ExportNoResponse(sheetName, titleName,dqNumber,fdqNumber,fileName,
columnNumber, columnName, dataList,downloadPath);
return j;
}
3、重写poi 导出方法
/**
*sheetName 标签名
*titleName 总表头名
*dqNumber 定期救助占几列
*fdqNumber 非定期救助占几列
*fileName 导出时文件名
*columnNumber 数据总列数
*columnName 直接表头数组
*dataList 数据数组(数组中放数组;即外层数组行数据和内层数组列数据)
*downloadPath 下载路径
**/
public AjaxJson ExportNoResponse(String sheetName, String titleName,int dqNumber,int fdqNumber,
String fileName, int columnNumber,String[] columnName, String[][] dataList,String downloadPath) throws Exception {
AjaxJson aj = new AjaxJson();
if (columnNumber == columnName.length) {
// 第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
//sheet.setDefaultColumnWidth(15); //统一设置列宽
//自定义列宽
for (int i = 0; i < columnNumber; i++)
{
for (int j = 0; j <= i; j++)
{
if (i == j) {
if(i==5||i==4||i==6||i==10) {
sheet.setColumnWidth(i, 22 * 256);
}else if(i==8){
sheet.setColumnWidth(i, 35 * 256);
}else if(i==2||i==1||i==11){
sheet.setColumnWidth(i, 15 * 256);
}else {
sheet.setColumnWidth(i, 10 * 256); // 单独设置每列的宽
}
}
}
}
// 创建第0行 也就是标题
HSSFRow row1 = sheet.createRow((int) 0);
row1.setHeightInPoints(50);// 设备标题的高度
// 第三步创建标题的单元格样式style2以及字体样式headerFont1
HSSFCellStyle style2 = wb.createCellStyle();
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 创建字体样式
headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
headerFont1.setFontName("黑体"); // 设置字体类型
headerFont1.setFontHeightInPoints((short) 15); // 设置字体大小
style2.setFont(headerFont1); // 为标题样式设置字体样式
HSSFCell cell1 = row1.createCell(0);// 创建标题第一列
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,
columnNumber - 1)); // 合并第0到第17列
cell1.setCellValue(titleName); // 设置值标题
cell1.setCellStyle(style2); // 设置标题样式
//________________________第2行
// 创建第3行 也就是标题
HSSFRow rowb = sheet.createRow((int) 1);
rowb.setHeightInPoints(30);// 设备标题的高度
// 第三步创建标题的单元格样式styleb以及字体样式headerFontb
HSSFCellStyle styleb = wb.createCellStyle();
styleb.setAlignment(HSSFCellStyle.ALIGN_CENTER);
styleb.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
HSSFFont headerFontb = (HSSFFont) wb.createFont(); // 创建字体样式
headerFontb.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
headerFontb.setFontName("黑体"); // 设置字体类型
headerFontb.setFontHeightInPoints((short) 12); // 设置字体大小
styleb.setFont(headerFontb); // 为标题样式设置字体样式
HSSFCell cellb3 = rowb.createCell(3); // 创建标题第3列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 3,6)); // 合并第3到6列
cellb3.setCellValue("户主基本情况"); // 设置值标题
cellb3.setCellStyle(styleb); // 设置标题样式
HSSFCell cellb9 = rowb.createCell(9); // 创建标题第9列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 9,13)); // 合并第9到13列
cellb9.setCellValue("家庭成员基本情况"); // 设置值标题
cellb9.setCellStyle(styleb); // 设置标题样式
HSSFCell cellb14= rowb.createCell(14); // 创建救助类型列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 14,14+dqNumber+fdqNumber-1));
cellb14.setCellValue("享受社会救助情况(金额)"); // 设置值标题
cellb14.setCellStyle(styleb); // 设置标题样式
HSSFCell celljz= rowb.createCell(14+dqNumber+fdqNumber); // 创建标题第9列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 14+dqNumber+fdqNumber,14+dqNumber+fdqNumber+4-1)); // 合并第9到13列
celljz.setCellValue("人员类别"); // 设置值标题
celljz.setCellStyle(styleb); // 设置标题样式
HSSFCell celltsry= rowb.createCell(14+dqNumber+fdqNumber+4); // 创建标题第9列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 14+dqNumber+fdqNumber+4,14+dqNumber+fdqNumber+4+7-1)); // 合并第9到13列
celltsry.setCellValue("家庭成员中特殊人员情况"); // 设置值标题
celltsry.setCellStyle(styleb); // 设置标题样式
//_____________________第3行
// 创建第2行
HSSFRow rowa = sheet.createRow((int) 2);
rowa.setHeightInPoints(30);// 设备标题的高度
HSSFCell cellhz = rowa.createCell(3);
sheet.addMergedRegion(new CellRangeAddress(1, 2, 3,6));
cellhz.setCellStyle(styleb);
//定期定量救助类型
if(dqNumber>0) {
HSSFCell celldq = rowa.createCell(14);
sheet.addMergedRegion(new CellRangeAddress(2, 2, 14,14+dqNumber-1));
celldq.setCellValue("定期定量类救助"); // 设置值标题
celldq.setCellStyle(styleb);
}
if(fdqNumber>0) {
//非定期定量救助类型
HSSFCell cellfdq = rowa.createCell(14+dqNumber);// 创建标题第9列
sheet.addMergedRegion(new CellRangeAddress(2, 2, 14+dqNumber,14+dqNumber+fdqNumber-1));
cellfdq.setCellValue("非定期定量类救助"); // 设置值标题
cellfdq.setCellStyle(styleb);
}
HSSFCell cellcy = rowa.createCell(9); // 创建标题第9列
sheet.addMergedRegion(new CellRangeAddress(1, 2, 9,13));
cellcy.setCellStyle(styleb);
HSSFCell cellrylb= rowa.createCell(14+dqNumber+fdqNumber);
sheet.addMergedRegion(new CellRangeAddress(1, 2, 14+dqNumber+fdqNumber,14+dqNumber+fdqNumber+4-1)); // 合并第9到13列
cellrylb.setCellStyle(styleb);
HSSFCell celltsqk= rowa.createCell(14+dqNumber+fdqNumber+4); // 创建标题第9列
sheet.addMergedRegion(new CellRangeAddress(1, 2, 14+dqNumber+fdqNumber+4,14+dqNumber+fdqNumber+4+7-1)); // 合并第9到13列
celltsqk.setCellStyle(styleb);
HSSFCell cellfirst= rowa.createCell(0);
sheet.addMergedRegion(new CellRangeAddress(1, 2, 0,0));
HSSFCell cellsecond= rowa.createCell(1);
sheet.addMergedRegion(new CellRangeAddress(1, 2, 1,1));
HSSFCell cellthird= rowa.createCell(2);
sheet.addMergedRegion(new CellRangeAddress(1, 2, 2,2));
HSSFCell celleight= rowa.createCell(7);
sheet.addMergedRegion(new CellRangeAddress(1, 2, 7,7));
HSSFCell cellnine= rowa.createCell(8);
sheet.addMergedRegion(new CellRangeAddress(1, 2, 8,8));
HSSFCell celllast= rowa.createCell(columnNumber-1);
sheet.addMergedRegion(new CellRangeAddress(1, 2, columnNumber-1,columnNumber-1));
HSSFCell celllastago= rowa.createCell(columnNumber-2);
sheet.addMergedRegion(new CellRangeAddress(1, 2, columnNumber-2,columnNumber-2));
// 创建表头
HSSFRow row = sheet.createRow((int) 3);
row.setHeightInPoints(37);// 设置表头高度
// 第四步,创建表头单元格样式 以及表头的字体样式
HSSFCellStyle style = wb.createCellStyle();
style.setWrapText(true);// 设置自动换行
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式
/*style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);*/
HSSFFont headerFont = (HSSFFont) wb.createFont(); // 创建字体样式
headerFont.setFontName("黑体"); // 设置字体类型
headerFont.setFontHeightInPoints((short) 10); // 设置字体大小
style.setFont(headerFont); // 为标题样式设置字体样式
// 第四.一步,创建表头的列
for (int i = 0; i < columnNumber; i++)
{
HSSFCell cell = row.createCell(i);
cell.setCellValue(columnName[i]);
cell.setCellStyle(style);
}
// 第五步,创建单元格,并设置值
for (int i = 0; i < dataList.length; i++)
{
row = sheet.createRow((int) i + 4);
//设置数据行固定行高
row.setHeightInPoints(25);
// 为数据内容设置特点新单元格样式1 自动换行 上下居中
HSSFCellStyle zidonghuanhang = wb.createCellStyle();
zidonghuanhang.setWrapText(true);// 设置自动换行
// 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中
HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();
zidonghuanhang2.setWrapText(true);// 设置自动换行
zidonghuanhang2
.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个上下居中格式
zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
HSSFCell datacell = null;
for (int j = 0; j < columnNumber; j++)
{
datacell = row.createCell(j);
datacell.setCellValue(dataList[i][j]);
datacell.setCellStyle(zidonghuanhang2);
}
}
HSSFRow rowLast = sheet.createRow(4+dataList.length);
rowLast.setHeightInPoints(25);// 设备标题的高度
HSSFCellStyle styleLastRow = wb.createCellStyle();
styleLastRow.setAlignment(HSSFCellStyle.ALIGN_RIGHT); //居右
styleLastRow.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式
HSSFFont lastRowFont = (HSSFFont) wb.createFont(); // 创建字体样式
lastRowFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗
styleLastRow.setFont(lastRowFont); // 为标题样式设置字体样式
HSSFCell cellLast = rowLast.createCell(0);
sheet.addMergedRegion(new CellRangeAddress(4+dataList.length, 4+dataList.length, 0,columnNumber-1));
cellLast.setCellValue("制表人: "+UserUtils.getUser().getName()+" 制表时间: "+DateUtils.getDateTime()+" ");
cellLast.setCellStyle(styleLastRow);
// 第六步,将文件存到指定位置
String curTime = DateUtils.getDate("-yyyyMMddHHmmss");
try {
FileOutputStream fout = new FileOutputStream(downloadPath+fileName+curTime+".xlsx");
wb.write(fout);
aj.setSuccess(true);
aj.setMsg("导出" + fileName + "成功!");
fout.close();
} catch (Exception e) {
//捕捉异常信息
e.printStackTrace();
aj.setSuccess(false);
aj.setMsg("导出" + fileName + "失败! \n失败原因:"+e.getMessage());
}
} else {
aj.setSuccess(false);
aj.setMsg("列数目长度名称三个数组长度要一致");
}
return aj;
}