package com;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
/**
 * jar包:
 * commons-fileupload-1.2.1.jar
 * commons-io-1.4.jar
 * poi-3.11-20141221.jar
 * 
 * 直接从上传的输入流中读取excel数据解析出其中的数据
 *
 */
@SuppressWarnings("serial")
public class PoiAction extends HttpServlet {
	@SuppressWarnings("unchecked")
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 使用系统临时路径
		String path = System.getProperty("user.home");
		factory.setRepository(new File(path));
		factory.setSizeThreshold(1024 * 1024);

		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setHeaderEncoding("utf-8");
		try {
			//这个方法支持多文件上传,本例子中不需要
			List<FileItem> list = (List<FileItem>) upload.parseRequest(request);

			for (FileItem item : list) {
				// 获取表单的属性名字
				String name = item.getFieldName();

				// 如果获取的表单信息是普通的文本信息,上传有时候是混在表单中的,本例中不需要考虑
				if (item.isFormField()) {
					String value = new String((item.getString("iso8859-1")).getBytes("iso8859-1"),"utf-8");
					System.out.println(name+":"+value);
				} else {
//					获取上传路径
//					String value = item.getName();
//					int start = value.lastIndexOf("\\");
//					获得上传文件名
//					String filename = value.substring(start + 1);
//					将文件写到磁盘,如果不解析就成了文件上传功能了
//					item.write(new File(path, filename));
					//-----------进行解析---------
					Workbook wb = new HSSFWorkbook(item.getInputStream());
					Sheet sheet1 = wb.getSheetAt(0);
					for (Row row : sheet1) {
				        for (Cell cell : row) {
//				        	excel单元格的索引
//				            CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
//				            System.out.print("索引"+cellRef.formatAsString());
				            
				            switch (cell.getCellType()) {
//				            	文本内容
				                case Cell.CELL_TYPE_STRING:
				                    System.out.println(cell.getRichStringCellValue().getString());
				                    break;
//								数字与日期
				                case Cell.CELL_TYPE_NUMERIC:
				                    if (DateUtil.isCellDateFormatted(cell)) {
				                        System.out.println(cell.getDateCellValue());
				                    } else {
				                        System.out.println(cell.getNumericCellValue());
				                    }
				                    break;
//				                                                      公式数据
				                case Cell.CELL_TYPE_FORMULA:
				                    System.out.println(cell.getCellFormula());
				                    break;
				                default:
				                    System.out.println();
				            }
				        }
				    }
				}
			}

		} catch (FileUploadException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}

		request.getRequestDispatcher("index.jsp").forward(request, response);
	}
}
最近下载更多
hetaotao  LV2 2020年7月26日
qiheideguang  LV18 2020年6月17日
小舟呀  LV12 2020年3月24日
babyFF9  LV8 2020年3月24日
raoqichen  LV1 2020年1月4日
zk1259  LV6 2019年12月10日
ghjgb123  LV8 2019年12月9日
tangxjcxv65  LV2 2019年11月12日
hjd3983  LV10 2019年10月8日
q8798087  LV10 2019年9月19日
最近浏览更多
floweyws  LV6 2024年2月5日
zczdwe 2023年11月27日
暂无贡献等级
杜勇锋 2023年4月2日
暂无贡献等级
香菇肉饼汤  LV8 2022年10月9日
暂无贡献等级
一直都会顺利的小吴  LV5 2022年2月16日
tansuo阿郎  LV8 2021年12月1日
释辰 2021年10月29日
暂无贡献等级
康康kang  LV8 2021年10月4日
00044304  LV6 2021年8月19日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友