編輯:關於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的布局文件:
本人菜鳥一個,有什麼不對的地方希望大家指出評論,大神勿噴,希望大家一起學習進步!
突然對懸浮窗體感興趣,查資料做了個小Demo,效果是點擊按鈕後,關閉當前Activity,顯示懸浮窗口,窗口可以拖動,雙擊後消失。效果圖如下: 它的使用原
1.把eclipse工程配置文件復制到Android源碼根目錄下cp development/ide/eclipse/.classpath ./2.修改eclipse程序
本文實例講述了Android和JavaScript相互調用的方法。分享給大家供大家參考,具體如下:Html頁面和Java代碼結合的方式一般用在界面經常被更改 的情況下,可
在Android3.0之後,Google對UI導航設計上進行了一系列的改革,其中有一個非常好用的新功能就是引入的ActionBar,他用於取代3.0之前的標題欄,並提供更