JXL开发Excel文档中文教程

作者:小菜 更新时间:2025-04-29 点击数:
简介:Excel开发文档1 开发调研1.1 需求描述MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。

作为办公文档,势必要涉及到的电

【菜科解读】

Excel开发文档1 开发调研1.1 需求描述MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。

作为办公文档,势必要涉及到的电子文档的交换,Excel是一种在企业中非常通用的文件格式,打印和管理也比较方便。

在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。

1.2 Excel开发常用开源工具在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。

1.3 比较开源工具的优缺点1.3.1 Jxl优缺点Jxl特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体、数字、日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。

最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。

另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

1.3.2 Poi优缺点Jakarta 的 POI Project 与 Java Excel API 在开源世界中可以说是并驾齐驱,但是也各有优劣,poi在某些细节有些小Bug并且不支持写入图片(poi其实可以写入图片,不过没有jxl来的方便,比较麻烦),其他方面都挺不错的;而JXL提供了对图片的支持(但是仅仅支持png格式的图片),问题就是对公式支持不是很好,但还是提供了简单的公式读取支持。

因此你的项目中要选用什么样的第三方插件为完全由你的应用来决定。

如果你的软件是跟财务有相当的关系的话,建议采用 POI Project,就我所在目前的项目来说由于用不到计算公式,而且很可能需要导出图片,因此,我的选择是 JXL 。

1.4 性能比较以及最终选择1.4.1 内存消耗:(来自网络)谈下JVM虚拟机内存消耗的情况.数据量3000条数据,每条60列.JVM虚拟机内存大小64M.使用POI:运行到2800条左右就报内存溢出.使用JXL:3000条全部出来,并且内存还有21M的空间.可想而知,在对内存的消耗方面差距还是挺大的.也许是由于JXL在对资源回收利用方面做的还挺不错的。

1.4.2 速度效率(读取excel数据)(来自网络)文件 POI加载耗时 POI总耗时 JXL加载耗时 Jxl总耗时 文件大小57KB 1172 ms 1172 ms 1265 ms 2250 ms 文件大小652KB 2297 ms 2313 ms 4406 ms 9750 ms 文件大小2.24M 3109ms 3140ms 16313ms 37453ms1.4.3 写excel速度效率jxl插入数据比poi速度要快1.4.4 功能对比相比提供的功能的话,JXL相对弱了点.所以如果要实现的功能比较复杂的情况下可以考虑使用POI,但如果只想生成一些大数据量可以考虑使用JXL,或者CSV也是一个不错的选择,不过CSV并不是真正的excel,然而jxl插入数据比poi速度要快。

2 Jxl开发指南2.1 介绍jxl操作excel包括对象Workbook,Sheet ,Cell。

一个excel就对应一个Workbook对象,一个Workbook可以有多个Sheet对象一个Sheet对象可以有多个Cell对象2.2 读取excel操作通过Workbook,Sheet ,Cell这三个对象我们就可以实现Excel文件的读取工作。

我们先想想一下读取步骤,不管是什么样的Excel操作框架必定都要经历1、 选取Excel文件得到工作薄2、 选择工作表3、 选择Cell4、 读取信息2.2.1 读取工作薄选取Excel文件得到工作薄WorkbookWorkbook workbook = Workbook.getWorkbook(new File("myfile.xls"));2.2.2 读取工作表通过Workbook的getSheet方法选择第一个工作表(从0开始)Sheet sheet = workbook.getSheet(0);也可以通过工作的名称来得到Sheet2.2.3 读取单元格通过Sheet的getCell方法选择位置为C2的单元格(两个参数都从0开始)Cell c2 = sheet.getCell(2,1);2.2.3.1 读取单元格的值2.2.3.2 通过Cell的getContents方法把单元格中的信息以字符的形式读取出来String stringc2 = c2.getContents();2.2.3.3 Cell提供了一个getType方法能够返回单元格的类型信息,同时JXL提供了一个CellType类用来预设Excel中的类型信息,而且JXL提供了一些Cell类的子类用来分别用来表示各种类型的单元格,如LabelCell,NumberCell,DateCell分别表示字符、数值、日期类型的单元格if (c2.getType() == CellType. LABEL) { LabelCell nc = (LabelCell) c2; String number b2 = nc. getString();}if (c2.getType() == CellType. DATE) { DateCell nc = (DateCell) c2; Date number b2 = nc. getDate();}if (c2.getType() == CellType.NUMBER) { NumberCell nc = (NumberCell) c2; double number b2 = nc.getValue();}API提供了以下基本类型,与Excel的数据格式相对应,如下图所示2.2.4 以释放资源:workbook.close()当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要最后不要忘记关闭workbook以释放资源:workbook.close();2.3 写excel操作通过WritableWorkbook,WritableSheet,Label这三个对象我们就可以实现Excel文件的插入工作。

