Le contenu de cet article explique comment utiliser Java pour exporter des données dans des fichiers Excel. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Cet article parle principalement de la façon d'utiliser Java pour exporter des données vers Excel fichiers, au format xls.
Par exemple : les données que j'interroge à la réception doivent être exportées vers un fichier au format excl. Les conditions de requête (données) de la réception doivent être transmises au backend. Le backend récupère les données, écrit du SQL et interroge la base de données, les données sont obtenues (conformément aux données interrogées à la réception. Les données) interrogé ici est un objet de liste. Collection), puis génèrez le fichier excl (les données sont dans le fichier et le nom, l'emplacement et le contenu du fichier peuvent tous être modifiés).
La première étape : l'arrière-plan obtient les conditions de requête frontales et interroge les données (Cette étape ne contient pas de données. Vous pouvez transmettre la valeur en utilisant json ou url. Utilisez celui que vous voulez. Après tout, ceux qui réussissent sont les premiers arrivés les premiers
Exemple de transfert de valeur json : (L'exemple écrit peut ne pas correspondre aux données suivantes, mais le sens est correct Voilà) transfert d'url, (c'est simple, c'est une url ordinaire, qui consiste à assembler les paramètres et données correspondantes plus tard, cet article ne parle principalement pas de transfert, juste un exemple de démonstration)
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) {} });
2. Obtenez les données de requête dans la base de données. (ce n'est pas trop c'est important, et c'est écrit simplement
)
function clickdown(){//这里演示传递两个参数 var prnteTest=document.getElementById("prnte").value; var prnteName=document.getElementById("prnteName").value; location.href='url?prnteTest='+prnteTest+'&prnteName='+prnteName; }
C'est un sql déclaration, comment démontrer cela, c'est sql Eh bien, si vous souhaitez générer des données, utilisez simplement SQL pour les vérifier.
Je ne suis pas principalement intéressé par la façon d'analyser les données au format json,Le url J'utilise les données Pass
en utilisantcomme ça Récupérer les données au format,
Si elles sont passées en arrière-plan au format json, les données seront sous la forme de 可以使用下面的进行解析 如果上面方法不能够解析json格式字符串,可自行百度。网上不少正解(毕竟本文主要讲的不是这个)。 得到数据之后,组装sql语句,在数据库中查询即可,这里不演示怎么查询的,结果为一个list集合里面存放着要导出的数据 第二步:生成excel文件 根据前台得到的条件,从数据库中得到数据,导出的表头 其中list存放的是一个对象,类似javaBean: 形如: 我使用的是Mybatis,其中有一个resultType,为返回类型。 形如: 导出文件方法 响应到前台(就是读取文件,网上很多) 导出文件大致为: Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!{ "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();
}
}
}