Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中利用jxl組件來操作excel

Android中利用jxl組件來操作excel

編輯:關於Android編程

1.支持Excel 95-2000的所有版本,生成Excel 2000標准格式,支持字體、數字、日期操作,能夠修飾單元格屬性,支持圖像和圖表,最關鍵的是這套API是純Java的,並不依賴Windows系統,即使運行在Linux下,它同樣能夠正確的處理Excel文件。但是,這套API對圖形和圖表的支持很有限,而且僅僅識別PNG格式。

看一下效果圖,

這裡寫圖片描述

2.首先你需要有一個jxl.jar,在網上下載jxl.jar包,然後在導入你的項目中,

這裡寫圖片描述

下面是操作的步驟,
3.創建文件,
例子是生成一個名為“test.xls”的Excel文件,其中第一個工作表被命名為“第一張工作表”。編譯執行後,會產生一個Excel文件。

private void craetExcel() {
    try {
        // 打開文件
        WritableWorkbook book = Workbook.createWorkbook(new File("mnt/sdcard/test.xls"));
        // 生成名為“第一張工作表”的工作表,參數0表示這是第一頁
        WritableSheet sheet = book.createSheet("第一張工作表", 0);
        // 在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
        // 以及單元格內容為baby
        Label label = new Label(0, 0, "baby");
        // 將定義好的單元格添加到工作表中

        sheet.addCell(label);
        // 生成一個保存數字的單元格,必須使用Number的完整包路徑,否則有語法歧義。
        //單元格位置是第二列,第一行,值為123
        jxl.write.Number number = new jxl.write.Number(1, 0, 123);
        sheet.addCell(number);
        //寫入數據並關閉
        book.write();
        book.close();

    } catch (WriteException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

3.對excel的單元格進行操作,如行高,列寬以及單元格的合並
①行高:

//設置行高,設置第一行高度為100,參數1:行數,參數2:高度
sheet.setRowView(0, 100);

②列寬:

//設置列寬,設置第一列寬度為50,參數1:列數,參數2:寬度
sheet.setColumnView(0, 50);

③合並單元格(可以橫向合並,也可以縱向合並):

//合並單元格,參數1:合並的起始列數,參數2:合並的起始行數,參數3:合並的截止列數,參數4:合並的截止行數
//合並第一列第一行到第四列第五行
sheet.mergeCells(0, 0, 3, 4);

但是有一個地方需要注意一下,合並後的單元格不能再次參加合並,否則會觸發異常。

4.設置字體、字號、粗細等,功能主要由WritableFont和WritableCellFormat類來負責。
WritableFont有非常豐富的構造子方法,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這裡不再列出。
WritableCellFormat類非常重要,通過它可以指定單元格的各種屬性,後面的單元格格式化中會有更多描述。

//創建字體,參數1:字體樣式,參數2:字號,參數3:粗體
WritableFont font = new WritableFont(WritableFont.createFont("楷體"), 11, WritableFont.BOLD);
WritableCellFormat format = new WritableCellFormat(font);

// 在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
// 以及單元格內容為baby,並將字體等設置添加進去
Label label = new Label(0, 0, "baby", format);

5.設置對齊方式,

//設置對齊方式為水平居中
format.setAlignment(Alignment.CENTRE);
//設置對齊方式為垂直居中
format.setVerticalAlignment(VerticalAlignment.CENTRE);

6.讀取excel文件,

private void readExcel() {
    try {
        Workbook workbook = Workbook.getWorkbook(new File("mnt/sdcard/test.xls"));
        //獲取第一個工作表的對象
        Sheet sheet = workbook.getSheet(0);
        //獲取第一列第一行的的單元格
        Cell cell = sheet.getCell(0, 0);
        //獲取單元格中的內容
        String body = cell.getContents();
        Log.d("bb", body);
        //讀取數據關閉
        workbook.close();


    } catch (IOException e) {
        e.printStackTrace();
    } catch (BiffException e) {
        e.printStackTrace();
    }
}

我們可以看見程序的輸出結果是:baby,
Cell接口的方法還可以獲取單元格行、列位置,單元格是否隱藏等屬性。具體的參考jxl的API。

7.修改Excel文件,其實就是覆蓋之前excel文件,

private void updatExcel() {
    try {
        //獲取excel文件
        Workbook workbook = Workbook.getWorkbook(new File("mnt/sdcard/test.xls"));
        //打開文件的副本,並且制定數據寫回到原文件
        WritableWorkbook writableWorkbook = Workbook.createWorkbook(new File("mnt/sdcard/test.xls"), workbook);

        //修改工作表的數據
        WritableSheet sheet = writableWorkbook.getSheet(0);
        sheet.addCell(new Label(0, 0, "覆蓋單元格內容"));

        //添加一張新的工作表
        WritableSheet sheet1 = writableWorkbook.createSheet("第二張工作表", 1);
        sheet1.addCell(new Label(0, 0, "第二頁的數據"));

        //關閉
        writableWorkbook.close();
        workbook.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (BiffException e) {
        e.printStackTrace();
    } catch (RowsExceededException e) {
        e.printStackTrace();
    } catch (WriteException e) {
        e.printStackTrace();
    }
}

現在貼出所有的代碼:
MainActivity中:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button chaBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//創建excel文件
        craetExcel();

        chaBtn = (Button) findViewById(R.id.chaBtn);
        chaBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.chaBtn:
               //讀取excel文件
                readExcel();
//更新excel文件
                updatExcel();
                break;
        }
    }


    private void craetExcel() {
        try {
            // 打開文件
            WritableWorkbook book = Workbook.createWorkbook(new File("mnt/sdcard/test.xls"));
            // 生成名為“第一張工作表”的工作表,參數0表示這是第一頁
            WritableSheet sheet = book.createSheet("第一張工作表", 0);

            //設置行高,設置第一行高度為100,參數1:行數,參數2:高度
            sheet.setRowView(0, 100);
            //設置列寬,設置第一列寬度為50,參數1:列數,參數2:寬度
            sheet.setColumnView(0, 50);

            //合並單元格,參數1:合並的起始列數,參數2:合並的起始行數,參數3:合並的截止列數,參數4:合並的截止行數
            //合並第一列第一行到第四列第五行
            sheet.mergeCells(0, 0, 3, 4);

            //創建字體,參數1:字體樣式,參數2:字號,參數3:粗體
            WritableFont font = new WritableFont(WritableFont.createFont("楷體"), 11, WritableFont.BOLD);
            WritableCellFormat format = new WritableCellFormat(font);

            //設置對齊方式為水平居中
            format.setAlignment(Alignment.CENTRE);
            //設置對齊方式為垂直居中
            format.setVerticalAlignment(VerticalAlignment.CENTRE);

            // 在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
            // 以及單元格內容為baby
            Label label = new Label(0, 0, "baby", format);

            // 將定義好的單元格添加到工作表中
            sheet.addCell(label);
            // 生成一個保存數字的單元格,必須使用Number的完整包路徑,否則有語法歧義。
            //單元格位置是第二列,第一行,值為123.456
            jxl.write.Number number = new jxl.write.Number(1, 0, 123.456);
            sheet.addCell(number);
            //寫入數據並關閉
            book.write();
            book.close();

        } catch (WriteException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void readExcel() {
        try {
            Workbook workbook = Workbook.getWorkbook(new File("mnt/sdcard/test.xls"));
            //獲取第一個工作表的對象
            Sheet sheet = workbook.getSheet(0);
            //獲取第一列第一行的的單元格
            Cell cell = sheet.getCell(0, 0);
            //獲取單元格中的內容
            String body = cell.getContents();
            Log.d("bb", body);
            //讀取數據關閉
            workbook.close();


        } catch (IOException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        }
    }

    private void updatExcel() {
        try {
            //獲取excel文件
            Workbook workbook = Workbook.getWorkbook(new File("mnt/sdcard/test.xls"));
            //打開文件的副本,並且制定數據寫回到原文件
            WritableWorkbook writableWorkbook = Workbook.createWorkbook(new File("mnt/sdcard/test.xls"), workbook);

            //修改工作表的數據
            WritableSheet sheet = writableWorkbook.getSheet(0);
            sheet.addCell(new Label(0, 0, "覆蓋單元格內容"));

            //添加一張新的工作表
            WritableSheet sheet1 = writableWorkbook.createSheet("第二張工作表", 1);
            sheet1.addCell(new Label(0, 0, "第二頁的數據"));

            //關閉
            writableWorkbook.close();
            workbook.close();

        } catch (IOException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (RowsExceededException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        }
    }

}

MainActivity的布局文件:


本人菜鳥一個,有什麼不對的地方希望大家指出評論,大神勿噴,希望大家一起學習進步!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved