1. 程式人生 > >POI對Excel操作——java儲存資料到Excel

POI對Excel操作——java儲存資料到Excel

1、常見的java操作Excel API介紹
1.1 Java Aspose Cells
Java Aspose Cells是一種純粹的Java授權的Excel API,開發和供應商Aspose釋出。這個API的最新版本是8.1.2,是一個豐富而厚重的API(普通Java類和AWT類的組合)設計,可以讀、寫和操縱電子表格Excel的元件。此API常見用途如下:
(1)Excel報表,建立動態Excel報表;
(2)從Excel電子表格中匯入和匯出資料
(3)建立,編輯,轉換和電子表格
github介紹:https://github.com/aspose-cells/Aspose.Cells-for-Java

1.2 JExcel
JExcel是由Team Dev開發提供純行貨API。利用這一點程式設計師可以很容易地讀取,寫入,顯示和修改Excel工作簿中的兩種格式:.xls和.XLSX。這個API可以很容易地嵌入Java的Swing和AWT。這個API的最新版本是Jexcel-2.6.12,主要特點如下。
(1)自動化Excel應用程式,工作簿,工作表等
(2)在Java Swing應用程式作為普通的Swing元件嵌入到工作簿
(3)事件偵聽器新增到工作簿和電子表格
(4)新增事件處理程式來處理的工作簿和電子表格事件的行為
JExcel官網:http://jexcelapi.sourceforge.net/

1.3 Apache POI
Apache POI是Apache軟體基金會提供的100%開源庫。大多數中小規模的應用程式開發主要依賴於Apache POI(HSSF+ XSSF)。它支援Excel庫的所有基本功能。

本篇文章主要介紹利用poi對Excel的操作。

2、POI簡介
2.1 Apache POI元件
Apache POI包含類和方法,此API元件的列表如下。

POIFS (較差混淆技術實現檔案系統) : 此元件是所有其他POI元件的基本因素。它被用來明確地讀取不同的檔案。

HSSF (電子表格格式) : 它被用來讀取和寫入MS-Excel檔案的xls格式。

XSSF (XML格式) : 它是用於MS-Excel中XLSX檔案格式。

HPSF (屬性設定格式) : 它用來提取MS-Office檔案屬性設定。

HWPF (字處理器格式) : 它是用來讀取和寫入MS-Word的文件副檔名的檔案。

XWPF (XML字處理器格式) : 它是用來讀取和寫入MS-Word的docx副檔名的檔案。

HSLF (幻燈片版式格式) : 它是用於讀取,建立和編輯PowerPoint簡報。

HDGF (圖表格式) : 它包含類和方法為MS-Visio的二進位制檔案。

HPBF (出版商格式) : 它被用來讀取和寫入MS-Publisher檔案。

2.2 HSSF
HSSF 是Horrible SpreadSheet Format的縮寫,通過HSSF,你可以用純Java程式碼來讀取、寫入、修改Excel檔案。HSSF為讀取操作提供了兩類API:usermodel和eventusermodel,即“使用者模型”和“事件-使用者模型”。POI EXCEL文件結構類:

HSSFWorkbook //excel文件物件
HSSFSheet //excel的sheet HSSFRow excel的行
HSSFCell //excel的單元格 HSSFFont excel字型
HSSFName //名稱 HSSFDataFormat 日期格式
HSSFHeader //sheet頭
HSSFFooter //sheet尾
HSSFCellStyle //cell樣式
HSSFDateUtil //日期
HSSFPrintSetup //列印
HSSFErrorConstants //錯誤資訊表

3、EXCEL常用操作方法
3.1 得到Excel物件

//得到Excel常用物件           
POIFSFileSystem fs = newPOIFSFileSystem(new FileInputStream("d:/test.xls"));   
//得到Excel工作簿物件    
HSSFWorkbook wb = new HSSFWorkbook(fs);  
//得到Excel工作表物件    
HSSFSheet sheet = wb.getSheetAt(0);   
//得到Excel工作表的行    
HSSFRow row = sheet.getRow(i);  
//得到Excel工作表指定行的單元格    
HSSFCell cell = row.getCell((short) j);  
cellStyle = cell.getCellStyle();//得到單元格樣式  

3.2 建立Excel常用物件

//建立Excel工作簿物件
HSSFWorkbook wb = new HSSFWorkbook();   
HSSFSheet sheet = wb.createSheet("new sheet");//建立Excel工作表物件     
HSSFRow row = sheet.createRow((short)0); //建立Excel工作表的行   
cellStyle = wb.createCellStyle();//建立單元格樣式   
row.createCell((short)0).setCellStyle(cellStyle); //建立Excel工作表指定行的單元格   
row.createCell((short)0).setCellValue(1); //設定Excel工作表的值

