悠然哈哈哈

导航

读取Excel并写入txt

package com.baoqilai.scp.util;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;


public class ExcelUtil {

	private static final Logger logger = LoggerFactory.getLogger(ExcelUtil.class);

	public static List<Map<Integer, Object>> parseExcel(File excel) throws Exception {
		FileInputStream inputStream = new FileInputStream(excel);
		return parseExcel(inputStream);
	}
	
	/**
	 * 设置某些列的值只能输入预制的数据,显示下拉框.
	 * @param sheet 要设置的sheet.
	 * @param textlist 下拉框显示的内容
	 * @param firstRow 开始行
	 * @param endRow 结束行
	 * @param firstCol   开始列
	 * @param endCol  结束列
	 * @return 设置好的sheet.
	 */
	public static HSSFSheet setHSSFValidation(HSSFSheet sheet,
			String[] textlist, int firstRow, int endRow, int firstCol,
			int endCol) {
		// 加载下拉列表内容
		DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);
		// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
		CellRangeAddressList regions = new CellRangeAddressList(firstRow,endRow, firstCol, endCol);
		// 数据有效性对象
		HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);
		sheet.addValidationData(data_validation_list);
		return sheet;
	}

	/**
	 * 解析Excel
	 * @param inputStream
	 *            文件
	 * @return List集合
	 */

	public static List<Map<Integer, Object>> parseExcel(InputStream inputStream) throws Exception {
		try {
			HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
			HSSFSheet sheet = workbook.getSheetAt(0);
			int lastRowIndex = sheet.getLastRowNum();
			List<Map<Integer, Object>> excelData = new ArrayList<>();

			for (int i = 1; i <= lastRowIndex; i++) {
				HSSFRow row = sheet.getRow(i);
				Iterator<Cell> cells = row.cellIterator();
				Map<Integer, Object> rowData = new HashMap<>();
				while (cells.hasNext()) {
					Cell cell = cells.next();
					if(cell==null){
						continue;
					}
					Integer columnIndex = cell.getColumnIndex();
					if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { // 数值
//						if (DateUtil.isCellDateFormatted(cell)) {
//							rowData.put(columnIndex, cell.getDateCellValue());
//						} else {
//							rowData.put(columnIndex, cell.getNumericCellValue());
//						}
						String result = "";
						if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
							SimpleDateFormat sdf = null;
							if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
								sdf = new SimpleDateFormat("HH:mm");
							} else {// 日期
								sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
							}
							Date date = cell.getDateCellValue();
							result = sdf.format(date);
						} else if (cell.getCellStyle().getDataFormat() == 58) {
							// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
							SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
							double value = cell.getNumericCellValue();
							Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
							result = sdf.format(date);
						} else {
							if (cell != null) {
								cell.setCellType(Cell.CELL_TYPE_STRING);
							}
							result = cell.getStringCellValue();
						}
						rowData.put(columnIndex, result);
					} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { // 布尔
						rowData.put(columnIndex, cell.getBooleanCellValue());
					} else { // 字符串
						if (cell != null) {
							cell.setCellType(Cell.CELL_TYPE_STRING);
						}
						rowData.put(columnIndex, cell.getStringCellValue());
					}
				}
				excelData.add(rowData);
			}
			return excelData;
		}catch (OfficeXmlFileException e){
			logger.error("文件解析错误应该是xlsx===="+e.getMessage());
			return parseExcel2(inputStream);
		}

		// workbook.close();
	}

	public static List<Map<Integer, Object>> parseExcel2(MultipartFile excel) throws Exception {
		
		String fileName = excel.getOriginalFilename();
		if(fileName.matches("^.+\\.(?i)(xls)$")){//2003
			return parseExcel(excel.getInputStream());
		}
		return parseExcel2(excel.getInputStream());
	}

	public static List<Map<Integer, Object>> parseExcel2(InputStream inputStream) throws Exception {
		XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
		XSSFSheet sheet = workbook.getSheetAt(0);
		int lastRowIndex = sheet.getLastRowNum();
		List<Map<Integer, Object>> excelData = new ArrayList<>();

		for (int i = 1; i <= lastRowIndex; i++) {
			XSSFRow row = sheet.getRow(i);
			if (null == row)
				continue;
			Iterator<Cell> cells = row.cellIterator();
			Map<Integer, Object> rowData = new HashMap<>();
			while (cells.hasNext()) {
				Cell cell = cells.next();
				if(cell==null){
					continue;
				}
				Integer columnIndex = cell.getColumnIndex();
				if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { // 数值
//					if (DateUtil.isCellDateFormatted(cell)) {
//						rowData.put(columnIndex, cell.getDateCellValue());
//					} else {
//						rowData.put(columnIndex, cell.getNumericCellValue());
//					}
					String result = "";
					if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
						SimpleDateFormat sdf = null;
						if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
							sdf = new SimpleDateFormat("HH:mm");
						} else {// 日期
							sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
						}
						Date date = cell.getDateCellValue();
						result = sdf.format(date);
					} else if (cell.getCellStyle().getDataFormat() == 58) {
						// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
						SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
						double value = cell.getNumericCellValue();
						Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
						result = sdf.format(date);
					} else {
						if (cell != null) {
							cell.setCellType(Cell.CELL_TYPE_STRING);
						}
						result = cell.getStringCellValue();
					}
					rowData.put(columnIndex, result);
				} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { // 布尔
					rowData.put(columnIndex, cell.getBooleanCellValue());
				} else { // 字符串
					if (cell != null) {
						cell.setCellType(Cell.CELL_TYPE_STRING);
					}
					rowData.put(columnIndex, cell.getStringCellValue());
				}
			}
			excelData.add(rowData);
		}
		// workbook.close();
		return excelData;
	}
	
	/**
	 * desc: 导出excel表格 author: liuchenyu date: 2017/4/8 14:30
	 *
	 * @param titles
	 *            Excel表各列字段名
	 * @param sheetname
	 *            工作表标签名
	 * @param data
	 *            导出的数据源
	 * @param filename
	 *            导出的文件名
	 * @param response
	 * @param request
	 * @throws Exception
	 */
	public static void exportExcel(String[] titles, String sheetname, List<Map<String, Object>> data, String filename,
			ArrayList<String> list, HttpServletResponse response, HttpServletRequest request) throws Exception {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet(sheetname);
		HSSFRow row = sheet.createRow(0);
		for (int i = 0; i < titles.length; i++) {
			row.createCell(i).setCellValue(titles[i]);
		}

		for (int i = 0; i < data.size(); i++) {
			Map<String, Object> obj = data.get(i);
			row = sheet.createRow(i + 1);

			for (int j = 0; j < list.size(); j++) {
				String key = list.get(j);
				HSSFCell cell = row.createCell(j);

				cell.setCellValue(obj.get(key) == null ? "--" : obj.get(key) + "");

			}
		}

		// filename = new String(filename.getBytes("gbk-8"), "iso8859-1");
		String encoding = "utf-8";
		String userAgent = request.getHeader("user-agent");
		logger.info("userAgent: " + userAgent);
		if (userAgent.toLowerCase().indexOf("msie") != -1) {
			encoding = "gbk";
		}
		filename = new String(filename.getBytes(encoding), "iso8859-1");
		response.setHeader("Content-Disposition", "attachment;filename=" + filename + ".xls");
		workbook.write(response.getOutputStream());
		// workbook.close();
	}

	public static void downloadExcel(HttpServletResponse response, Workbook workbook, String execelName) {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		try {
			workbook.write(os);
		} catch (IOException e) {
			logger.error("write data to ByteArrayOutputStream fail.", e);
		}

		byte[] content = os.toByteArray();
		InputStream is = new ByteArrayInputStream(content);

		// 设置response参数,可以打开下载页面
		// HttpServletResponse response = WebUtils.getResponse();
		// response.reset();
		response.setContentType("application/vnd.ms-excel;charset=utf-8");
		ServletOutputStream out = null;
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
		String format = sdf.format(new Date());
		try {
			response.setHeader("Content-Disposition",
					"attachment;filename=" + new String((execelName + format + ".xls").getBytes(), "iso-8859-1"));
			out = response.getOutputStream();
		} catch (Exception e1) {
			logger.error("write data to ServletOutputStream fail.", e1);
		}
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			bis = new BufferedInputStream(is);
			bos = new BufferedOutputStream(out);

			byte[] buff = new byte[2048];
			int bytesRead;
			while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
				bos.write(buff, 0, bytesRead);
			}

		} catch (final IOException e) {
			logger.error("write data to ServletOutputStream fail.", e);
		} finally {
			if (bis != null)
				try {
					bis.close();
				} catch (IOException e) {
					logger.error("close InputStream fail.", e);
				}
			if (bos != null)
				try {
					bos.close();
				} catch (IOException e) {
					logger.error("close OutputStream fail.", e);
				}
		}
	}

	public static void noDataExcel(HttpServletResponse response, String fileName) {
		Workbook wb = new HSSFWorkbook();
		Sheet sheet = wb.createSheet("1");
		Row row = sheet.createRow((short) 0);
		row.createCell(0).setCellValue("没有数据");
		row = sheet.createRow(1);
		row.createCell(0).setCellValue("没有找到数据 - - !!!!!");
		ExcelUtil.downloadExcel(response, wb, fileName);
	}
	
	
	

}

  

package com.future.test;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.List;
import java.util.Map;

import com.baoqilai.scp.util.ExcelUtil;

public class addBiitemSql {
    static String imagesql = "D:\\data\\cc.txt";

    public static void method2(String file, String conent) {
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));
            out.write(conent + "\r\n");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {

        String filePath = "C:/Users/Administrator/Desktop/bi.xlsx";
        File file = new File(filePath);
        try {

        FileInputStream inputStream = new FileInputStream(file);

        List<Map<Integer, Object>> itemList = ExcelUtil.parseExcel2(inputStream);

for (int i = 0; i < itemList.size(); i++) {
                 String itemName = itemList.get(i).get(0) == null ? "-1" : itemList.get(i).get(0).toString();
                 String cc="评价"+cc;
                 method2(imagesql, cc);
             }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
}

 

posted on 2020-04-27 14:35  悠然886  阅读(466)  评论(0编辑  收藏  举报