excel读写

原创 2013年12月05日 14:30:02

最近做个小工具,需要对excel进行读写,以前写过poi读取excel,但是一点印象也没有,这次记录一下,方便以后查阅。

对excel2003读写的api在包org.apache.poi.hssf.usermodel

HSSFWorkbook:表示一个excel文档

HSSFSheet:表示一个excel页签

HSSFRow:表示一个数据行

HSSFCell:表示一个单元格。

对excel2007的读写是通过另外一套api,在包org.apache.poi.xssf.usermodel

与之对应的是XSSFWorkbook

XSSFSheet

XSSFRow

XSSFCell四个类。

/**
	 * 读取数据map格式
	 * @param head
	 * @param file
	 * @return
	 * @throws Exception
	 */
	public static List<Map<String, String>> getDate(List<String> head, String file) throws Exception{
		List<Map<String, String>> data = new ArrayList<Map<String,String>>();
		String fileType = file.substring(file.lastIndexOf(".")+1).toUpperCase();
		Workbook workBook = null;
		if(EXL2003.equals(fileType)){
			workBook = new HSSFWorkbook(new FileInputStream(file));
		}else if(EXL2007.equals(fileType)){
			workBook = new XSSFWorkbook(new FileInputStream(file));
		}else{
			throw new Exception("文件不被支持");
		}
		Sheet sheet = workBook.getSheetAt(0);
		for(int i = 0, rows = sheet.getLastRowNum()+1; i < rows; i++){
			Row row = sheet.getRow(i);
			Map<String, String> rowInfo = new LinkedHashMap<String, String>();
			for(int j = 0, cols = head.size(); j < cols; j++){
				Cell cell = row.getCell(j);
				rowInfo.put(head.get(j), getCellDate(cell));
			}
			data.add(rowInfo);
		}
		return data;
	}
	
	
	@SuppressWarnings("resource")
	public static void writeDate(List<List<String>> date, String file) throws Exception{
		FileOutputStream fos = new FileOutputStream(file);
		String fileType = file.substring(file.lastIndexOf(".")+1).toUpperCase();
		Workbook workBook = null;
		if(EXL2003.equals(fileType)){
			workBook = new HSSFWorkbook();
		}else if(EXL2007.equals(fileType)){
			workBook = new XSSFWorkbook();
		}else{
			throw new Exception("文件不被支持");
		}
		Sheet sheet = workBook.createSheet("sheet1");
		for(int i = 0, rows = date.size(); i < rows; i++){
			Row row = sheet.createRow(i);
			List<String> rowInfo = date.get(i);
			for(int j = 0, cols = rowInfo.size(); j < cols; j++){
				Cell cell = row.createCell(j);
				cell.setCellValue(rowInfo.get(j));
			}
		}
		workBook.write(fos);
		fos.flush();
		fos.close();
	}
	
	
	public static String getCellDate(Cell cell){
		String value = "";
		switch (cell.getCellType()) {
		case Cell.CELL_TYPE_BLANK:
			break;
		case Cell.CELL_TYPE_BOOLEAN:{
			value = String.valueOf(cell.getBooleanCellValue());
			break;
		}
		case Cell.CELL_TYPE_ERROR:
			break;
		case Cell.CELL_TYPE_NUMERIC:{
			value = String.valueOf(cell.getNumericCellValue());
			break;
		}
		case Cell.CELL_TYPE_FORMULA:{
			if(HSSFDateUtil.isCellDateFormatted(cell)){
				 Date date = cell.getDateCellValue();
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                 value = sdf.format(date);
			}else{
				value = cell.getNumericCellValue()+"";
			}
			break;
		}
		case Cell.CELL_TYPE_STRING:
			value = cell.getStringCellValue();
		default:
			value = "";
		}
		return value;
	}




相关文章推荐

Unity下跨windows和ios读写Excel文件

  • 2017年11月14日 15:43
  • 173KB
  • 下载

[VS2013]MFC下使用ODBC读写Excel表格

  • 2017年11月06日 11:41
  • 80KB
  • 下载

C++读写EXCEL文件方式比较

因为有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看。 http://blog.csdn.net/fullsail/article/details/8449448 ...

labVIEW进行EXCEL读写

  • 2016年08月23日 12:15
  • 141KB
  • 下载

VC++ 读写Excel VS2012(Unicode版)

  • 2017年10月19日 11:53
  • 269KB
  • 下载

以OLE方式读写EXCEL的C++类【转载】

◆C++中的【L"https://msdn.microsoft.com/library"】。 这个是C++标准规定的写法。详见以下链接: http://bbs.csdn.net/topics/3906...

Excel读写插件

  • 2015年01月06日 13:35
  • 12.38MB
  • 下载

poi读写excel文件

  • 2015年08月28日 00:13
  • 2KB
  • 下载

Go 语言读写 Excel

Excelize 是 Golang 编写的一个用来操作 Office Excel 文档类库,基于微软的 Office OpenXML 标准。可以使用它来读取、写入 XLSX 文件。相比较其他的开源类库...

POI 读写Excel

  • 2015年08月10日 11:02
  • 420KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:excel读写
举报原因:
原因补充:

(最多只允许输入30个字)