簡單介紹下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());
}
}