3.3 設定列寬、行高

sheet.setColumnWidth((short)column,(short)width);      
row.setHeight((short)height); 

3.4 儲存Excel檔案

FileOutputStream fileOut = new FileOutputStream(path);   
wb.write(fileOut); 

3.5 常用單元格邊框格式

HSSFCellStyle style = wb.createCellStyle();      
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下邊框        
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左邊框        
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右邊框        
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上邊框

3.6 設定不顯示excel網格線

sheet.setDisplayGridlines(false);//其中sheet是Sheet物件 

3.7 設定excel單元格中的內容換行

cellStyle.setWrapText(true); 
//其中cellStyle是WorkBook建立的CellStyle物件,然後將cellStyle設定到要換行的Cell物件,最後在要換行的物件(一般為字串)加入"/r/n"。如 topTile.append("/r/n" +"cellContent"); 

3.8 單元格的合併

sheet.addMergedRegion(new CellRangeAddress(0, 3, 0, 8));//本示例為合併3行8列 

4、java程式碼
使用poi時,需要匯入poi的jar,poi-3.15.jar。

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;

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

/**
 * Created by xxx on 2016/10/28.
 * poi-3.15.jar
 */
public class CreateExcel {
        public static void main(String[] args) throws IOException {
            //**建立工作簿
            HSSFWorkbook wb = new HSSFWorkbook();
            //1、建立工作表
            HSSFSheet sheet = wb.createSheet("商品資訊表");
            for(int i = 0; i < 3; i++){
                //設定列寬
                sheet.setColumnWidth(i, 3000);
            }
            //建立行
            HSSFRow row = sheet.createRow(0);
            row.setHeightInPoints(30);//設定行高
            //建立單元格
            HSSFCell cell = row.createCell(0);
            cell.setCellValue("商品資訊");

            //2、標題樣式

            // 建立單元格樣式
            HSSFCellStyle cellStyle = wb.createCellStyle();
            // 設定單元格的背景顏色為green
            cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
            cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            // 設定單元格居中對齊
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            // 設定單元格垂直居中對齊
            cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            // 建立單元格內容顯示不下時自動換行
            cellStyle.setWrapText(true);

            //3、設定單元格字型樣式
            HSSFFont font = wb.createFont();
            // 設定字型加粗
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            font.setFontName("宋體");
            font.setFontHeight((short) 200);
            cellStyle.setFont(font);
            // 設定單元格邊框為細線條
            cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
            //設定單元格樣式
            cell.setCellStyle(cellStyle);
            //合併單元格
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));

            HSSFRow row1 = sheet.createRow(1);
            //標題資訊
            String[] titles = {"商品id","商品名稱","商品價格"};
            for(int i = 0; i < 3; i++){
                HSSFCell cell1 = row1.createCell(i);
                cell1.setCellValue(titles[i]);
                //設定單元格樣式
                cell1.setCellStyle(cellStyle);
            }

            //模擬資料
            List<String[]> list = new ArrayList<String[]>();
            list.add(new String[]{"1","冠達妙樂滋青汁大麥若葉吐司麵包720g 早餐糕點零食","11"});
            list.add(new String[]{"2","確悅 iphone7超薄手機矽膠套 蘋果7 plus軟殼外殼7P防摔保護套4.7","22"});
            list.add(new String[]{"3","毛巾架太空鋁浴巾架摺疊衛生間置物架毛巾杆浴室衛浴五金掛件套裝","33"});

            ///4、內容樣式
            // 建立單元格樣式
            HSSFCellStyle cellStyle2 = wb.createCellStyle();
            // 設定單元格居中對齊
            cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            // 設定單元格垂直居中對齊
            cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            // 建立單元格內容顯示不下時自動換行
            cellStyle2.setWrapText(true);

            // 設定單元格字型樣式
            HSSFFont font2 = wb.createFont();
            // 設定字型加粗
            font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            font2.setFontName("宋體");
            font2.setFontHeight((short) 200);
            cellStyle2.setFont(font2);
            // 設定單元格邊框為細線條
            cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
            cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
            //迴圈賦值
            for(int i = 0; i < list.size(); i++){
                HSSFRow row2 = sheet.createRow(i+2);
                for(int j = 0; j < 3; j++){
                    HSSFCell cell1 = row2.createCell(j);
                    cell1.setCellValue(list.get(i)[j]);
                    //設定單元格樣式
                    cell1.setCellStyle(cellStyle2);
                }
            }
            File file = new File("F:\\test.xls");
            if(!file.exists()){
                file.createNewFile();
            }
            //儲存Excel檔案
            FileOutputStream fileOut = new FileOutputStream(file);
            wb.write(fileOut);
            fileOut.close();
        }
    }