我们先想想一下插入,不管是什么样的Excel操作框架必定都要经历1、 创建Exce工作薄2、 创建工作表3、 创建单元格2.3.1 创建工作薄API提供了两种方式来处理可写入的输出流,一种是直接生成本地文件,如果文件名不带全路径的话,缺省的文件会定位在当前目录,如果文件名带有全路径的话,则生成的Excel文件则会定位在相应的目录;另外一种是将Excel对象直接写入到输出流,例如:用户通过浏览器来访问web服务器,如果HTTP头设置正确的话,浏览器自动调用客户端的Excel应用程序,来显示动态生成的Excel电子表格。

2.3.1.1 创建可写入的Excel工作薄WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));2.3.1.2 将WritableWorkbook直接写入到输出流OutputStream os = new FileOutputStream(targetfile);WritableWorkbook wwb = Workbook.createWorkbook(os);2.3.2 创建工作表WritableSheet ws = wwb.createSheet("通讯录", 0);//创建sheet2.3.3 创建单元格2.3.3.1 添加文本类单元格Label labelC = new Label(0, 0, "This is a Label cell");2.3.3.2 添加带有字型Formatting的对象WritableFont wf = new WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);WritableCellFormat wcfF = new WritableCellFormat(wf);labelCF = new Label(1, 0, "This is a Label Cell", wcfF);ws.addCell(labelCF);2.3.3.3 添加带有字体颜色Formatting的对象WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);WritableCellFormat wcfFC = new WritableCellFormat(wfc);Label labelCFC = new Label(1, 0, "This is a Label Cell", wcfFC);ws.addCell(labelCF);2.3.3.4 添加Number对象Number labelN = new jxl.write.Number(0, 1, 3.1415926);ws.addCell(labelN);2.3.3.5 添加带有formatting的Number对象NumberFormat nf = new NumberFormat("#.##");WritableCellFormat wcfN = new WritableCellFormat(nf);Number labelNF = new Number(1, 1, 3.1415926, wcfN);ws.addCell(labelNF);2.3.3.6 添加Boolean对象Boolean labelB = new jxl.write.Boolean(0, 2, false);ws.addCell(labelB);2.3.3.7 添加DateTime对象DateTime labelDT = new DateTime(0, 3, new java.util.Date());ws.addCell(labelDT);2.3.3.8 添加带有formatting的DateFormat对象DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");WritableCellFormat wcfDF = new WritableCellFormat(df);DateTime labelDTF = new DateTime(1, 3, new Date(), wcfDF);ws.addCell(labelDTF);2.3.3.9 添加公式单元格Fornual formual = new Formual(0,11,”Sum(A1:A9)”);wrb.addCell(formual);2.3.3.10 添加图像WritableImage wrimage=new WritableImage(1,5,10,10,new File(imageFilepath));wrb.addImage(wrimage); 注意,API中注明只支持png文件。

2.3.4 合并单元格通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的。

表示将从第x+1列,y+1行到m+1列,n+1行合并 (四个点定义了两个坐标,左上角和右下角)结果是合并了m-x+1行,n-y+1列,两者乘积就是合并的单元格数量。

