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);
若轉載請注明出處!若有疑問,請回複交流!