在上一个博客中,我们介绍了使用Apache开源项目POI将数据导出到excel报告的知识. 实际上,在Java世界中,有两套成熟的开源工具支持Excel文件的操作: 一种是ApachePOI;另一种是ApachePOI. 另一个是本文将介绍的JavaExcelAPI. ApachePOI是Apache Software Foundation的开源库. POI为Java程序提供API,以读取/写入Microsoft Office格式的文件. 该项目分为几个组件,包括HSSF组件,这是一个非常正式且严格的API. 使用HSSF,您可以使用纯Java代码读取,写入和修改Excel文件. JavaExcelAPI(JXL),这是一组完全用Java开发的Excel表操作组件. 使用它,即使在非Windows操作系统下,程序员也可以通过纯Java应用程序创建Excel文件,并且可以在Excel中进行读写,更新内容,因此,基于JXL可以实现在中导入和导出数据的操作. 与POI相比,JXL的内存占用更少,并且对中文的支持更好,因此在本文中,我们将研究基于JXL的数据导入和导出方法. 顺便介绍一下jxl和POI之间的区别. 实际上,原则上,个人认为这两种方法非常相似,甚至代码也非常相似. 让我们看一下简单的操作步骤.
jxl下载地址:
基本步骤:
1. 创建工作簿
WritableWorkbookbook = Workbook.createWorkbook(newFile(“ Test.xls”));
2. 生成一个名为“第一页”的工作表,参数0表示这是第一页
WritableSheetsheet = book.createSheet(“第一页”,0);
3. 创建一个单元格. 在Label对象的构造方法中,指示单元格位置为第一列和第一行(0,0),单元格内容为test
Labellabel = newLabel(0,0,“ test”);
4. 将定义的单元格添加到工作表中
sheet.addCell(标签);
Jxl提供了一个专门创建的数字类型单元格. 要生成数字存储单元,必须使用数字的完整打包路径. 否则,语法有歧义的单元格的位置是第二列,第一行,值是123.123 * /
jxl.write.Numbernumber = newjxl.write.Number(1,0,123.123); sheet.addCell(number);

5. 写入数据并关闭文件
book.write();
book.close();
有关Excle的一些操作:
1,字符串格式
字符串的格式涉及诸如字体,粗细和大小之类的元素. 这些功能主要由WritableFont和
组成
WritableCellFormat类负责. 假设我们在生成包含字符串的单元格时使用以下语句,
为便于描述,我们在每行命令中都添加了数字:
WritableFont font1 = new WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ① WritableCellFormat format1 = new WritableCellFormat(font1); ② Label label = new Label( 0 , 0 ,”data 4 test”,format1) ③
其中①指定字符串格式: 字体为TIMES,字体大小为16,加粗显示. WritableFont非常有钱
在不同情况下使用的构造函数. jExcelAPI的java-doc中有一个详细列表jxl 合并单元格,在此不再列出.
②此处的代码使用WritableCellFormat类,该类非常重要,通过它可以指定各种单元格

属性,以下单元格格式将有更多描述.
③Label类构造函数用于指定字符串的格式.
在WritableCellFormat类中,还有另一个非常重要的方法是指定数据对齐方式,例如对于我们来说
可以指定以上示例:
//将水平对齐方式指定为中心
format1.setAlignment(jxl.format.Alignment.CENTRE);
//将垂直对齐方式指定为中心
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
2. 单元格操作
Excel的一个非常重要的部分是单元格的操作jxl 合并单元格,例如行高,列宽,单元格合并等. 幸运的是,jExcelAPI
提供了这些支持. 这些操作相对简单. 下面仅介绍相关的API.
1),合并单元格
WritableSheet.mergeCells(intm,intn,intp,intq);

//该功能是合并从(m,n)到(p,q)的所有单元格,例如:
WritableSheetsheet = book.createSheet(“第一页”,0);
//将第一列第一行中的所有单元格合并到第六列第一行中
sheet.mergeCells(0,0,5,0);
合并可以是水平的也可以是垂直的. 合并的单元格无法再次合并,否则将触发异常.
2),行高和列宽
WritableSheet.setRowView(inti,intheight);
//该功能用于指定i + 1行的高度,例如:
//将第一行的高度设置为200
sheet.setRowView(0,200);
WritableSheet.setColumnView(int,intwidth);
//的作用是指定第i + 1列的宽度,例如:
//将第一列的宽度设置为30

sheet.setColumnView(0,30);
jxl还具有其他功能,例如插入图片等,这里我不会一一介绍,读者可以自己探索.
POI和jxl之间的区别:
JVM虚拟机的内存消耗.
数据量为3000条数据,每条有60列. JVM虚拟机的内存大小为64M.
使用POI: 当其运行到大约2800时,它将报告内存溢出.
使用JXL: 总共有3000项存储,而内存仍然有21M的空间.
可以想象,内存消耗的差距仍然很大.
也许是因为JXL在资源回收方面做得很好.
从提供的功能来看
JXL相对较弱. 它不提供像POI这样复杂的功能,例如添加图片. 因此,如果要实现的功能比较复杂,则可以考虑使用POI
最后看一个小例子:
import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class DateToExcel { private String driverClass = "com.mysql.jdbc.Driver"; private String url = "jdbc:MySQL://localhost/boutiquecourse"; private String user = "root"; private String password = ""; private Connection connection; public void exportCla***oom(OutputStream os) { try { WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件 WritableSheet wsheet = wbook.createSheet("测试转换", 0); // 工作表名称 //设置Excel字体 WritableFont wfont = new WritableFont(WritableFont.ARIAL, 16, WritableFont.BOLD, false, jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK); WritableCellFormat titleFormat = new WritableCellFormat(wfont); String[] title = { "测试编号", "测试名称"};//如果还有字段的话,以此类推 // 设置Excel表头 for (int i = 0; i < title.length; i++) { Label excelTitle = new Label(i, 0, title[i], titleFormat); wsheet.addCell(excelTitle); } int c = 1; // 用于循环时Excel的行号 Connection con = openConnection(); Statement st = con.createStatement(); String sql = "select * from test"; ResultSet rs = st.executeQuery(sql); // 这个是从中取得要导出的数据 while (rs.next()) { Label content1 = new Label(0, c, (String) rs.getString("testid")); Label content2 = new Label(1, c, (String) rs.getString("testname")); //如果还有的话,以此类推 wsheet.addCell(content1); wsheet.addCell(content2); //如果还有的话,以此类推 c++; } wbook.write(); // 写入文件 wbook.close(); os.close(); System.out.println("导入成功!"); } catch (Exception e) { e.printStackTrace(); } } public Connection openConnection() throws SQLException { try { Class.forName(driverClass).newInstance(); connection = DriverManager.getConnection(url, user, password); return connection; } catch (Exception e) { throw new SQLException(e.getMessage()); } } public void closeConnection() { try { if (connection != null) connection.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { DateToExcel te = new DateToExcel(); File f = new File("D:/kk.xls"); //File f = new File("D:\\kk.xls"); try { f.createNewFile(); OutputStream os = new FileOutputStream(f); te.exportCla***oom(os); } catch (Exception e) { e.printStackTrace(); } } }
参考: 百度百科: jxl.jar
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-221387-1.html
伊拉克再听美国猪的话
渠道管理