sheet.mergeCells(0, 6, 3, 8);label = new Label(0, 6, "合并了12个单元格");sheet.addCell(label);2.3.5 添加单元格样式主要是改变单元格背景、字体、颜色等等。

WritableCellFormat wc = new WritableCellFormat();wc.setAlignment(Alignment.CENTRE); // 设置居中wc.setBorder(Border.ALL, BorderLineStyle.THIN); // 设置边框线wc.setBackground(jxl.format.Colour.RED); // 设置单元格的背景颜色label = new Label(1, 5, "字体", wc);sheet.addCell(label);2.3.6 设置单元格字体WritableFont wfont = new WritableFont(WritableFont.createFont("楷书"), 20);WritableCellFormat font = new WritableCellFormat(wfont);label = new Label(2, 6, "楷书", font);sheet.addCell(label);2.3.7 写入到文件wwb.write();// 写入数据wwb.close();// 关闭文件2.4 拷贝、更新Excel工作薄//创建只读的Excel工作薄的对象jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));//创建可写入的Excel工作薄对象WritableWorkbook wwb=Workbook.createWorkbook(new File(targetfile), rw);//读取第一张工作表jxl.write.WritableSheet ws = wwb.getSheet(0);//获得第一个单元格对象jxl.write.WritableCell wc = ws.getWritableCell(0, 0);//判断单元格的类型, 做出相应的转化if(wc.getType() == CellType.LABEL){Label l = (Label)wc;l.setString("The value has been modified.");}//写入Excel对象wwb.write();//关闭可写入的Excel对象wwb.close();//关闭只读的Excel对象rw.close();为了提高性能,在读取工作表时,与数据相关的一些输出信息,所有的格式信息,如:字体、颜色等等,是不被处理的,因为我们的目的是获得行数据的值,既使没有了修饰,也不会对行数据的值产生什么影响。

唯一的不利之处就是,在内存中会同时保存两个同样的工作表,这样当工作表体积比较大时,会占用相当大的内存,但现在好像内存的大小并不是什么关键因素了。

一旦获得了可写入的工作表对象,我们就可以对单元格对象进行更新的操作了,在这里我们不必调用API提供的add()方法,因为单元格已经于工作表当中,所以我们只需要调用相应的setXXX()方法,就可以完成更新的操作了。

尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,以使单元格的内容以不同的形式表现。

新生成的工作表对象是可写入的,我们除了更新原有的单元格外,还可以添加新的单元格到工作表中。

最后,不要忘记调用write()方法,将更新的内容写入到文件中,然后关闭工作薄对象,这里有两个工作薄对象要关闭,一个是只读的,另外一个是可写入的。

