标题:
java导出文件弹出下载框让用户选择路径(4)
[打印本页]
作者:
look_w
时间:
2019-4-20 14:54
标题:
java导出文件弹出下载框让用户选择路径(4)
ExcelUtils.class
package com.mofang.util;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
* ExcelUtils 导出excel
*
* @author joe
*
*/
public class ExcelUtils {
/**
* 生成一个Excel文件
*
* @param title 工作表的名称
* @param titles 工作表的内容
*/
public static String writeExcel(String[][] titles, String title,
HttpServletResponse response, Boolean[] titleNumFlags)
throws IOException {
String fileName = title + Calendar.getInstance().getTimeInMillis();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="
+ new String((fileName + ".xls").getBytes(), "iso-8859-1"));
// 根据传进来的file对象创建可写入的Excel工作薄
OutputStream os = response.getOutputStream();
WritableWorkbook wwb = null;
try {
// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(os);
} catch (IOException e) {
e.printStackTrace();
}
if (wwb != null) {
// 创建一个可写入的工作表
// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet(title, 1);
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#0.00"); // 设置数字格式
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(
nf); // 设置表单格式
// 下面开始添加单元格
for (int row = 0; row < titles.length; row++) {
// System.out.println(row);
for (int j = 0; j < titles[row].length; j++) {
if (titleNumFlags[j]) {// 当数值型时先转换成double
try {
double titlesDoubleValue = Double
.parseDouble(titles[row][j]);
ws = writeNumberToWs(ws, wcfN, row, j,
titlesDoubleValue);
} catch (Exception notnum) {
String titlesStringValue = titles[row][j];
// 这里需要注意的是,在Excel中,j表示列,row表示行
ws = writeStringToWs(ws, row, j, titlesStringValue);
}
} else {
String titlesStringValue = titles[row][j];
// 这里需要注意的是,在Excel中,j表示列,row表示行
ws = writeStringToWs(ws, row, j, titlesStringValue);
}
}
}
try {
// 从内存中写入文件中
wwb.write();
// 关闭资源,释放内存
wwb.close();
os.flush();
os.close();
} catch (IOException | WriteException e) {
//e.printStackTrace();
}
}
return fileName;
}
private static WritableSheet writeNumberToWs(WritableSheet ws,
jxl.write.WritableCellFormat wcfN, int row, int j,
double titlesDoubleValue) {
jxl.write.Number labelNF = new jxl.write.Number(j, row,
titlesDoubleValue, wcfN); // 格式化数值
try {
ws.addCell(labelNF);
} catch (WriteException e1) {
e1.printStackTrace();
}
return ws;
}
private static WritableSheet writeStringToWs(WritableSheet ws, int row,
int j, String titlesStringValue) {
Label labelC = new Label(j, row, titlesStringValue);
try {
// 将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (WriteException e) {
e.printStackTrace();
}
return ws;
}
public static String[][] changeToArray(ArrayList<String[]> contentsArrayList) {
String[][] contents = new String[contentsArrayList.size()][];
for (int i = 0; i < contentsArrayList.size(); i++) {
contents[i] = contentsArrayList.get(i);
}
return contents;
}
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0