Android 程序讀寫Office文件

        Office文檔是以二進制格式存儲的,對於它的讀寫不能像普通文本一樣通過File來操作,如果以二進制格式讀取到內存中,我們也是不能夠正確解析其中的內容的,在Windows開發中、或者使用QT開發中,我們可以使用庫提供的控件或者API來操作Office文檔,但是在Android系統開發中,Android本身並沒有提供這樣的一套API。所以我們需要借用開源的一些庫,本文根據項目中的使用需求,項目中使用了Apache POI來讀寫Office文檔,把使用的一些套路、方法和趟過的坑記錄整理出來,方便有同樣需求的朋友參考。

Apache POI

        Apache POI是Apache 的一個開源項目,是一個JAVA項目,下載地址:http://poi.apache.org/download.html,API文檔:http://poi.apache.org/apidocs/index.html。Apache POI設計的目的是方便Java程序創建、讀取、寫入Office文檔。

Android 項目中使用Apache POI

        1. 從官網下載Binary Distribution包,像導入其它java包一樣,將下載的包放到Android Studio 工程的libs目錄下,並在項目中根據需要導入jar包,可以在工程裏通過圖形化的界面導入,也可以直接在build.gradle中添加依賴,依賴根據自己需要使用的庫添加,官網上有依賴關係,可以對應查找,,比如在我的測試項目中:

        2.編譯中如果出現如下問題:java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/..., 請配置java版本到VERSION_1_8,如下:

compileOptions{

        sourceCompatibility JavaVersion.VERSION_1_8

        targetCompatibility JavaVersion.VERSION_1_8

}

示例代碼:

        創建

public class Excel {
    private static final String TAG = "Execl";
    private static final String[] CONTENT = new String[] {"one", "two", "three", "four", "five", "six",
            "seven", "eight", "nine", "ten"};
    private static final String FILENAME = "textExcel.xls";

    public void exportExcelFile(FileOutputStream fos) {
        int size = 10;
        Workbook wb = new HSSFWorkbook();
        Sheet sh = wb.createSheet();

        for (int rownum = 0; rownum < size; rownum++) {
            Row row = sh.createRow(rownum);
            for (int cellnum = 0; cellnum < size; cellnum++) {
                Cell cell = row.createCell(cellnum);
                cell.setCellValue(CONTENT[cellnum]);
            }
        }

        try {
            wb.write(fos);
            fos.close();
            Log.d(TAG, "導出成功");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public StringBuffer importExcelFile(FileInputStream fis) {
        StringBuffer buf = new StringBuffer();
        try {
            POIFSFileSystem fs = new POIFSFileSystem(fis);
            HSSFWorkbook wk = new HSSFWorkbook(fs);
            HSSFSheet sheet = wk.getSheetAt(0);

            for (Row row : sheet) {
                for (Cell cell : row) {
                    CellType cellType = cell.getCellType();
                    if (cellType == CellType.BLANK) {
                        buf.append("\t");
                    } else if (cellType == CellType.NUMERIC) {
                        buf.append(cell.getNumericCellValue())
                                .append("\t");
                    } else if (cellType == CellType.STRING) {
                        buf.append(cell.getStringCellValue())
                                .append("\t");
                    }
                }
                buf.append("\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buf;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章