android代碼生成excel,AndroidExcel

Android_Excel

在android中生成excel

##效果圖

131030bcee3d2348ff3a555a7ded1c5d.png

##初始化數據

首先我們要先造下測試數據,這里我把數據寫死在一個常量類Const中,如下:

public class Const {

public interface OrderInfo{

public static final String[][] orderOne = new String[][] {{ "123", "九龍", "13294352311",

"武漢市關山口" },{ "124", "咱家", "13294352312",

"武漢市水果湖" },{ "125", "陳家", "13294352315",

"武漢市華師" },{ "126", "李", "13294352316",

"武漢市楊家灣" }};

}

}

理論上這些數據是從后臺讀過來的。

本文模擬打印訂單的信息,所以這里還需要一個訂單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/ 目錄這個目錄,它用來放一些長時間保存的數據,當應用被卸載時,會同時會刪除。類似這種情況的還有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,不進行寫入,然后創建相應的文件夾并起名字。接下來重點看下如何寫入excel。

##生成寫入excel

導入相關包

這里需要導入jxl包,它主要就是用于處理excel的,這個包我會附在項目放在github中,后面會給出鏈接。

生成excel工作表

以下代碼是在指定路徑下生成excel表,此時只是一個空表。

WritableWorkbook wwb;

OutputStream os = new FileOutputStream(file);

wwb = Workbook.createWorkbook(os);

添加sheet表

熟悉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();

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538765.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538765.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538765.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

14.JAVA整型變量

表示形式 Java語言整型常數的3種表示形式&#xff1a; 1、十進制整數&#xff1a;99&#xff0c;-100,0 2、八進制整數&#xff1a;要以0開頭&#xff0c;如015 3、十六進制整數&#xff1a;以0x開頭&#xff0c;如0x15 點擊查看十進制八進制十六進制概念 public static v…

exists sql用法_干貨!SQL性能優化,書寫高質量SQL語句

寫SQL語句的時候我們往往關注的是SQL的執行結果&#xff0c;但是是否真的關注了SQL的執行效率&#xff0c;是否注意了SQL的寫法規范&#xff1f;以下的干貨分享是在實際開發過程中總結的&#xff0c;希望對大家有所幫助&#xff01;1. limit分頁優化當偏移量特別大時&#xff0…

python docker自動化_「docker實戰篇」python的docker爬蟲技術-移動自動化控制工具appium工具(17)...

原創文章&#xff0c;歡迎轉載。轉載請注明&#xff1a;轉載自IT人故事會&#xff0c;謝謝&#xff01;原文鏈接地址&#xff1a;「docker實戰篇」python的docker爬蟲技術-移動自動化控制工具appium工具(17)Appium是一個開源測試自動化框架&#xff0c;可用于原生&#xff0c;混…

一些adb的常用命令

顯示正在運行的服務 adb shell dumpsys activity services [packageName] 打開一個Activity adb shell am start -n &#xff5b;包(package)名&#xff5d;/Activity絕對路徑(ex:com.xxx.xxx.xxxActivity) 以調試模式啟動一個Activity adb shell am start -D -n &#xff5b;包…

android 調用restful,android調用springmvc寫的restful

下載srpingmvc的相關jarhttp://www.cnblogs.com/liuhongfeng/p/4919963.html配置spingmvc和相關接口http://blog.csdn.net/jianyuerensheng/article/details/51258942如果報錯&#xff0c;檢查JDK版本是否和本地的一致在UserController.jave中添加接口package com.zjn.controll…

eureka server配置_springcloud項目搭建第三節:eureka集群

在上一節搭建的項目基礎上&#xff0c;在創建一個eureka-server-two的子項目和eureka-server項目一樣&#xff0c;然后修改各自項目的application.yml文件eureka-server項目的application.yml文件修改2點1.修改eureka的注冊地址改成另一個eureka-server-two項目的注冊中心地址2…

15.浮點類型

數值范圍 float類型又被稱為單精度類型&#xff0c;尾數可以精確到7位有效數字&#xff0c;在很多情況下&#xff0c;float類型的精度很難滿足需求。 double類型又被稱為雙精度類型&#xff0c;尾數可以精確到14位有效數字。 浮點類型默認是double。 public static void main(…

c4d流體插件_(圖文+視頻)C4D野教程:TFD、XP和RF三大流體插件協作案例

在逛INS的時候&#xff0c;看見國外一位叫做BastardFilms的大神制作了很多流體的效果&#xff1a;尤其是他制作的很多液態煙霧的流體&#xff0c;我特別喜歡&#xff0c;由于我不知道怎么下載INS的視頻&#xff0c;所以這里只有發個截圖大家看看&#xff1a;作者這里有說明是用…

form表單用js提前執行函數若不成功則不提交_面試必會的重復提交 8 種解決方案!...

