java利用poi對excel進行操作可導入導出

最近響應公司的號召,要把一些特定的數據導出成excel格式(.xls),在度娘和古哥的大力幫助下,得知 poi 功能極其強大,是幹excel 的一把手,故 寫mode一個,閒言碎語不多講,直接進入正題,貼出主要代碼大家共同學習,如有更好的方法,可以發Email給我討論,共同進步

導入的核心代碼:

/**
 * 
 */
package com.zhaokuo;

import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
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;

/**
 * @author 趙闊 2012-6-29
 * 	QQ:275669668
 *  Email:[email protected] 
 */
public class ImportExcel {

	public List<List<Object>> readExcel2003(String path) throws Exception {

		List<List<Object>> list = new ArrayList<List<Object>>();
		HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(path));
		HSSFSheet sheet = workbook.getSheetAt(0);
		Object value = null;
		HSSFRow row = null;
		HSSFCell cell = null;
		for (int i = sheet.getFirstRowNum(); i < sheet
				.getPhysicalNumberOfRows(); i++) {
			row = sheet.getRow(i);
			if (row == null) {
				continue;
			}
			List<Object> linked = new ArrayList<Object>();
			for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
				cell = row.getCell(j);
				if (cell == null) {
					continue;
				}
				DecimalFormat df = new DecimalFormat("0");
				SimpleDateFormat sdf = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss");
				DecimalFormat nf = new DecimalFormat("0.00");
				switch (cell.getCellType()) {
				case HSSFCell.CELL_TYPE_STRING:

					value = cell.getStringCellValue();
					break;
				case HSSFCell.CELL_TYPE_NUMERIC:
					if ("@".equals(cell.getCellStyle().getDataFormatString())) {
						value = df.format(cell.getNumericCellValue());

					} else if ("Generl".equals(cell.getCellStyle()
							.getDataFormatString())) {
						value = nf.format(cell.getNumericCellValue());
					} else {
						value = sdf.format(HSSFDateUtil.getJavaDate(cell
								.getNumericCellValue()));
					}
					break;
				case HSSFCell.CELL_TYPE_BOOLEAN:
					value = cell.getBooleanCellValue();
					break;
				case HSSFCell.CELL_TYPE_BLANK:
					value = "未知";
					break;
				default:
					value = cell.toString();

				}
				if (value.equals("")) {
					value = "未知";
				}
				if (null == value) {
					continue;
				}
				linked.add(value);
			}
			list.add(linked);
		}
		return list;

	}

}

導出核心代碼:

/**
 * 
 */
package com.zhaokuo;

import java.io.FileOutputStream;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFFooter;
import org.apache.poi.hssf.usermodel.HSSFHeader;
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.hssf.util.HSSFColor;

/**
 * @author 趙闊 2012-6-29 QQ:275669668 Email:[email protected]
 */
public class ExportExcel {
	public static List<String> tableHeader;

	// 創建sheet
	@SuppressWarnings("unchecked")
	public void createExcelSheet(List list, String fileRealPath)
			throws Exception {
		HSSFWorkbook workBook = new HSSFWorkbook();
		HSSFSheet sheet = workBook.createSheet("sheet");
		HSSFHeader header = sheet.getHeader();
		header.setCenter("sheet");
		HSSFRow headerRow = sheet.createRow(0);

		HSSFCellStyle headstyle = workBook.createCellStyle();
		HSSFFont headfont = workBook.createFont();
		headfont.setColor(HSSFColor.BLACK.index);
		headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		headstyle.setFont(headfont);
		for (int i = 0; i < tableHeader.size(); i++) {
			HSSFCell headerCell = headerRow.createCell(i);
			headerCell.setCellStyle(headstyle);
			// 設置cell的值
			headerCell.setCellValue(tableHeader.get(i));
			headerCell.setCellStyle(headstyle);
		}

		int rowIndex = 1;
		for (int i = 1; i < list.size(); i++) {
			List<String> list2 = (List<String>) list.get(i);
			HSSFRow row = sheet.createRow(rowIndex);
			for (int q = 0; q < list2.size(); q++) {
				// 創建第i個單元格
				HSSFCell cell = row.createCell(q);
				cell.setCellValue(list2.get(q).replace("未知", ""));
				sheet.setColumnWidth(q, (80 * 50));
			}
			rowIndex++;
		}
		FileOutputStream fos = new FileOutputStream(fileRealPath);
		sheet.setGridsPrinted(true);
		HSSFFooter footer = sheet.getFooter();
		footer.setRight("Page " + HSSFFooter.page() + " of "
				+ HSSFFooter.numPages());
		workBook.write(fos);
		fos.close();
	}

}
此項目裏面包涵了servlet 的上傳和下載  您可以先看看  http://blog.csdn.net/zhaokuo719/article/details/7703074


完整的代碼 請到  http://download.csdn.net/detail/zhaokuo719/4401391 下載;雖然分數有點高;俗話說只買對的不嫌貴的;肯定物有所值







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