WritableWorkbook 详细用例 (转)
原文出处:http://lz881228.blog.163.com/blog/static/114197324201341755951817/
java 操作 Excel 最常用的就是JXL(java excel api)和POI,今先看下JXL吧。首先可以到http://www.andykhan.com/jexcelapi/download.html 下载最新的jxl.jar,里面有它的jar包和API,内有一个小例子,可以参考一下。
JXL 用起来挺简单的,不过相应的其功能也并不是十分强大,对于一般的简单的excel操作还可以,对于太复杂的还是有些吃力,基本的操作也就是以下几项内容。
首先,要创建一个可读写的工作簿(WritableWorkbook):
1 WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test.xls"));
如果是想要修改一个已存在的excel工作簿,则需要先获得它的原始工作簿,再创建一个可读写的副本:
1 Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档 2 WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本
然后,取得我们要操作的sheet,并对其进行相应的操作,如改名、合并单元格、设置列宽、行高等:
1 WritableSheet sheet = workbook.getSheet(0); 2 sheet.setName("修改后"); // 给sheet页改名 3 workbook.removeSheet(2); // 移除多余的标签页 4 workbook.removeSheet(3); 5 6 sheet.mergeCells(0, 0, 4, 0); // 合并单元格 7 sheet.setRowView(0, 600); // 设置行的高度 8 sheet.setColumnView(0, 30); // 设置列的宽度 9 sheet.setColumnView(1, 20); // 设置列的宽度
之后,就是对单元格的操作了,可以通过如下方法获取一个单元格,其中两个参数分别为列、行的位置,从0开始计数,如(2,3)就代表单元格C4:
1 WritableCell cell = sheet.getWritableCell(2,3);
通过WritableFont、WritableCellFormat等对象可以设置单元格的字体、样式等外观:
1 WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体 2 20,//WritableFont.DEFAULT_POINT_SIZE, // 字号 3 WritableFont.NO_BOLD, // 粗体 4 false, // 斜体 5 UnderlineStyle.NO_UNDERLINE, // 下划线 6 Colour.BLUE2, // 字体颜色 7 ScriptStyle.NORMAL_SCRIPT); 8 WritableCellFormat wcf = new WritableCellFormat(titleWf); 9 wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色 10 wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式 11 wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框 12 cell.setCellFormat(wcf);
在jxl中,有几种常用的数据类型,根据单元格内数据类型的不同,每个WritableCell可以根据其类型被转换为它的一个子类型,以便对不同类型的数据进行专门的处理,通常可以做这样的转换:
1 WritableCell fromCell = sheet0.getWritableCell(j, i); 2 3 if (fromCell instanceof jxl.write.Number) { 4 jxl.write.Number num = (jxl.write.Number) fromCell; 5 } else if (fromCell instanceof jxl.write.Boolean) { 6 jxl.write.Boolean bool = (jxl.write.Boolean) fromCell; 7 } else if (fromCell instanceof jxl.write.DateTime) { 8 jxl.write.DateTime dt = (jxl.write.DateTime) fromCell; 9 } else if(fromCell instanceof Label){ 10 Label _label = (Label) fromCell; 11 }
当然,操作完成之后一定不要忘了刷新(或者叫写入?)和关掉工作簿:
1 workbook.write(); 2 workbook.close();
下面是参考jxl api里那个例子写的,把我自己觉得常用的excel操作基本都包含了:
1 package test; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.net.MalformedURLException; 6 import java.net.URL; 7 import java.util.ArrayList; 8 import java.util.Calendar; 9 import java.util.Date; 10 11 import jxl.CellType; 12 import jxl.Workbook; 13 import jxl.format.Alignment; 14 import jxl.format.Border; 15 import jxl.format.BorderLineStyle; 16 import jxl.format.Colour; 17 import jxl.format.ScriptStyle; 18 import jxl.format.UnderlineStyle; 19 import jxl.format.VerticalAlignment; 20 import jxl.read.biff.BiffException; 21 import jxl.write.Blank; 22 import jxl.write.DateFormat; 23 import jxl.write.DateFormats; 24 import jxl.write.DateTime; 25 import jxl.write.Formula; 26 import jxl.write.Label; 27 import jxl.write.Number; 28 import jxl.write.NumberFormat; 29 import jxl.write.WritableCell; 30 import jxl.write.WritableCellFeatures; 31 import jxl.write.WritableCellFormat; 32 import jxl.write.WritableFont; 33 import jxl.write.WritableHyperlink; 34 import jxl.write.WritableImage; 35 import jxl.write.WritableSheet; 36 import jxl.write.WritableWorkbook; 37 import jxl.write.WriteException; 38 39 /** 40 * 41 * @author why 42 * 43 */ 44 public class ExcelTest { 45 46 /** 47 * @param args 48 * @throws IOException 49 * @throws BiffException 50 * @throws WriteException 51 */ 52 public static void main(String[] args) throws IOException, BiffException, WriteException { 53 Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档 54 WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本 55 56 57 /** 58 * 定义与设置Sheet 59 */ 60 WritableSheet sheet = workbook.getSheet(0); 61 sheet.setName("修改后"); // 给sheet页改名 62 workbook.removeSheet(2); // 移除多余的标签页 63 workbook.removeSheet(3); 64 65 sheet.mergeCells(0, 0, 4, 0); // 合并单元格 66 sheet.setRowView(0, 600); // 设置行的高度 67 sheet.setColumnView(0, 30); // 设置列的宽度 68 sheet.setColumnView(1, 20); // 设置列的宽度 69 70 WritableCell cell = null; 71 WritableCellFormat wcf = null; 72 Label label = null; 73 WritableCellFeatures wcfeatures = null; 74 75 // 更改标题字体 76 cell = sheet.getWritableCell(0,0); 77 WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体 78 20,//WritableFont.DEFAULT_POINT_SIZE, // 字号 79 WritableFont.NO_BOLD, // 粗体 80 false, // 斜体 81 UnderlineStyle.NO_UNDERLINE, // 下划线 82 Colour.BLUE2, // 字体颜色 83 ScriptStyle.NORMAL_SCRIPT); 84 wcf = new WritableCellFormat(titleWf); 85 wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色 86 wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式 87 wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框 88 cell.setCellFormat(wcf); 89 90 // 将B3的字体改为仿宋_GB2312 91 cell = sheet.getWritableCell(1,2); 92 WritableFont fs = new WritableFont(WritableFont.createFont("仿宋_GB2312"), 93 11); 94 wcf = new WritableCellFormat(fs); 95 cell.setCellFormat(wcf); 96 97 // 将B4的字号改为20 98 cell = sheet.getWritableCell(1,3); 99 WritableFont size20 = new WritableFont(WritableFont.createFont("宋体"), 100 20); 101 wcf = new WritableCellFormat(size20); 102 cell.setCellFormat(wcf); 103 104 // 将B5的字体改为加粗 105 cell = sheet.getWritableCell(1,4); 106 WritableFont bold = new WritableFont(WritableFont.createFont("宋体"), 107 11, 108 WritableFont.BOLD); 109 wcf = new WritableCellFormat(bold); 110 cell.setCellFormat(wcf); 111 112 // 将B6的字体改为倾斜 113 cell = sheet.getWritableCell(1,5); 114 WritableFont italic = new WritableFont(WritableFont.createFont("宋体"), 115 11, 116 WritableFont.NO_BOLD, 117 true); 118 wcf = new WritableCellFormat(italic); 119 cell.setCellFormat(wcf); 120 121 // 将B7字体加下划线 122 cell = sheet.getWritableCell(1,6); 123 WritableFont underline = new WritableFont(WritableFont.createFont("宋体"), 124 11, 125 WritableFont.NO_BOLD, 126 false, 127 UnderlineStyle.SINGLE); 128 wcf = new WritableCellFormat(underline); 129 cell.setCellFormat(wcf); 130 131 // 将B8的文字改为“待修改文字-已修改” 132 cell = sheet.getWritableCell(1,7); 133 if (cell.getType() == CellType.LABEL) 134 { 135 Label lc = (Label) cell; 136 lc.setString(lc.getString() + " - 已修改"); 137 } 138 139 // 将B9文字对齐方式改为垂直居中、右对齐 140 cell = sheet.getWritableCell(1,8); 141 WritableFont align = new WritableFont(WritableFont.createFont("宋体"), 142 11); 143 wcf = new WritableCellFormat(align); 144 wcf.setAlignment(Alignment.RIGHT); // 设置为右对齐 145 wcf.setVerticalAlignment(VerticalAlignment.CENTRE); // 设置为垂直居中 146 cell.setCellFormat(wcf); 147 148 // 将E3文字改为自动换行 149 cell = sheet.getWritableCell(4,2); 150 WritableFont justify = new WritableFont(WritableFont.createFont("宋体"), 151 11); 152 wcf = new WritableCellFormat(justify); 153 wcf.setAlignment(Alignment.JUSTIFY); 154 cell.setCellFormat(wcf); 155 156 157 // 将B12的数字有效位数从5位改为7位 158 cell = sheet.getWritableCell(1,11); 159 NumberFormat sevendps = new NumberFormat("#.0000000"); 160 wcf = new WritableCellFormat(sevendps); 161 cell.setCellFormat(wcf); 162 163 // 将B13改为4位科学计数法表示 164 cell = sheet.getWritableCell(1,12); 165 NumberFormat exp4 = new NumberFormat("0.####E0"); 166 wcf = new WritableCellFormat(exp4); 167 cell.setCellFormat(wcf); 168 169 // 将B14改为默认数字表示 170 cell = sheet.getWritableCell(1,13); 171 cell.setCellFormat(WritableWorkbook.NORMAL_STYLE); 172 173 // 将B15数字类型的值17改为22 174 cell = sheet.getWritableCell(1,14); 175 if (cell.getType() == CellType.NUMBER) 176 { 177 Number n = (Number) cell; 178 n.setValue(42); 179 } 180 181 // 将B16的值2.71进行加法运算2.71 + 0.1 182 cell = sheet.getWritableCell(1,15); 183 if (cell.getType() == CellType.NUMBER) 184 { 185 Number n = (Number) cell; 186 n.setValue(n.getValue() + 0.1); 187 } 188 189 // 将B19日期格式改为默认 190 cell = sheet.getWritableCell(1,18); 191 wcf = new WritableCellFormat(DateFormats.FORMAT9); 192 cell.setCellFormat(wcf); 193 194 // 将B20日期格式改为dd MMM yyyy HH:mm:ss 195 cell = sheet.getWritableCell(1,19); 196 DateFormat df = new DateFormat("dd MMM yyyy HH:mm:ss"); 197 wcf = new WritableCellFormat(df); 198 cell.setCellFormat(wcf); 199 200 // 将B21的日期设置为 2011-6-1 11:18:50 201 cell = sheet.getWritableCell(1,20); 202 if (cell.getType() == CellType.DATE) 203 { 204 DateTime dt = (DateTime) cell; 205 Calendar cal = Calendar.getInstance(); 206 cal.set(2011, 5, 1, 11, 18, 50); 207 Date d = cal.getTime(); 208 dt.setDate(d); 209 } 210 211 212 // 将B24文字添加链接http://www.baidu.com 213 WritableHyperlink link = new WritableHyperlink(1, 23, new URL("http://www.baidu.com")); 214 sheet.addHyperlink(link); 215 216 // 更改URL链接 217 WritableHyperlink hyperlinks[] = sheet.getWritableHyperlinks(); 218 for (int i = 0; i < hyperlinks.length; i++) { 219 WritableHyperlink wh = hyperlinks[i]; 220 if (wh.getColumn() == 1 && wh.getRow() == 24) { 221 // 将B25文字链接取消 222 sheet.removeHyperlink(wh,true);//true:保留文字;false:删除文字 223 }else if(wh.getColumn() == 1 && wh.getRow() == 25){ 224 try { 225 // 将B26链接更改为http://wuhongyu.javaeye.com 226 wh.setURL(new URL("http://wuhongyu.javaeye.com")); 227 } catch (MalformedURLException e) { 228 e.printStackTrace(); 229 } 230 } 231 } 232 233 234 // 利用公式取得B29、B30的值 235 Formula f1 = new Formula(1, 28, "SUM(C29:D29)"); 236 sheet.addCell(f1); 237 Formula f2 = new Formula(1, 29, "AVERAGE(C30:G30)"); 238 sheet.addCell(f2); 239 240 // 在B32处添加图片,图片大小占10行3列,只支持png格式 241 File file = new File("d:\\shu05.png"); 242 WritableImage image = new WritableImage(1, 31, 3, 10, file); 243 sheet.addImage(image); 244 245 // 在A44出添加内容"Added drop down validation",并为其添加注释 246 label = new Label(0, 43, "Added drop down validation"); 247 wcfeatures = new WritableCellFeatures(); 248 wcfeatures.setComment("右边列是个下拉列表"); 249 label.setCellFeatures(wcfeatures); 250 sheet.addCell(label); 251 252 // 在B44处添加一个下拉列表并添加注释 253 Blank b = new Blank(1, 43); 254 wcfeatures = new WritableCellFeatures(); 255 ArrayList al = new ArrayList(); 256 al.add("why"); 257 al.add("landor"); 258 al.add("tjm"); 259 wcfeatures.setDataValidationList(al); 260 wcfeatures.setComment("这是一个注释"); 261 b.setCellFeatures(wcfeatures); 262 sheet.addCell(b); 263 264 // 为A46添加注释。 265 // 此处比较麻烦,试了多次发现必须将cell强制类型转换、添加CellFeatures再修改注释才可用,不知有没有更好的办法。 266 cell = sheet.getWritableCell(0,45); 267 wcfeatures = new WritableCellFeatures(); 268 wcfeatures.setComment("这个注释不会被显示,删了这行还不行,MD"); 269 cell.setCellFeatures(wcfeatures); 270 271 label = (Label) cell; 272 // label.setCellFeatures(wcfeatures);// 直接这样写会报一个警告(“注释已存在”),但那个注释仍会被显示。 273 label.addCellFeatures(); 274 label.getWritableCellFeatures().setComment("终于加上注释了,哈哈哈哈"); 275 276 277 // if (cell instanceof Number) { 278 // Number num = (Number) cell; 279 // num.setCellFeatures(wcfeatures); 280 // } else if (cell instanceof jxl.write.Boolean) { 281 // jxl.write.Boolean bool = (jxl.write.Boolean) cell; 282 // bool.setCellFeatures(wcfeatures); 283 // } else if (cell instanceof jxl.write.DateTime) { 284 // jxl.write.DateTime dt = (jxl.write.DateTime) cell; 285 // dt.setCellFeatures(wcfeatures); 286 // } else { 287 // Label _label = (Label) cell; 288 // _label.setCellFeatures(wcfeatures); 289 // } 290 291 workbook.write(); 292 workbook.close(); 293 wb.close(); 294 } 295 296 }
=============================================================================================
xl读取excel和写excel基本类似,只是WritableWorkbook换成了Workbook; WritableSheet换成了 Sheet ;Label 换成了Cell。
1 import java.io.File; 2 import java.io.IOException; 3 import jxl.Cell; 4 import jxl.Sheet; 5 import jxl.Workbook; 6 import jxl.read.biff.BiffException; 7 public class ReadExcel { 8 public static void main(String[] args) { 9 try { 10 //选取指定的excel 11 Workbook workbook = Workbook.getWorkbook(new File("F:\\test.xls")); 12 //选取制定的sheet 13 Sheet sheet = workbook.getSheet(0); 14 //选取指定的cell 15 //遍历循环得到所要的cell值 16 for(int j = 0 ;j<sheet.getRows() ; j++) 17 for(int i = 0 ;i<sheet.getColumns();i++){ 18 Cell cell = sheet.getCell(i,j); 19 //获取该cell的值 20 String var1 = cell.getContents(); 21 //打印输出该值 22 System.out.println(var1); 23 } 24 } catch (BiffException e) { 25 e.printStackTrace(); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 } 30 }
转载于:https://www.cnblogs.com/m3Lee/p/3673826.html
WritableWorkbook 详细用例 (转)相关推荐
- asp程序错误详细说明例表
asp程序错误详细说明例表 字体大小: 大 中 小 来源: CSDN 时间: 2005-2-17 14:23:07 平时写程序的时候出错时的解决方法,不太全,但是一般问题应该都有了,呵呵,欢迎大加添加 ...
- 已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为“名”+空格+“姓”;并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写。(后附详细样例说明)
已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为"名"+空格+"姓":并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写.(后附 ...
- 【操作系统学习笔记 ⑮ 完结篇】——文件管理 [ 文件系统 + 索引文件的详细样例 ]
✅ 操作系统完结篇 文章目录 一.导语 二.文件系统的基础知识点 2.2 文件.记录和数据项 2.3 文件类型 2.4 文件系统模型 三.文件的逻辑结构与存取方法 3.1 文件的逻辑结构 3.2 文件 ...
- 【JavaScript】JavaScript Date 对象常用方法大全,例如:getDate、getDay、getFullYear、getHours等(包括作用、语法、参数解析、详细用例)
JavaScript Date常用方法 1.getDate() 方法 2.getDay() 方法 3.getFullYear() 方法 4.getHours() 方法 5.getMillisecond ...
- 【操作系统⑪】——存储管理(上)【分区存储管理 分页存储管理+详细样例】
☕️ 重点篇+1 文章目录 一.存储管理中的概念与概述 1.1 金字塔体系 1.2 存储管理的目的和功能 1.3 存储分配的方式 1.4 地址重定位 二.分区存储管理 2.1 固定分区(已过时了,但还 ...
- 测试场景组件化轮子——用例元
背景介绍 当今的移动端测试已经进入白热化阶段,各种测试维度.方法.工具化.效率化遍地开花,同时对于测试工程师的要求越来越高,需要做的就是不断创造新的测试场景,并将场景自动化,实现高效迭代,周而复始,一 ...
- 敏捷脑图用例实践之路
原文在infoq已经发布,可以直接阅读:http://www.infoq.com/cn/articles/road-of-agile-mind-map-practice/ 传统的黑盒测试用例比较繁杂, ...
- 「干货」Snort使用手册「详细版」
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 0x01 前言 1.1 IDS是什么? IDS(intrus ...
- 软件工程专业期末项目开发全流程模拟日志《用例说明文档》
引言 需求获取阶段的第二篇文档:用例说明文档,站在使用者的角度去思考软件应该如何实现,帮助开发者理清思路,明确要实现的功能模块.用例说明文档的作用就像是把一个模糊的用户需求概念更进一步的抽象,在面向对 ...
- 软件需求用例如何写?
需求是软件设计的一个最最重要的一个部分也是整个软件开发和后期维护的一个重要的基石.试问,开发出来的一款软件,根本不是客户或者是用户所需要的,那么,后果是可想而知的,轻者用户不付款,重者影响到整个公司的 ...
最新文章
- Android Studio内存优化
- ubuntu 编译内核并更换
- oracle 调优3
- 统计一段英文中单词的个数c语言,C语言统计一篇英文短文中单词的个数实例代码...
- String str=“i“与 String str=new String(“i”)一样吗?
- Java日志设计实践(1) - 常见问题
- 大前端完整学习路线(完整版)
- 在ubuntu中安装DroidCam 让Andorid 安卓手机摄像头成为Linux外部可移动摄像头
- vmware安装win7 vmware tools
- 畅想未来的计算机网络科技有限公司,畅想未来科技生活作文
- Quartz组件介绍
- 微型计算机中i 0设备的含义,i/0设备的含义是什么
- 机器学习算法----聚类 (K-Means、LVQ、GMM、DBSCAN、AGNES) (学习笔记)
- IFrame语法小全 --使用iframe内的函数
- CUDA编程中的gridDim and blockDim
- 国家卫健委5G+医疗健康应用试点项目建议方向全文
- android开源的酷炫的交互动画和视觉效果:Interactive-animation
- 后端常用开发工具下载地址
- 证考网:一建与二建的具体区别是什么?
- poi包的使用和Excel的操作
热门文章
- [VBA]工作需求,写了段VBA。EXCEL的效率很差
- Xcode9 无线连接真机调试
- 如何才能成为优秀的架构师?
- 互联网基础运维分工、职责和技能要求
- 大一软件工程C语言推荐书籍,大一软件工程学生,看完了谭浩强的书,越看越迷茫,感觉并没什么用,什么大程序都不会编,求指点?...
- python 日期减一天_怎么用Python在指定日期上减去7天?
- 高并发架构系列:Kafka、RocketMQ、RabbitMQ的优劣势比较
- 移动端适配的理解——REM方案
- 「ZJOI2019」麻将
- JavaScript中的内置对象(数组、Boolean、Number、字符串)和自定义对象