天天看點

JAVA用POI讀取和建立2003和2007版本Excel完美示例

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.LinkedList;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFFont;

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;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFFont;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**

 * 可以從http://poi.apache.org/ 這裡下載下傳到POI的jar包 POI 

建立和讀取2003-2007版本Excel檔案

 * 

 */

public class CreatAndReadExcel {

public static void main(String[] args) throws Exception {

creat2003Excel();// 建立2007版Excel檔案

creat2007Excel();// 建立2003版Excel檔案

//讀取2003Excel檔案

String path2003 = System.getProperty("user.dir")

+ System.getProperty("file.separator") + "style_2003.xls";// 擷取項目檔案路徑 

+2003版檔案名

System.out.println("路徑:" + path2003);

File f2003 = new File(path2003);

try {

readExcel(f2003);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

        //讀取2007Excel檔案

String path2007 = System.getProperty("user.dir")

+ System.getProperty("file.separator") + "style_2007.xlsx";// 擷取項目檔案路徑 

+2007版檔案名

System.out.println("路徑:" + path2007);

File f2007 = new File(path2007);

readExcel(f2007);

* 建立2007版Excel檔案

* @throws FileNotFoundException

* @throws IOException

*/

private static void creat2007Excel() throws FileNotFoundException,

IOException {

// HSSFWorkbook workBook = new HSSFWorkbook();// 建立 一個excel文檔對象

XSSFWorkbook workBook = new XSSFWorkbook();

XSSFSheet sheet = workBook.createSheet();// 建立一個工作薄對象

sheet.setColumnWidth(1, 10000);// 設定第二列的寬度為

XSSFRow row = sheet.createRow(1);// 建立一個行對象

row.setHeightInPoints(23);// 設定行高23像素

XSSFCellStyle style = workBook.createCellStyle();// 建立樣式對象

// 設定字型

XSSFFont font = workBook.createFont();// 建立字型對象

font.setFontHeightInPoints((short) 15);// 設定字型大小

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 設定粗體

font.setFontName("黑體");// 設定為黑體字

style.setFont(font);// 将字型加入到樣式對象

// 設定對齊方式

style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水準居中

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中

// 設定邊框

style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 頂部邊框粗線

style.setTopBorderColor(HSSFColor.RED.index);// 設定為紅色

style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部邊框雙線

style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左邊邊框

style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右邊邊框

// 格式化日期

style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));

XSSFCell cell = row.createCell(1);// 建立單元格

cell.setCellValue(new Date());// 寫入目前日期

cell.setCellStyle(style);// 應用樣式對象

// 檔案輸出流

FileOutputStream os = new FileOutputStream("style_2007.xlsx");

workBook.write(os);// 将文檔對象寫入檔案輸出流

os.close();// 關閉檔案輸出流

System.out.println("建立成功 office 2007 excel");

* 建立2003版本的Excel檔案

private static void creat2003Excel() throws FileNotFoundException,

HSSFWorkbook workBook = new HSSFWorkbook();// 建立 一個excel文檔對象

HSSFSheet sheet = workBook.createSheet();// 建立一個工作薄對象

HSSFRow row = sheet.createRow(1);// 建立一個行對象

HSSFCellStyle style = workBook.createCellStyle();// 建立樣式對象

HSSFFont font = workBook.createFont();// 建立字型對象

HSSFCell cell = row.createCell(1);// 建立單元格

FileOutputStream os = new FileOutputStream("style_2003.xls");

System.out.println("建立成功 office 2003 excel");

* 對外提供讀取excel 的方法

public static List<List<Object>> readExcel(File file) throws IOException {

String fileName = file.getName();

String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName

.substring(fileName.lastIndexOf(".") + 1);

if ("xls".equals(extension)) {

return read2003Excel(file);

} else if ("xlsx".equals(extension)) {

return read2007Excel(file);

} else {

throw new IOException("不支援的檔案類型");

* 讀取 office 2003 excel

private static List<List<Object>> read2003Excel(File file)

throws IOException {

List<List<Object>> list = new LinkedList<List<Object>>();

HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));

HSSFSheet sheet = hwb.getSheetAt(0);

Object value = null;

HSSFRow row = null;

HSSFCell cell = null;

System.out.println("讀取office 2003 excel内容如下:");

for (int i = sheet.getFirstRowNum(); i <= sheet

.getPhysicalNumberOfRows(); i++) {

row = sheet.getRow(i);

if (row == null) {

continue;

List<Object> linked = new LinkedList<Object>();

for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {

cell = row.getCell(j);

if (cell == null) {

DecimalFormat df = new DecimalFormat("0");// 格式化 number String

// 字元

SimpleDateFormat sdf = new SimpleDateFormat(

"yyyy-MM-dd HH:mm:ss");// 格式化日期字元串

DecimalFormat nf = new DecimalFormat("0.00");// 格式化數字

switch (cell.getCellType()) {

case XSSFCell.CELL_TYPE_STRING:

// System.out.println(i + "行" + j + " 列 is String type");

value = cell.getStringCellValue();

System.out.print("  " + value + "  ");

break;

case XSSFCell.CELL_TYPE_NUMERIC:

// System.out.println(i + "行" + j

// + " 列 is Number type ; DateFormt:"

// + cell.getCellStyle().getDataFormatString());

if ("@".equals(cell.getCellStyle().getDataFormatString())) {

value = df.format(cell.getNumericCellValue());

} else if ("General".equals(cell.getCellStyle()

.getDataFormatString())) {

value = nf.format(cell.getNumericCellValue());

value = sdf.format(HSSFDateUtil.getJavaDate(cell

.getNumericCellValue()));

case XSSFCell.CELL_TYPE_BOOLEAN:

// System.out.println(i + "行" + j + " 列 is Boolean type");

value = cell.getBooleanCellValue();

case XSSFCell.CELL_TYPE_BLANK:

// System.out.println(i + "行" + j + " 列 is Blank type");

value = "";

default:

// System.out.println(i + "行" + j + " 列 is default type");

value = cell.toString();

if (value == null || "".equals(value)) {

linked.add(value);

System.out.println("");

list.add(linked);

return list;

* 讀取Office 2007 excel

private static List<List<Object>> read2007Excel(File file)

// String path = System.getProperty("user.dir") +

// System.getProperty("file.separator")+"dd.xlsx";

// System.out.println("路徑:"+path);

// 構造 XSSFWorkbook 對象,strPath 傳入檔案路徑

XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));

// 讀取第一章表格内容

XSSFSheet sheet = xwb.getSheetAt(0);

XSSFRow row = null;

XSSFCell cell = null;

System.out.println("讀取office 2007 excel内容如下:");

// System.out.println(value);

若轉載請注明出處!若有疑問,請回複交流!