重復提交看似是一個小兒科的問題&#xff0c;但卻存在好幾種變種用法。在面試中回答的好&#xff0c;說不定會有意想不到的收獲&#xff01;現把這 8 種解決方案分享給大家&#xff01;1.什么是冪等在我們編程中常見冪等select查詢天然冪等delete刪除也是冪等,刪除同一個多次效…

16.char類型

char&#xff0c;占2個字節。 單引號用來表示字符常量。例如a. char類型用來表示在Unicode編碼表中的字符。 unicode編碼被設計用來處理各種語言的所有文字&#xff0c;它占了2個字節&#xff0c;可允許有65536個字符。 Java語言中還允許使用轉義字符‘\&#xff0c;來將其后的…

轉向Kotlin——數據類和封閉類

數據類和封閉類是Kotlin中的兩種特殊的類&#xff0c;今天一起了解一下。更多精彩內容也可以關注我的微信公眾號——Android機動車 數據類 數據類是Kotlin的一個語法糖。Kotlin編譯器會自動為數據類生成一些成員函數&#xff0c;以提高開發效率。 數據類的使用 無論是Java服務器…

idea前端可視化_jsp可視化開發工具_netbeans jsp可視化_idea 可視化開發 jsp

數字生態鉅惠來襲&#xff01;秒殺 2核4G 5M帶寬 1200元/3年&#xff0c;1核1G首購 99元/年把默認改成 myeclipse jsp editor()原默認的jsp編輯器是 myeclipse visual jspdesigner&#xff0c;顧名思義&#xff0c;此編譯器是jsp可視化編輯器&#xff0c;對于初學者有很多的幫助…

開博爾智能android播放器,高端安卓播放器的選擇——開博爾Q10Plus 二代 4K高清播放器...

隨著OPPO和三星相繼宣布退出4K藍光播放器市場&#xff0c;先鋒的新機遲遲無法大量鋪貨&#xff0c;現在市面上可選擇的4K播放器就比較少了&#xff0c;價格也很高了&#xff0c;于是很多人開始將注意力轉向了安卓機&#xff0c;其中開博爾是比較有代表性的廠家了&#xff0c;這…

17.類型轉換

自動類型轉換 容量小的數據類型可以自動轉換為容量大的數據類型 byte b 123;//byte b2 300;//報錯&#xff0c;超過了byte最大值127//char c -3;//報錯&#xff0c;char范圍是0~65536&#xff0c;不在范圍char c2 a;//a在ascii碼里是98int i c2;long d01 123213;float f…

docker rabbitmq_一文看懂Rabbitmq,從安裝到實戰演練

Rabbitmq的初步使用隨著微服務概念發展&#xff0c;大應用逐步拆分為小應用&#xff0c;提高開發效率&#xff0c;專門的人做專門的事情&#xff0c;逐漸的流行起來。在微服務上實現通信的方式大部分是采用rpc方式&#xff0c;也有升級版本的grpc。還有另外一種實現就是使用mq來…

Angular v6 正式發布

Angular 6 正式發布 Angular 6 已經正式發布了&#xff01;這個主要版本并不關注于底層的框架&#xff0c;更多地關注于工具鏈&#xff0c;以及使 Angular 在未來更容易快速推進。 作為發布的一部分&#xff0c;我們同步了主要的框架包 (angular/core, angular/common, angula…

bootstrap五星評分_如何用純代碼實現評分星級顯示?

showRatingStars/*** showRatingStars 顯示評分星級* param {Object} myCanvas 畫布對象* param {Number} rating 評分* param {Number} counts star個數* param {Number} size star大小* param {Object} style star樣式* Example: style {* borderColor:"#21DEEF",…

18.變量

Java是一種強類型語言&#xff0c;每個變量都必須聲明其類型。 Java變量是程序中最基本的存儲單元&#xff0c;其要素包括變量名&#xff0c;變量類型和作用域。 變量在使用前必須對其聲明&#xff0c;只有在變量聲明以后&#xff0c;才能為其分配相應長度的存儲單元。 注意事項…

alertdialog android api 11,android – 設備api級別11的DialogFragments

我設法在兼容包的DialogFragment.java中正確修復了這個問題&#xff1a;改變第74行&#xff1a;boolean mShowsDialog false;注釋掉第232行&#xff1a;// mShowsDialog mContainerId 0;然后將兩個show方法更改為&#xff1a;public void show(FragmentManager manager, Str…

py 字典添加多個value_# Python 3 # Python 3字典Dictionary(1)

Python3 字典字典是另一種可變容器模型&#xff0c;且可存儲任意類型對象。字典的每個鍵值(key>value)對用冒號(:)分割&#xff0c;每個對之間用逗號(,)分割&#xff0c;整個字典包括在花括號({})中 ,格式如下所示&#xff1a;d {key1 : value1, key2 : value2 }鍵必須是唯…