Android開發(fā)實現(xiàn)生成excel的方法詳解
本文實例講述了Android開發(fā)實現(xiàn)生成excel的方法。分享給大家供大家參考,具體如下:
都說程序員不爽產(chǎn)品經(jīng)理,其實有的時候遇到一些奇葩的后臺開發(fā)人員也會很不順心。最近項目有這樣一個要求,要生成一個excel然后發(fā)郵件給客戶。結果后臺人員直接把這個功能扔給客戶端,理由是后臺不好實現(xiàn)。聽到這也就只能自己實現(xiàn)了(分分鐘就想來個螺旋王扣它頭上)。這篇博客講下如下在android中生成excel表并存到本地。先看下生成后的效果圖:
初始化數(shù)據(jù)
首先我們要先造下測試數(shù)據(jù),這里我把數(shù)據(jù)寫死在一個常量類Const中,如下:
public class Const { public interface OrderInfo{ public static final String[][] orderOne = new String[][] {{ "123", "九龍", "13294352311", "武漢市關山口" },{ "124", "咱家", "13294352312", "武漢市水果湖" },{ "125", "陳家", "13294352315", "武漢市華師" },{ "126", "李", "13294352316", "武漢市楊家灣" }}; } }
理論上這些數(shù)據(jù)是從后臺讀過來的。
本文模擬打印訂單的信息,所以這里還需要一個訂單Model類:
public class Order implements Serializable { public String id; public String restPhone; public String restName; public String receiverAddr; public Order(String id,String restPhone, String restName, String receiverAddr) { this.id = id; this.restPhone = restPhone; this.restName = restName; this.receiverAddr = receiverAddr; } }
存內存卡
接下來我們要判斷一下內存卡是否存在,內存是否足夠大。先獲取指定目錄下內存的大小:
/** 獲取SD可用容量 */ private static long getAvailableStorage(Context context) { String root = context.getExternalFilesDir(null).getPath(); StatFs statFs = new StatFs(root); long blockSize = statFs.getBlockSize(); long availableBlocks = statFs.getAvailableBlocks(); long availableSize = blockSize * availableBlocks; // Formatter.formatFileSize(context, availableSize); return availableSize; }
這里用到的路徑是getExternalFilesDir,它指定的是SDCard/Android/data/你的應用的包名/files/ 目錄這個目錄,它用來放一些長時間保存的數(shù)據(jù),當應用被卸載時,會同時會刪除。類似這種情況的還有getExternalCacheDir方法,只是它一般用來存放臨時文件。之后通過StatFs來計算出可用容量的大小。
接下來在寫入excel前對內存進行判斷,如下:
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)&&getAvailableStorage()>1000000) { Toast.makeText(context, "SD卡不可用", Toast.LENGTH_LONG).show(); return; } File file; File dir = new File(context.getExternalFilesDir(null).getPath()); file = new File(dir, fileName + ".xls"); if (!dir.exists()) { dir.mkdirs(); }
如果內存卡不存在或內存小于1M,不進行寫入,然后創(chuàng)建相應的文件夾并起名字。接下來重點看下如何寫入excel。
生成寫入excel
導入相關包
這里需要導入jxl包,它主要就是用于處理excel的,這個包我會附在項目放在github中,后面會給出鏈接。
生成excel工作表
以下代碼是在指定路徑下生成excel表,此時只是一個空表。
WritableWorkbook wwb; OutputStream os = new FileOutputStream(file); wwb = Workbook.createWorkbook(os);
添加shee表
熟悉excel操作的都知道excel可以新建很多個sheet表。以下代碼生成第一個工作表,名字為“訂單”:
WritableSheet sheet = wwb.createSheet("訂單", 0);
添加excel表頭
添加excel的表頭,這里可以自定義表頭的樣式,先看代碼:
String[] title = { "訂單", "店名", "電話", "地址" }; Label label; for (int i = 0; i < title.length; i++) { // Label(x,y,z) 代表單元格的第x+1列,第y+1行, 內容z // 在Label對象的子對象中指明單元格的位置和內容 label = new Label(i, 0, title[i], getHeader()); // 將定義好的單元格添加到工作表中 sheet.addCell(label); }
這里表頭信息我寫死了。表的一個單元格對應一個Label,如label(0,0,”a”)代表第一行第一列所在的單元格信息為a。getHeader()是自定義的樣式,它返回一個 WritableCellFormat 。來看看如何自定義樣式:
public static WritableCellFormat getHeader() { WritableFont font = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD);// 定義字體 try { font.setColour(Colour.BLUE);// 藍色字體 } catch (WriteException e1) { e1.printStackTrace(); } WritableCellFormat format = new WritableCellFormat(font); try { format.setAlignment(jxl.format.Alignment.CENTRE);// 左右居中 format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 上下居中 format.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);// 黑色邊框 format.setBackground(Colour.YELLOW);// 黃色背景 } catch (WriteException e) { e.printStackTrace(); } return format; }
看上面代碼就很清楚了,通過獲得WritableFont 來自定義字體的一些樣式,如顏色大小等,通過WritableCellFormat 來設置文本框的樣式,可以設置邊框底色等。具體的可以查api文檔,這里只給出例子。
添加excel內容
for (int i = 0; i < exportOrder.size(); i++) { Order order = exportOrder.get(i); Label orderNum = new Label(0, i + 1, order.id); Label restaurant = new Label(1, i + 1, order.restName); Label nameLabel = new Label(2,i+1,order.restPhone); Label address = new Label(3, i + 1, order.receiverAddr); sheet.addCell(orderNum); sheet.addCell(restaurant); sheet.addCell(nameLabel); sheet.addCell(address); Toast.makeText(context, "寫入成功", Toast.LENGTH_LONG).show(); }
這就再簡單不過了,就是獲取order信息然后一個個寫入。
主類
這個demo布局很簡單就是一個按鈕點擊來生成excel,這里就不貼出來了,MainActivity的代碼如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int length = Const.OrderInfo.orderOne.length; for(int i = 0;i < length;i++){ Order order = new Order( Const.OrderInfo.orderOne[i][0], Const.OrderInfo.orderOne[i][1], Const.OrderInfo.orderOne[i][2], Const.OrderInfo.orderOne[i][3]); orders.add(order); } btn = (Button)super.findViewById(R.id.btn); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { ExcelUtil.writeExcel(MainActivity.this, orders, "excel_"+new Date().toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); }
這里我把上面生成excel的代碼封裝到一個工具類ExcelUtil中,以后使用就直接調用 。MainActivity就是將數(shù)組組裝到Order中調用ExcelUtil來寫入。到此android實現(xiàn)excel功能就實現(xiàn)了。
github源碼地址:https://github.com/reallin/Android_Excel
或者點擊此處本站下載。
更多關于Android相關內容感興趣的讀者可查看本站專題:《Android文件操作技巧匯總》、《Android視圖View技巧總結》、《Android編程之a(chǎn)ctivity操作技巧總結》、《Android布局layout技巧總結》、《Android開發(fā)入門與進階教程》、《Android資源操作技巧匯總》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
- Android應用讀取Excel文件的方法
- Android實現(xiàn)仿excel數(shù)據(jù)表格效果
- Android 中讀取Excel文件實例詳解
- Android操作Excel文件的功能實現(xiàn)
- android通過jxl讀excel存入sqlite3數(shù)據(jù)庫
- android讀取assets中Excel表格并顯示
- Android開發(fā)實現(xiàn)的導出數(shù)據(jù)庫到Excel表格功能【附源碼下載】
- Android 操作excel功能實例代碼
- Android開發(fā)實現(xiàn)讀取excel數(shù)據(jù)并保存為xml的方法
- Android多國語言轉換Excel及Excel轉換為string詳解
相關文章
Android實現(xiàn)的RecyclerView適配器
這篇文章主要介紹了Android實現(xiàn)的RecyclerView適配器的相關資料,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-03-03Android開發(fā)必知 九種對話框的實現(xiàn)方法
App中少不了與用戶交互的各種dialog,以此達到很好的用戶體驗,下面給大家介紹Android開發(fā)必知 九種對話框的實現(xiàn)方法,有需要的朋友可以參考下2015-08-08Android 啟動模式FLAG_ACTIVITY_CLEAR_TOP案例詳解
這篇文章主要介紹了Android 啟動模式FLAG_ACTIVITY_CLEAR_TOP案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-08-08Android OnCreate()中獲取控件高度與寬度兩種方法詳解
這篇文章主要介紹了Android OnCreate()中獲取控件高度與寬度兩種方法詳解的相關資料,這里提供了兩種方法,大家可以都看下,需要的朋友可以參考下2016-12-12Android ListView填充數(shù)據(jù)的方法
這篇文章主要介紹了Android ListView填充數(shù)據(jù)的方法的相關資料,大多數(shù)實現(xiàn)這樣的功能都是使用XML文件,這里就說下不使用布局文件如何實現(xiàn),需要的朋友可以參考下2017-09-09Flutter?Ping檢查服務器通訊信號強度實現(xiàn)步驟
這篇文章主要為大家介紹了Flutter?Ping檢查服務器通訊信號強度實現(xiàn)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06Android中Listview下拉刷新和上拉加載更多的多種實現(xiàn)方案
本文大概通過三種方案給大家介紹了Android中Listview下拉刷新和上拉加載更多知識,非常不錯,具有參考借鑒價值,需要的朋友參考下2016-12-12Android shell命令行中過濾adb logcat輸出的方法
本文主要介紹Android shell命令行中過濾adb logcat輸出,這里詳細說明了shell 命令過濾logcat 輸出內容,有需要的小伙伴可以參考下2016-08-08Android自定義SeekBar實現(xiàn)視頻播放進度條
這篇文章主要為大家詳細介紹了Android自定義SeekBar實現(xiàn)視頻播放進度條的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03