この記事の内容は、Java を使用してデータを Excel ファイルにエクスポートする方法に関するものです。必要な方は参考にしていただければ幸いです。
#この記事では主に、Java を使用してデータを Excel にエクスポートする方法について説明します。 xls 形式のファイル。
#例: フロントデスクから問い合わせたデータを excl 形式のファイルにエクスポートしたいと考えています。フロントデスクからバックエンドにクエリ条件(データ)を渡す必要があります。バックエンドはデータを取得し、SQLを書き、データベースからデータを取得します(フロントデスクでクエリしたデータと同じです)。ここでクエリされるデータはリスト オブジェクトです)、excl ファイルを生成します (データはファイル内にあり、ファイル名、場所、内容はすべて変更できます)。
#最初のステップ: バックグラウンドでフロントエンドのクエリ条件を取得し、データをクエリします (このステップは何を書くかではありません。)
1.バックグラウンドでフロントページのデータを取得します。 json を使用して値を渡すことも、URL を使用して値を渡すこともできます。どちらかを使用してください。結局のところ、達成した者が先です。意味はそれだけです) var data = $("#fromid").serializeObject();//表单变为json格式字符串
//没有form表单的可以自己认为创建一个json字符串
//var data = jQuery.parseJSON('{"FPHM":null,"FDBH":null}');
data["FPHM"]=FPHMs;//页面的查询条件,将data传递到后台
data["FDBH"]=_FDBH;
$.ajax({
beforeSend: function(xhr){
xhr.setRequestHeader('Authorization', 'Bearer ' + $.session.get("token"));
},
url: "",//你的url
type: "post",
contentType: 'application/json;charset=utf-8',
dataType: "json",
data: JSON.stringify(data),//传递格式为json格式
success: function(data){
$.messager.alert("提示","成功"+data,"info");
},
async: true,
error: function(er) {}
});
##例:
function clickdown(){//这里演示传递两个参数 var prnteTest=document.getElementById("prnte").value; var prnteName=document.getElementById("prnteName").value; location.href='url?prnteTest='+prnteTest+'&prnteName='+prnteName; }
2. データベース内のクエリ データを取得します (これはそれほど重要ではなく、単純です。
)これは SQL ステートメントです。これを説明するにはどうすればよいですか。 ? それは単なる SQL です。データを生成したい場合は、SQL を使用して確認するだけです。
json 形式のデータを解析する方法には主に興味がありません。私が使用する URL データを渡します#形式を使用します
## 可以使用下面的进行解析 如果上面方法不能够解析json格式字符串,可自行百度。网上不少正解(毕竟本文主要讲的不是这个)。 得到数据之后,组装sql语句,在数据库中查询即可,这里不演示怎么查询的,结果为一个list集合里面存放着要导出的数据 第二步:生成excel文件 根据前台得到的条件,从数据库中得到数据,导出的表头 其中list存放的是一个对象,类似javaBean: 形如: 我使用的是Mybatis,其中有一个resultType,为返回类型。 形如: 导出文件方法 响应到前台(就是读取文件,网上很多) 导出文件大致为:String name = request.getParameter("name");
{ "name": 3,"post": 1 ,
"rows": [{"JLBH":30005,"HTH":40200,"WLDW":"0316","NAME":"深圳市控股公司",
"DTID":585,"DT_NAME":"珠宝采购","FKJE":234.0}]}
JSONObject jsonObj = JSONObject.fromObject(data);
Stringname =jsonObj.getParameter("name");
/**
* 测试 导出xls文件的表头
*/
public static final String[] TestToXls = { "编号","设计人员工号", "设计人员姓名","开发人员工号", "开发人员姓名", "测试人员工号", "测试人员姓名"};
List<Test> listTest = new ArrayList<Test>();
public class Test{
private String idd;//编号
private String designId;//设计人员工号
private String designName;//设计人员姓名
private String developId;//开发人员工号
private String developName;//开发人员姓名
private String testId;//测试人员工号
private String testName;//测试人员姓名
//对应的set,get 省略
}
<select id="findAllUser"parameterType="java.util.Map"resultType="com.test.Test" >
select pr.qid as idd,--这里的as 后跟的,
pr.des_id as designId, pr.des_name as designName,
pr.de_id as developId, pr.de_name as developName,
ps.te_id as testId, ps.te_name as testName
from ps_test_red pr left join ps_test_em ps on ps.id=pr.sys_id
where pr.par_nme_te > #{prnte}--组装sql语句,查询出数据
</select>
public void toExcel() {
//这里为导出文件存放的路径
String filePath ="C:\\Users\\USER" + UUID.randomUUID() + "\\";
//加入一个uuid随机数是因为
//每次导出的时候,如果文件存在了,会将其覆盖掉,这里是保存所有的文件
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
// 给要导出的文件起名为 "测试导出数据表_时间.xls"
String filePath2 = filePath + "测试导出数据表" + "_" + fmt.format(new Date()) + ".xls";
WritableWorkbook wb = null;
try {
File file2 = new File(filePath2);
if (!file2.exists()) {//不存在,创建
file2.createNewFile();
}
wb = Workbook.createWorkbook(file2);//创建xls表格文件
// 表头显示
WritableCellFormat wcf = new WritableCellFormat();
wcf.setAlignment(Alignment.CENTRE);// 水平居中
wcf.setWrap(true);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中
wcf.setFont(new WritableFont(WritableFont.TIMES,13, WritableFont.BOLD));// 表头字体 加粗 13号
wcf.setBackground(jxl.format.Colour.PERIWINKLE);
// 内容显示
WritableCellFormat wcf2 = new WritableCellFormat();
wcf2.setWrap(true);//设置单元格可以换行
wcf2.setAlignment(Alignment.CENTRE);//水平居中
wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中
wcf2.setFont( new WritableFont(WritableFont.TIMES,11));// 内容字体 11号
//导出的xls的第一页,第二页就是0换成1,“sheet1”,也可以修改为自己想要的显示的内容
WritableSheet ws = wb.createSheet("sheet1", 0);
//WritableSheet ws2 = wb.createSheet("sheet2", 1);//第2个sheet页
ws.addCell(new Label(0,0, "导出结果"));//代表着表格中第一列的第一行显示查询结果几个字
// 导出时生成表头
for (int i = 0; i < TestToXls.length; i++) {
//i,代表的第几列,1,代表第2行,第三个参数为要显示的内容,第四个参数,为内容格式设置(按照wcf的格式显示)
ws.addCell(new Label(i, 1, TestToXls[i],wcf));//在sheet1中循环加入表头
}
//查询出来的数据,这个方法是演示所用
String sql="com.Test.Service.findAllUser";//sql为mybatis框架下的路径
Map<String, Object> map = new HashMap<String, Object>();//map里为存放前台的条件
map.put("prnte", this.getParameter("prnteTest"));
List<Test> listTest = TestService.findAllList(sql, map);
int k =2 ;//从第三行开始写入数据
for (int i = 0; i < listTest.size(); i++) {
ws.addCell(new Label(0, k, listTest.get(i).getIdd(), wcf2));
ws.addCell(new Label(1, k, listTest.get(i).getDesignId(),wcf2));
ws.addCell(new Label(2, k, listTest.get(i).getDesignName(),wcf2));
ws.addCell(new Label(3, k, listTest.get(i).getDevelopId(),wcf2));
ws.addCell(new Label(4, k, listTest.get(i).getDevelopName(),wcf2));
ws.addCell(new Label(5, k, listTest.get(i).getTestId(),wcf2));
ws.addCell(new Label(6, k, listTest.get(i).getTestName(),wcf2));
//ws.mergeCells(4, 5, 5, 5);//合并两列,按参数顺序,意思是第4列的第五行,跟第五列的第五行合并为一个单元格
k++;
}
wb.write();//写入,到这里已经生成完成,可以在相应目录下找到刚才生成的文件
} catch (IOException e) {
e.printStackTrace();
} catch (JxlWriteException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
} finally {
try {
if (wb != null) {
wb.close();
}
} catch (WriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//这个是我们项目中,是把刚才生成的文件,响应到前台,进行下载、保存,可省略。
downLoadFile(filePath2);
}
public void downLoadFile(String filePath) {
FileInputStream in = null;
ServletOutputStream out = null;
BufferedOutputStream toOut = null;
try {
in = new FileInputStream(new File(filePath));
byte[] buffer = new byte[in.available()];
while (in.read(buffer) != -1) {
HttpServletResponse response = this.getContext().getResponse();//从application中得到response
response.reset();// 清空
// 设置响应的文件的头文件格式
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment;filename="+ new
String(fileName.getBytes("GBK"),"ISO8859-1"));
response.addHeader("Content-type", "application-download");
// 获取响应的对象流
out = response.getOutputStream();
toOut = new BufferedOutputStream(out);
toOut.write(buffer);
toOut.flush();
}
} catch (Exception e) {
e.printStackTrace(); }
finally {
try {
if(in!=null) {
in.close();
}
if(out != null) {
out.close();
}
if(toOut != null) {
toOut.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以上がJavaを使用してデータをExcelファイルにエクスポートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。