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.mzph.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 }键必须是唯…