JExcel API使用笔记

JExcel API使用笔记

JExcel是一个开源的支持excel的java类库,广泛利用其api来生成excel报表

API基本使用

1.创建excel文件

workbook = Workbook.createWorkbook(file);//传入file文件

2.创建sheet页

WritableSheet sheet = workbook.createSheet("记录表", 0);//可以调整sheet页的名称与索引

3.创建标题栏

创建完sheet页后,我们先创建一行标题栏

sheet.addCell(new Label(c, r, fileName, arial14format));//r是行,c是列,标签内容,单元格格式

4.设置单元格行高、列宽

sheet.setRowView(0, 340); //设置行高
sheet.setColumnView(0, 45); //设置列宽

5.单元格格式设置

//字体设置
arial14font = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD);//字体、大小、样式
arial14font.setColour(jxl.format.Colour.LIGHT_BLUE);//字体颜色
arial14format = new WritableCellFormat(arial14font);
arial14format.setAlignment(jxl.format.Alignment.CENTRE);//居中
arial14format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);//边界样式
arial14format.setBackground(jxl.format.Colour.VERY_LIGHT_YELLOW);//背景颜色

6.添加普通标签

获取到WritableSheet的变量后,就能添加单元格了

sheet.addCell(new Label(5, 6, “hello”, arial14format));//在第5+1列第6+1行添加一个hello

行、列都是从0开始算的!

7.添加数字

sheet.addCell(new Number(i, j + 1, Integer.parseInt(list.get(i)), arial12format));

添加格式化后的数字

NumberFormat nf = new NumberFormat("#.##");
WritableCellFormat wcfN = new WritableCellFormat(nf);
Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);

8.添加日期

WritableCellFormat dateCellFormat = new WritableCellFormat(new DateFormat("yyyy/MM/dd HH:mm:ss"));
dateCellFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);
dateCellFormat.setBackground(Colour.AQUA);
sheet.addCell(new DateTime(c, r, (Date) list.get(i), dateCellFormat));

9.添加链接

WritableHyperlink hyperlink = new WritableHyperlink(i, j, new URL("http://baidu.com"));
Label issueLink = new Label(i, j, "http://baidu.com", arial12format);
hyperlink.setDescription(issueLink.getContents());sheet.addCell(issueLink);
sheet.addHyperlink(hyperlink);

10.添加Boolean对象

Boolean labelB = new jxl.write.Boolean(0, 2, false);
sheet.addCell(labelB);

11.添加图片

WritableImage wimage = new WritableImage(0, 1, 2, 2, image);//0,1分别代表x,y.2,2代表宽和高占的单元格数
//image文件或byte[]
sheet.addImage(wimage);

12.将列设置为自适应

CellView cellView = sheet.getColumnView(i);
cellView.setAutosize(true);
sheet.setColumnView(i, cellView);

13.写入工作表

writebook.write();

14.关闭工作表

writebook.close();

15.获取单元格的数据

