1. 程式人生 > >jxl 操作Excel表格之Sheet

jxl 操作Excel表格之Sheet

      這篇文章主要是講工作表相關的操作,包括得到單元格、工作表的相關屬性等。

import java.io.*;
import java.util.regex.Pattern;
import jxl.*;
import jxl.read.biff.BiffException;


public class TSheet {
    public static void main(String args[])  {
        try {
            File file = new File("D://JEtest/測試.xls");
            
            Workbook book = Workbook.getWorkbook(file);
            Sheet sheet = book.getSheet(0);
            
            //返回指定行列組成的單元格,如果指定的行列組合的單元格是合併後單元組的元素,將返回一個空的單元格,除非這個單元格是單元格組的第一個。
            //第一個引數是列,第二個引數是行。 索引從0開始
            Cell cell = sheet.getCell(0, 0);
            System.out.println("cell(0,0): " + cell.getContents());
            
            //返回指定位置的單元格,例如:“A4”。注意,這個方法與呼叫
            //getCell(CellReferenceHelper.getColumn(loc),CellReferenceHelper.getRow(loc))是相同的,
            //其隱含的效能開銷為字串解析。因此,這種方法應該謹慎使用。
            Cell cellh = sheet.getCell(CellReferenceHelper.getColumn("B1"),CellReferenceHelper.getRow("B1"));
            Cell cell2 = sheet.getCell("B1");      //索引從1開始
            System.out.println("cell(1,0): " + cell2.getContents());
            
            //返回工作表的行數
            int rows = sheet.getRows();
            System.out.println("表1的資料行數: " + rows);
            
            //返回工作表的列數
            int columns = sheet.getColumns();
            System.out.println("表1的資料列數: " + columns);
            
            //返回指定行的單元格陣列
            Cell [] cellrowlist = sheet.getRow(0);
            System.out.println("表1第一行單元格個數: " + cellrowlist.length);
            
            //返回指定列的單元格陣列
            Cell [] cellcolumnlist = sheet.getColumn(0);
            System.out.println("表1第一列單元格個數: " + cellcolumnlist.length);
            
            //返回工作表的名稱
            String sheetname = sheet.getName();
            System.out.println("表1的名稱: " + sheetname);
            
            //判斷表是否是隱藏的            
            boolean judge = sheet.isHidden();
            System.out.println("表1是否被隱藏: " + judge);
            
            //判斷表是否受保護
            boolean judeg2 = sheet.isProtected();
            System.out.println("表1是否受保護: " + judeg2);
            
            //得到內容與傳進來字串匹配的單元格。如果沒有發現匹配,將返回null.
            //搜尋執行是從最低行開始一行一行執行的,因此,行號越低,演算法執行越高效。
            //返回第一個匹配的單元格。
            Cell cell3 = sheet.findCell("789.123");
            System.out.println("表1內容為test單元格的行數: " + cell3.getRow());
            System.out.println("表1內容為test的單元格內容: " + cell3.getContents());
            
            //得到內容與傳進來字串匹配的單元格。如果沒有發現匹配,將返回null.
            //搜尋執行是從最低行開始一行一行執行的,因此,行號越低,演算法執行越高效。
            //Cell findCell(java.lang.String contents,int firstCol,int firstRow,int lastCol,int lastRow,boolean reverse)
            //contents是匹配內容,firstCol是搜尋開始列,firstRow是搜尋開始行,同樣lastCol,lastRow是結束列和行
            //reverse 是指示是否執行反向搜尋,反向搜尋是從行、列數大的開始向小的方向搜尋。true是執行反向搜尋。
            //也是返回第一個匹配單元格。
            Cell cell4 = sheet.findCell("test",0,0,1,1,true);
            System.out.println("表1內容為test單元格的行數: " + cell4.getRow());
            
            //該函式後四個引數和上面函式一樣,第一個引數是一個正則表示式。
            Pattern p = Pattern.compile("a*b");
            Cell cell5 = sheet.findCell(p, 0, 0, 2, 2, false);
            System.out.println("表1內容為正則表示式 a*b 單元格的行數: " + cell5.getRow());
            System.out.println("表1內容為正則表示式 a*b 單元格的內容是: " + cell5.getContents());
            
            //該函式與findCell前面的特性一樣,這種方法與findCell方法的不同之處在於,只有標籤單元格查詢,
            //所有的數值單元格被忽略。這應該提高效能。
            LabelCell labelCell = sheet.findLabelCell("test");
            System.out.println("標籤單元格內容: " + labelCell.getContents());
            
            //得到工作表中的超連結陣列
            Hyperlink [] hyperlinkList = sheet.getHyperlinks();
            System.out.println("工作表中超連結個數: " + hyperlinkList.length);
            
            //得到工作表中合併單元格的range陣列
            Range [] rangeList = sheet.getMergedCells();
            System.out.println("工作表中有多少個合併的單元格: " + rangeList.length);
            
            //得到用於表的settings
            SheetSettings sheetSet = sheet.getSettings();
            
            //得到指定列的列格式,如果沒有特殊的格式則返回NULL
            jxl.format.CellFormat cellFormat = sheet.getColumnFormat(0);
            
            //返回指定列的寬度,如果沒有特殊格式怎返回預設值
            int columnWidth = sheet.getColumnWidth(0);
            System.out.println("工作表第一列寬度: " + columnWidth);
            
            //得到指定列格式
            CellView cellViewCol = sheet.getColumnView(1);
            
            //得到指定行的高度         
            int rowHeight = sheet.getRowHeight(0);
            System.out.println("工作表第一行高度: " + rowHeight);
            
            //得到指定行格式
            CellView cellViewRow = sheet.getRowView(0);
            cellViewRow.setHidden(true);
            
            //得到工作表中影象數
            int numberOfImages = sheet.getNumberOfImages();
            System.out.println("工作表中圖片個數: " + numberOfImages);
            
            //返回指定位置的影象,索引從0開始
            Image image = sheet.getDrawing(0);
            System.out.println("工作表中第一個影象的列位置: " + image.getColumn());

            //返回工作表的分頁符
            int [] rowPageBreaks = sheet.getRowPageBreaks();
            //System.out.println("工作表分頁符: " + rowPageBreaks[0]);
              
            //返回工作表的分頁符
            int [] columnPageBreaks = sheet.getColumnPageBreaks();
            //System.out.println("工作表分頁符: " + columnPageBreaks[0]);
            
            
            book.close();
        }catch (IOException | BiffException | IndexOutOfBoundsException e)  {
            System.out.println("Exception: " + e);
        }
    }
    
}

     工作表的操作如上面的程式所示,更多的細節可以具體在實踐實踐。這裡需要注意的是Excel表格裡的內容。