gistfile1.txt 之前写过Excel的导入与导出,但是缺少总结,现在总结一下。现在大多使用的是poi和jxl,关于二者的比较,可以百度,相较而言,还是poi好一点,需要用到的是poi,需要之前引
gistfile1.txt
之前写过Excel的导入与导出,但是缺少总结,现在总结一下。
现在大多使用的是poi和jxl,关于二者的比较,可以百度,相较而言,还是poi好一点,
需要用到的是poi,需要之前引入,如果是maven项目,添加如下代码:
org.apache.poi
poi
3.10-FINAL
org.apache.poi
poi-ooxml
3.10-FINAL
poi也有两个不同的jar包,分别是处理excel2003和excel2007+的,对应的是poi和poi-ooxml。poi-ooxml是poi的升级版本,处理的单页数据量也是百万级别的,所以我们选择的也是poi-ooxml。
前端代码也有必要说一下,用ajax访问后端,成功后得到的是输出流,如果指定文件存储位置的话还好,会存在指定路径,但是想要得到弹出框并且选择存储路径的话,就不太好办了。这个时候选择form表单提交的方式会很好。
ajax部分:
$.ajax({
url : 'exportSubject',
data:$("#export_subject").serialize(),
type : 'POST',
async:false,
dataType: "json",
success: function (data){
console.log(data);
if(data.result == 'error'){
alert(data.reason);
}
},
error: function(data){
console.log(data);
alert(data.reason);
}
});
注:这样打印出来的东西是一堆乱码,因为返回的流信息解析不了。
于是用下面的方法:
var form = document.getElementById('export_subject');
form.action = "exportSubject";
form.submit();
但是这样的话有异常的话会跳错误页,不会弹出你想返回的错误信息。
下面看看后台的java代码:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.json.JSONObject;
import java.io.InputStream;
import java.io.OutputStream;
import net.sf.json.JSONArray;
/**
* 导出分入分出科目
* @param request
* @param response
* @return
* @throws Exception
*/
@RequestMapping(value = "/exportSubject", method = RequestMethod.POST)
@ResponseBody
public Object exportSubject(HttpServletRequest request,HttpServletResponse response,
@RequestParam String billNum,
@RequestParam String batchId
) throws Exception{
String fileName ="aaa" + Calendar.getInstance().getTimeInMillis();
OutputStream os = null;
try {
Map
paraMap = new HashMap<>();
paraMap.put("batchId", new BigDecimal(batchId));
paraMap.put("billNum", billNum);
//得到查询的数据
String result = this.restTemplte.postForEntity(URL + "/shareManage/shareSubList", paraMap, String.class).getBody();
List