public static void readExcel(String filePath) {try {InputStream is = new FileInputStream(filePath);Workbook rwb = Workbook.getWorkbook(is);//Sheet st = rwb.getSheet("0")这里有两种方法获取sheet表,1为名字,而为下标,从0开始Sheet st = rwb.getSheet("original");Cell c00 = st.getCell(0, 0);//通用的获取cell值的方式,返回字符串String strc00 = c00.getContents();//获得cell具体类型值的方式if (c00.getType() == CellType.LABEL) {LabelCell labelc00 = (LabelCell) c00;strc00 = labelc00.getString();}//输出System.out.println(strc00);//关闭rwb.close();} catch (Exception e) {e.printStackTrace();}
}

根据文件路径打开输入流,得到文件内容,获取到sheet,获取到(0,0)的内容,判断单元格中数据的格式,最后输出。

		for (int j = 0;j<sheet.getColumns();j++){StringBuffer sb = new StringBuffer();for (int i=0;i<sheet.getRows();i++){// 列,行cell = sheet.getCell(j, i);sb.append(cell.getContents());// 获取单元格内容sb.append(",");// 将单元格的每行内容用逗号隔开}list.add(sb.toString());//将每行的字符串用一个String类型的集合保存。}

循环获取内容,添加到集合中。

Android下简单使用

依赖

implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'

工具类

import android.content.Context;
import android.os.Environment;
import android.widget.Toast;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import jxl.CellView;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableHyperlink;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;public class ExcelUtil {public static WritableFont arial14font = null;public static WritableCellFormat arial14format = null;public static WritableFont arial10font = null;public static WritableCellFormat arial10format = null;public static WritableFont arial12font = null;public static WritableCellFormat arial12format = null;public final static String UTF8_ENCODING = "UTF-8";public final static String GBK_ENCODING = "GBK";/*** 单元格的格式设置 字体大小 颜色 对齐方式、背景颜色等...*/public static void format() {try {arial14font = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD);arial14font.setColour(jxl.format.Colour.LIGHT_BLUE);arial14format = new WritableCellFormat(arial14font);arial14format.setAlignment(jxl.format.Alignment.CENTRE);arial14format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);arial14format.setBackground(jxl.format.Colour.VERY_LIGHT_YELLOW);arial10font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);arial10format = new WritableCellFormat(arial10font);arial10format.setAlignment(jxl.format.Alignment.CENTRE);arial10format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);arial10format.setBackground(Colour.GRAY_25);arial12font = new WritableFont(WritableFont.ARIAL, 10);arial12format = new WritableCellFormat(arial12font);arial12format.setAlignment(jxl.format.Alignment.CENTRE);//对齐格式arial10format.setAlignment(jxl.format.Alignment.CENTRE);//对齐格式arial12format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN); //设置边框} catch (WriteException e) {e.printStackTrace();}}/*** 初始化Excel** @param fileName* @param colName*/public static void initExcel(String fileName, String[] colName) {format();WritableWorkbook workbook = null;try {File file = new File(fileName);if (!file.exists()) {file.createNewFile();}workbook = Workbook.createWorkbook(file);WritableSheet sheet = workbook.createSheet("成绩表", 0);//创建标题栏sheet.addCell((WritableCell) new Label(0, 0, fileName, arial14format));for (int col = 0; col < colName.length; col++) {sheet.addCell(new Label(col, 0, colName[col], arial10format));}sheet.setRowView(0, 340); //设置行高workbook.write();} catch (Exception e) {e.printStackTrace();} finally {if (workbook != null) {try {workbook.close();} catch (Exception e) {e.printStackTrace();}}}}@SuppressWarnings("unchecked")public static <T> void writeListToExcel(List<T> objList, String fileName, Context c) {if (objList != null && objList.size() > 0) {WritableWorkbook writebook = null;InputStream in = null;try {WorkbookSettings setEncode = new WorkbookSettings();setEncode.setEncoding(UTF8_ENCODING);in = new FileInputStream(new File(fileName));Workbook workbook = Workbook.getWorkbook(in);writebook = Workbook.createWorkbook(new File(fileName), workbook);WritableSheet sheet = writebook.getSheet(0);for (int j = 0; j < objList.size(); j++) {ArrayList<Object> list = (ArrayList<Object>) objList.get(j);for (int i = 0; i < list.size(); i++) {if (list.get(i) instanceof String) {sheet.addCell(new Label(i, j + 1, (String) list.get(i), arial12format));} else if (list.get(i) instanceof Integer) {sheet.addCell(new Number(i, j + 1, (Integer) list.get(i), arial12format));} else if (list.get(i) instanceof Double) {sheet.addCell(new Number(i, j + 1, (Double) list.get(i), arial12format));} else if (list.get(i) instanceof Date) {WritableCellFormat dateCellFormat = new WritableCellFormat(new DateFormat("yyyy/MM/dd HH:mm:ss"));dateCellFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);dateCellFormat.setBackground(Colour.AQUA);sheet.addCell(new DateTime(i, j + 1, (Date) list.get(i), dateCellFormat));} else {WritableHyperlink hyperlink = new WritableHyperlink(i, j, new URL("http://jira.jd.com/browse/"));Label issueLink = new Label(i, j, "http://jira.jd.com/browse/", arial12format);hyperlink.setDescription(issueLink.getContents());sheet.addCell(issueLink);sheet.addHyperlink(hyperlink);}sheet.setColumnView(i, list.get(i).toString().length() + 5); //设置列宽}sheet.setRowView(j + 1, 350); //设置行高}expandColumns(sheet, objList.size());
//                sheet.addCell(new Label(5, 6, "hello", arial14format));//在第7行第6列添加一个hellowritebook.write();Toast.makeText(c, "Success", Toast.LENGTH_SHORT).show();} catch (Exception e) {e.printStackTrace();} finally {if (writebook != null) {try {writebook.close();} catch (Exception e) {e.printStackTrace();}}if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}}/**** 根据内容调整 列的宽度* @param sheet* @param columnSize*/private static void expandColumns(WritableSheet sheet, int columnSize) {for (int i = 0; i < columnSize; i++) {CellView cellView = sheet.getColumnView(i);cellView.setAutosize(true);sheet.setColumnView(i, cellView);}}public static String getSDPath() {File sdDir = null;boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);if (sdCardExist) {sdDir = Environment.getExternalStorageDirectory();}String dir = sdDir.toString();return dir;}public static void makeDir(File dir) {if (!dir.getParentFile().exists()) {makeDir(dir.getParentFile());}dir.mkdir();}}

调用

调用前需要先申请权限,次步骤略过

    /*** 导出excel*/public void exportExcel1() {String[] title = {"观音心咒", "百字明", "顶礼", "35佛"};File file = new File(ExcelUtil.getSDPath() + "/bluetooth");ExcelUtil.makeDir(file);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date());//Calendar.getInstance().toString();String fileName = file.toString() + "/" + "20240614" + "-" + time + "修行量.xls";ExcelUtil.initExcel(fileName, title);ExcelUtil.writeListToExcel(getObjData(), fileName, this);}private ArrayList<ArrayList<Object>> getObjData() {ArrayList<ArrayList<Object>> recordList = new ArrayList<>();for (int i = 0; i < 30; i++) {ArrayList<Object> beanList = new ArrayList<>();beanList.add("里 " + i);beanList.add(i + " 外");beanList.add(30 * i);beanList.add(12.23 * i);beanList.add(new Date());beanList.add(1f);recordList.add(beanList);}return recordList;}

注意:这个工具类是输出excel的,读取的excel不能是xlsx格式,需要自己转换后才能读。

参考链接

JExcel API使用笔记

java 读取数据库数据生成excel文件

Android Jxl读写Excel

Jxl 包下载

Java Excel API

2.6.10 API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++ | 重载运算符】一文弄懂C++运算符重载,怎样声明、定义运算符,重载为友元函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-21 2…

银河麒麟V10安装docker和docker-compose

1. 说明 系统镜像使用的是Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso如果是在VMware中安装这个系统&#xff0c;需选择Ubuntu&#xff0c;如果选Centos会有问题。 尝试使用在线方式安装docker&#xff0c;报了很多错误&#xff0c;比较麻烦&#xff0c;建议使用离…

slam移动机器人预测n秒后的里程数据

slam移动机器人预测n秒后的里程数据 为了实现这个功能,需要完成以下几个步骤: 订阅/odom话题并获取当前和上一时刻的里程计数据。计算两次里程计数据之间的位置和角度的偏移量。计算时间间隔dt。使用运动模型计算当前的速度vx, vy, vth。预测3秒后的位置和角度。将预测的位置…

C/C++ 简单的输入输出测试用例

在实际开发中经常会遇到简单调试接口的场景,需要从键盘输入一个字符,响应相应操作,整体逻辑就是 1.获取键盘输入 2.执行操作 3.再次等待获取键盘输入 虽然上述步骤极其容易但是总归是需要时间去拉一个demo,下面给出demo 用例,便于大家修改测试 #include <iostream>…

Flask中获取HTTPS请求的代理IP的原始IP地址

在Flask中获取HTTPS请求的代理IP的原始IP地址&#xff0c;你可以使用X-Forwarded-For HTTP头。这个头可能包含多个IP地址&#xff0c;其中第一个通常是原始的客户端IP。 以下是一个Flask示例代码&#xff0c;展示了如何获取原始的客户端IP地址&#xff1a; from flask import…

生成式AI和LLM如何应用

承认自己是普通人&#xff0c;我们只要会用就行了。 没有Machine Learning&#xff0c;也没有Deep Learning&#xff0c;让95%的普通码农都会用大模型&#xff0c;至于底层原理&#xff0c;就让那5%的精英去学吧。 这是“Generative AI with Large Language Models”课程的学…

xss初识(xss-lab)

XSS跨站脚本 XSS漏洞概述 XSS被称为跨站脚本攻击&#xff08;Cross-site scripting&#xff09;&#xff0c;由于和CSS&#xff08;Cascading Style Sheets&#xff09; 重名&#xff0c;所以改为XSS。 XSS主要基于javascript语言完成恶意的攻击行为&#xff0c;因为javascri…

前端代码打包教程

一、 首先解压并进入源码包中&#xff0c;源码文件是下载的完整版安装包的 view/ 目录下,平台后台是 admin.zip ,商户后台是 mer.zip , H5/公众号/小程序是 uniapp.zip ,2.0级以上版本还有客服的源码包&#xff1b; 二、 打包&#xff0c;移动端和后台的打包方式不同 平台后台…

PyTorch(一)模型训练过程

PyTorch&#xff08;一&#xff09;模型训练过程 #c 总结 实践总结 该实践从「数据处理」开始到最后利用训练好的「模型」预测&#xff0c;感受到了整个模型的训练过程。其中也有部分知识点&#xff0c;例如定义神经网络&#xff0c;只是初步的模仿&#xff0c;有一个比较浅的…

力扣456.132模式

力扣456.132模式 单调栈 维护单调递减的栈用k维护‘2’&#xff0c;每次出栈就更新**&#xff08;保证栈中元素始终大于k&#xff09;**当出现nums[i] < k时 说明存在‘1’又因为栈中存在‘3’因此就存在132模式序列 class Solution {public:bool find132pattern(vector&…

C语言C99标准、C11标准新增加的特性

C语言标准 C语言从其诞生至今&#xff0c;经历了多个标准的更新&#xff0c;主要标准包括&#xff1a; C89/C90 (ANSI C / ISO/IEC 9899:1990)&#xff1a;这是C语言的第一个官方标准&#xff0c;由ANSI于1989年发布&#xff0c;后被ISO采纳为国际标准&#xff0c;发布于1990年…

echarts+vue2实战(一)

目录 一、项目准备 二、(横向分页)柱状图 2.1、动态刷新 2.2、UI调整 2.3、分辨率适配 三、(竖向平移)柱状图 3.1、平移动画 3.2、不同数值显示不同颜色 四、(下拉切换)折线图 4.1、切换图表和分辨率适配 4.2、UI调整 五、(三级分类)饼图 5.1、数据切换 六、圆环…

使用Tkinter创建带查找功能的文本编辑器

使用Tkinter创建带查找功能的文本编辑器 介绍效果代码解析创建主窗口添加菜单栏实现文件操作实现查找 完整代码 介绍 在这篇博客中&#xff0c;我将分享如何使用Python的Tkinter库创建一个带有查找功能的简单文本编辑器。 效果 代码解析 创建主窗口 import tkinter as tkcl…

Offset Explorer 连接SASL PLAIN鉴权的Kafka

1、填写Kafka信息 2、配置鉴权信息 Security 选择 SASL PLAINTEXT JAAS Config 配置账号密码 org.apache.kafka.common.security.plain.PlainLoginModule required username"账号"password"密码";

[Vulnhub] Troll FTP匿名登录+定时任务权限提升

信息收集 IP AddressPorts Opening192.168.8.104TCP:21,22,80 $ nmap -sC -sV 192.168.8.104 -p- --min-rate 1000 Nmap scan report for 192.168.8.104 (192.168.8.104) Host is up (0.0042s latency). Not shown: 65532 closed tcp ports (conn-refused) PORT STATE SER…

openh264 宏块级码率控制源码分析

openh264 宏块级码率控制函数关系 宏块级核心函数分析 WelsRcMbInitGom函数 功能&#xff1a;openh264 码率控制框架中宏块级码率控制函数&#xff0c;根据是否启用GOM QP来决定如何设置宏块的QP值&#xff0c;以控制编码的质量和比特率。原理过程&#xff1a; 函数参数&…

“打造智能售货机系统,基于ruoyi微服务版本开源项目“

目录 # 开篇 售货机术语 1. 表设计说明 2. 页面展示 2.1 区域管理页面 2.2 合作商管理页面 2.3 点位管理页面 3. 建表资源 3.1 创建表的 SQL 语句&#xff08;包含字段备注&#xff09; 1. Region 表 2. Node 表 3. Partner 表 4. 创建 tb_vending_machine 表的 S…

学习java第一百零六天

Spring的后置处理器 BeanPostProcessor&#xff1a;Bean的后置处理器&#xff0c;主要在bean初始化前后工作。 InstantiationAwareBeanPostProcessor&#xff1a;继承于BeanPostProcessor&#xff0c;主要在实例化bean前后工作&#xff1b; AOP创建代理对象就是通过该接口实现…

用LangChain调用Ollama的时候一个小问题

说来让人无语&#xff0c;简单记录一下。安装好Ollama后&#xff0c;我们通常通过访问http://127.0.0.1:11434来测试其是否正常&#xff0c;通常会出来“Ollama is running”&#xff0c;然后我习惯性地从Chrome把地址拷贝到VS Code&#xff0c; oembed OllamaEmbeddings(bas…

【启明智显产品介绍】Model3C工业级HMI芯片详解专题(一)芯片性能

【启明智显产品介绍】工业级HMI芯片Model3C详解&#xff08;一&#xff09;芯片性能 Model3C 是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU&#xff0c;配置平头哥E907&#xff0c;主频400MHz&#xff0c;强大的 2D 图形加速处理器、PNG/JPEG 解码引擎…