3 JXL读写excel文件的例子 (来自网络)3.1 实例一 import java.io.FileOutputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import jxl.*; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.CellFormat; import jxl.write.Boolean; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class JXLExample { /** * * @author smart * */ public static void main(String[] args) { // 准备设置excel工作表的标题 String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"}; try { // 获得开始时间 long start = System.currentTimeMillis(); // 输出的excel的路径 String filePath = "c:\\test.xls"; // 创建Excel工作薄 WritableWorkbook wwb; // 新建立一个jxl文件,即在C盘下生成test.xls OutputStream os = new FileOutputStream(filePath); wwb=Workbook.createWorkbook(os); // 添加第一个工作表并设置第一个Sheet的名字 WritableSheet sheet = wwb.createSheet("产品清单", 0); Label label; for(int i=0;i JXL,开发,Excel,文档,中文,教程,Excel,开发

数据丢失后在Excel图中还原数据的全流程解析

在数字化时代的今天,Excel作为数据管理和分析工具的重要性不言而喻。

但是在处理庞大的数据文件时,意外丢失或篡改数据的情况时有发生。

此时,在Excel图表中还原数据成为许多人关注的问题。

本文将通过详尽的流程解析,帮助读者理解如何高效地在Excel中还原丢失的数据。

工具原料:系统版本:Windows 11品牌型号:Microsoft Surface Laptop 5软件版本:Microsoft Office 365 (2023)一、数据丢失的原因与预防1、数据丢失可能源于多种原因,包括系统崩溃、不当操作、文件损坏或者是软件故障等。

因此,理解数据丢失的原因是制定合理恢复策略的第一步。

2、预防措施是数据管理中不可或缺的一部分。

例如,定期备份文件、使用可靠的存储媒介,如云端存储(OneDrive)等,均能有效降低数据丢失的风险。

二、还原数据的基础步骤1、在Excel中还原数据可以通过“撤销操作”功能轻松完成。

通常情况下,按Ctrl+Z组合键,可以撤回最近的操作。

2、如果由于意外关闭程序的原因导致数据丢失,重启Excel后,系统会提示自动恢复未保存的文件。

使用文件恢复功能读取自动保存的文件,用户能够找回大部分数据。

3、若文件已损坏,可以使用内置的“打开并修复”功能。

选中待修复文件,点击“打开”菜单中的“打开并修复”按钮,Office将尽力修复文件并恢复内容。

三、通过图表还原数据1、当原始数据丢失时,我们可以通过Excel图表的可视化特性反推表格中的数据。

右键单击图表,选择“选择数据”,我们可以查看系列值、横纵坐标等信息。

2、借助这些信息,配合之前的某些记录或备份,逐步将散失的数据以表格形式回溯。

尽管重建的数据不一定100%准确,却能够为后续的精确数据恢复提供重要参考。

3、特别是在具有时间标记的数据图表中,通过观察趋势和波动,我们还能更好地定位具体的数据点,推断相关参数,帮助恢复丢失的数据。

内容延伸:1、为了更好地维护Excel文件数据,用户可以学习如何编写简单的VBA宏程序,定期自动备份重要文件。

这不仅能有效避免数据丢失,还能提升数据处理的效率。

2、应用数据管理软件,如Microsoft Power BI,与Excel联动,进一步增强数据分析能力,并提供更多的备份和恢复选项。

3、了解Excel中数据分析和管理背后的基本原理,以及相关的计算方法,有助于提高数据恢复的准确性。

总结:Excel作为数据管理的重要工具,其数据丢失后的恢复是一项重要技能。

通过本文的解析,我们展示了Excel恢复数据的多种方法,包括撤销操作、自动恢复以及通过图表反推数据等。

同时,为了更全面保障数据安全,建议定期备份,并善用数据分析工具。

面对未来潜在的数据危机,这些技能将帮助用户有效应对,实现数据的安全与可靠。

Excel函数VLOOKUP的使用技巧大全

Excel函数VLOOKUP是一种非常常用的函数,它可以帮助我们在Excel中进行数据查找和匹配。

掌握VLOOKUP的使用技巧,可以提高我们的工作效率和数据处理能力。

本文将介绍一些VLOOKUP的使用技巧,帮助读者更好地利用这个函数。

工具原料:电脑品牌型号:戴尔XPS 13操作系统版本:Windows 10Excel软件版本:Microsoft Excel 2019一、VLOOKUP函数的基本用法1、VLOOKUP函数的语法和参数说明2、如何正确使用VLOOKUP函数进行数据查找3、VLOOKUP函数的常见错误和解决方法二、VLOOKUP函数的高级用法1、使用VLOOKUP函数进行数据匹配和筛选2、如何在VLOOKUP函数中使用通配符进行模糊查找3、利用VLOOKUP函数进行数据透视表的构建三、VLOOKUP函数与其他函数的结合应用1、VLOOKUP函数与IF函数的联合使用2、VLOOKUP函数与INDEX-MATCH函数的替代应用3、利用VLOOKUP函数进行数据分析和报表生成四、VLOOKUP函数在PDF格式转换中的应用1、使用VLOOKUP函数将Excel数据转换为PDF格式2、介绍小白PDF转换软件的使用方法3、VLOOKUP函数在PDF转换中的注意事项和技巧

加入收藏
               

JXL开发Excel文档中文教程

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录