jeecg導出:將數據以csv格式文件打包導出

簡單介紹下xls與csv文件的區別

 excel中後綴爲csv和xls的文件區別如下:
  1、xls 文件就是Microsoft excel電子表格的文件格式。
  2、csv是最通用的一種文件格式,它可以非常容易地被導入各種PC表格及數據庫中。 此文件,一行即爲數據表的一行。生成數據表字段用半角逗號隔開。
  csv是文本文件,用記事本就能打開,XLS是二進制的文件只有用EXCEL才能打
  csv文件是以逗號爲分隔符號,將各字段列分離出的一種ASCII文件。
  csv(*.csv) 文件格式只能保存活動工作表中的單元格所顯示的文本和數值。工作表中所有的數據行和字符都將保存。
  數據列以逗號分隔,每一行數據都以回車符結束。如果單元格中包含逗號,則該單元格中的內容以雙引號引起。

比如,用excel打開文件

另存爲“用戶.xls”和“用戶.csv”

用記事本打開“用戶.csv”文件:

用記事本打開“用戶.xls”文件:

同樣的數據,csv格式爲1kB, xls格式爲22kB。

將數據以csv格式文件打包導出

	/**
	 * 導出座位表csv
	 *
	 * @param request
	 * @param response
	 */
	@RequestMapping(params = "exportCsv")
	public void exportCsv(SeatEntity rowSeat, HttpServletRequest request, HttpServletResponse response,
			DataGrid dataGrid, ModelMap map) {
		String rowSeatId = request.getParameter("id");
		String hql = "from ResultEntity where 1 = 1 AND ROW_SEAT_ID = ? ";
		List<ResultEntity> seatResultList = this.systemService.findHql(hql, rowSeatId);
		String codedFileName = "模板";
		String meetingName = "模板";
		try {
			List<String> csvNameList = new ArrayList<>();
			List<File> fileList = new ArrayList<>();
			for (int index = 0; index < seatResultList.size(); index++) {
				// 設置表格頭
				Object[] head = { "名字", "性別", "身高", "出身年月"};
				List<Object> headList = Arrays.asList(head);
				List<List<Object>> dataList = new ArrayList<List<Object>>();
				String hql0 = "from PersonEntity where 1 = 1 AND SEAT_RESULT_ID = ? ";
				List<PersonEntity> seatPersonEntityList = systemService.findHql(hql0, seatResultList.get(index).getId());
				for (int i = 0; i < seatPersonEntityList.size(); i++) {
					setContent(dataList, seatPersonEntityList.get(i));
				}
			
				csvNameList.add(codedFileName);
				if (BrowserUtils.isIE(request) || BrowserUtils.checkBrowse(request).equals("Chrome")) {
					meetingName = URLEncoder.encode(meetingName, "UTF-8");
				} else {
					meetingName = new String(meetingName.getBytes("UTF-8"), "ISO-8859-1");
				}
				// 導出文件路徑
				String downloadFilePath = request.getSession().getServletContext().getRealPath("");
				// 導出CSV文件
				File csvFile = createCSVFile(headList, dataList, downloadFilePath, codedFileName);
				fileList.add(csvFile);
			}
			// 2019.10.11需求變更:zip下載,一個題目導出一張表
			exportZip(response, meetingName, csvNameList, fileList);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

文件 填充方法及導出方法:


	private void setContent(List<List<Object>> dataList, PersonEntity seatPerson) {
		if (seatPerson != null) {
			if (StringUtil.isNotEmpty(seatPerson.getLeaderName())|| StringUtil.isNotEmpty(depart)) {
				List<Object> rowList = new ArrayList<Object>();
				if ("leaderSeat".equals(seatPerson.getSeatBase().getSeatType())) {
					rowList.add(seatPerson.getLeaderName() == null ? "": seatPerson.getLeaderName());//顯示名字
				} else {
					rowList.add(depart);// 其他顯示簡稱
				}
			
				// 2019/10/14單位欄不顯示
				rowList.add("");
				if(seatPerson.getLeader() == null || StringUtil.isEmpty(seatPerson.getLeader().getJob())){
					rowList.add("");
				}else{
					rowList.add(seatPerson.getLeader().getJob());
				}// 職務
				rowList.add(seatPerson.getSeatBase().getCode());
				dataList.add(rowList);
			}
		}
	}

 

 public File createCSVFile(List<Object> head, List<List<Object>> dataList,String outPutPath, String filename) {
        File csvFile = null;
        BufferedWriter csvWtriter = null;
        try {
            csvFile = new File(outPutPath + File.separator + filename + ".csv");
            File parent = csvFile.getParentFile();
            if (parent != null && !parent.exists()) {
                parent.mkdirs();
            }
            csvFile.createNewFile();
 
            // GB2312使正確讀取分隔符","
            csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024);
            // 寫入文件頭部
            writeRow(head, csvWtriter);
 
            // 寫入文件內容
            for (List<Object> row : dataList) {
                writeRow(row, csvWtriter);
            }
            csvWtriter.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                csvWtriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return csvFile;
    }

 

private void exportZip(HttpServletResponse response, String fileName, List<String> csvNameList,
			List<File> fileList) {
		try {
			response.setHeader("content-disposition", "attachment;filename=" + fileName + ".zip");
			response.setContentType("application/x-zip-compressed");
			OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
			ZipOutputStream zipOut = new ZipOutputStream(toClient);
			for (int i = 0; i < fileList.size(); i++) {
				ZipEntry entry = new ZipEntry(csvNameList.get(i) + ".csv");
				zipOut.putNextEntry(entry);
				int len;
				FileInputStream fileInputStream = new FileInputStream(fileList.get(i));
				byte[] buffer = new byte[1024];
				while ((len = fileInputStream.read(buffer)) > 0) {
					zipOut.write(buffer, 0, len);
				}
			}
			zipOut.flush();
			zipOut.close();
		} catch (Exception e) {
			LogUtil.error(e.toString());
		}
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章