ZGY的Excel特征提取器初期版本完成
其实这个初期版本已经基本上把他要的功能都实现了,呵呵
他的要求是批量转Excel,把所有用黄色标出的单元格所在的列拷到一个新文件中
其实底层很简单,界面做了倒有一会,还是一如既往的喜欢SWT啊~
附上Java利用Apache POI进行Excel文件的转换的核心代码。可能算法上不是很好,但数据量也不是很大。
2 short high = wb.getCustomPalette().findSimilarColor(rgb[0], rgb[1], rgb[2]).getIndex();
3 HSSFWorkbook dest = new HSSFWorkbook();
4 FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
5
6 Sheet sheet = wb.getSheetAt(0);
7 HashSet<Integer> toCopyColumns = new HashSet<Integer>();
8
9 Cell copyHighCell = null;
10 Cell copyNormalCell = null;
11 CellStyle csHigh;
12 CellStyle csNormal;
13 //read row
14 for (Row row:sheet){
15 for (Cell cell :row){
16 //find high lighted cell
17 if (cell.getCellStyle().getFillForegroundColor() == high){
18 //hit
19 toCopyColumns.add(cell.getColumnIndex());
20 copyHighCell = cell;
21 }else{
22 copyNormalCell = cell;
23 }
24 }
25 }
26 csHigh = dest.createCellStyle();
27 csNormal = dest.createCellStyle();
28 if (copyHighCell !=null){
29 csHigh.cloneStyleFrom(copyHighCell.getCellStyle());
30 copyHighCell = null;
31 }
32 if (copyNormalCell !=null){
33 csNormal.cloneStyleFrom(copyNormalCell.getCellStyle());
34 copyNormalCell = null;
35 }
36
37
38
39 //read over, toCopyColumns now has all column that need to copy
40 Integer[] columns = new Integer[toCopyColumns.size()];
41 toCopyColumns.toArray(columns);
42 Arrays.sort(columns);
43
44 Sheet destSheet = dest.createSheet("Sheet1");
45 for (Row row:sheet){
46 Row newRow = destSheet.createRow(row.getRowNum());
47 for (int i = 0;i < columns.length;i++){
48 Cell newCell = newRow.createCell(i);
49 Cell oldCell = row.getCell(columns[i]);
50 if (oldCell == null){
51 continue;
52 }
53 switch (oldCell.getCellType()){
54 case Cell.CELL_TYPE_FORMULA:
55 CellValue value = fe.evaluate(oldCell);
56 //judge the new cell format
57 newCell.setCellType(value.getCellType());
58 switch (value.getCellType()){
59 case Cell.CELL_TYPE_NUMERIC:
60 newCell.setCellValue(value.getNumberValue());break;
61 case Cell.CELL_TYPE_BOOLEAN:
62 newCell.setCellValue(value.getBooleanValue());break;
63 case Cell.CELL_TYPE_ERROR:
64 newCell.setCellErrorValue(value.getErrorValue());break;
65 case Cell.CELL_TYPE_STRING:
66 newCell.setCellValue(value.getStringValue());break;
67 }
68 break;
69 case Cell.CELL_TYPE_NUMERIC:
70 newCell.setCellValue(oldCell.getNumericCellValue());
71 newCell.setCellType(oldCell.getCellType());break;
72 case Cell.CELL_TYPE_BOOLEAN:
73 newCell.setCellValue(oldCell.getBooleanCellValue());
74 newCell.setCellType(oldCell.getCellType());break;
75 case Cell.CELL_TYPE_ERROR:
76 newCell.setCellErrorValue(oldCell.getErrorCellValue());
77 newCell.setCellType(oldCell.getCellType());break;
78 case Cell.CELL_TYPE_STRING:
79 newCell.setCellValue(oldCell.getStringCellValue());
80 newCell.setCellType(oldCell.getCellType());break;
81 }
82 if (oldCell.getCellStyle().getFillForegroundColor() == high){
83 newCell.setCellStyle(csHigh);
84 }else{
85 newCell.setCellStyle(csNormal);
86 }
87
88 }
89 }
90// System.out.println(wb.getNumCellStyles());
91// System.out.println(dest.getNumCellStyles());
92 return dest;
93 }
94
95 public static void main(String args[]) throws FileNotFoundException, IOException{
96
97 HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream("test.xls"));
98 HSSFWorkbook wb2 = convert (wb,new byte[]{(byte) 0xff,(byte) 0xff,0x0});
99 wb2.write(new FileOutputStream("tt.xls"));
100 }
其中需要注意一点:对于一个Workbook而言,同样的单元格样式会存储在同一个样式属性中,由不同的单元格分别引用
所以一个个复制单元格的属性是不行滴,这样会造成目标文件样式数过大。
也没有什么好办法,因为源文件简单,所以就流氓了一下,哪位有更好的办法能压缩这个样式表,让重复的样式合并呢?
上个图
转载于:https://www.cnblogs.com/latifrons/archive/2009/07/04/1516963.html
ZGY的Excel特征提取器初期版本完成相关推荐
- excel切片器_听说你还不会用切片器?比筛选好用100倍,小白也能学会
私信回复关键词[2020]~ 获取100+套高颜值图表模板! 大家好,我是还在写毕业论文的小E~ 临近毕业,还要搞 PPT!心累啊! 这不,我在看关于怎么做毕业论文 PPT 的时候,无意中看到了这样的 ...
- excel切片器显示错误_带切片器的Excel弹出选择器工具
excel切片器显示错误 Slicers make it easy to select from a list of items, but they take up valuable space on ...
- ppt复制切片器_手把手教你使用Excel切片器,小白也能做出好看又好玩的动态图表...
私信回复关键词[2020]~ 获取100+套高颜值图表模板! 大家好,我是还在写毕业论文的小E~ 临近毕业,还要搞 PPT!心累啊! 这不,我在看关于怎么做毕业论文 PPT 的时候,无意中看到了这样的 ...
- 【深度学习】特征提取器:Transformer,Rnn,CNN之间的相互比较
在辞旧迎新的时刻,大家都在忙着回顾过去一年的成绩(或者在灶台前含泪数锅),并对2019做着规划,当然也有不少朋友执行力和工作效率比较高,直接把2018年初制定的计划拷贝一下,就能在3秒钟内完成2019 ...
- Transformer、rnn与cnn三大特征提取器的比较
自然语言处理中的三大特征处理器:RNN.CNN.Transformer,它们目前谁各方面占据优势?未来谁又更有前途呢?这篇文章用目前的各种实验数据给出了说明,结论是:放弃幻想,全面拥抱Transfor ...
- excel筛选器多选_神秘的Excel 2013筛选器问题
excel筛选器多选 A couple of days ago, I had problems while trying to run a simple macro in Excel 2013. Th ...
- 自动化特征提取器:图像特征提取和深度学习
自动化特征提取器:图像特征提取和深度学习 转载:github 译者:@friedhelm739 视觉和声音是人类固有的感觉输入.我们的大脑是可以迅速进化我们的能力来处理视觉和听觉信号的,一些系统甚至在 ...
- 特征工程系列之自动化特征提取器
视觉和声音是人类固有的感觉输入.我们的大脑是可以迅速进化我们的能力来处理视觉和听觉信号的,一些系统甚至在出生前就对刺激做出反应.另一方面,语言技能是学习得来的.他们需要几个月或几年的时间来掌握.许多人 ...
- 面向机器学习的特征工程 八、自动化特征提取器:图像特征提取和深度学习
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:friedhelm739 校对:(虚位以待) 视觉和声音是人类固有的感觉输入.我们的大脑是可以迅速进化我们的能力来处理视觉和 ...
最新文章
- 练习2:课工场响应式导航条_作业帮直播课APP下载最新版入口
- c++ Lambda
- PHP:第一章——PHP中的魔术常量
- BZOJ3231(矩阵连乘,稍有点复杂)
- 小学二年几手工计算机的制作,小学二年级创意手工制作方法
- python网络编程基础知识_python网络编程基础
- 如何将Mac外部驱动器映射到CrossOver容器
- androidnbsp;框架构图
- 一道阿姆斯特朗回旋好题( Convex HDU - 5979)
- openstack 单节点 ubuntu 12.04 server 安装步骤 转自陈沙克老师博客
- 基于Redis GEO(地理位置) 实现附近的人,商家等相关功能实现 使用SpringBoot Redis工具类
- Python爬取股票数据存入mysql数据库,获取股票(最新、最高、今开、成交量、成交额、量比、换手率、涨幅等)支持多线程+数据库连接池
- 基于数据挖掘的H公园客流量分析预测
- uniapp获取当前位置(定位-经纬度及城市信息)
- 达梦数据库配置SSL认证加密
- AutoCAD Civil 3D-超高及数据编辑输入
- linux系统测试屏幕,RedHat Linux 9.0 操作系统测试题2
- 深度学习中,CPU、GPU、NPU、FPGA如何发挥优势?
- 豆瓣八卦小组html失败,养活无数营销号的豆瓣小组,到底在聊什么?
- Fail2ban 删除策略 使用firewalld
热门文章
- 硬件基础:虚拟内存相关知识介绍?
- C#通过SMTP发送邮件代码示例
- 华为手机相册怎么镜像翻转_怎么利用手机相册制作电子视频
- asp js单步调试_如何使用Chrome的控制台高效的调试Javascript代码?
- system函数和popen函数使用方法
- java定时线程池_java 定时器线程池(ScheduledThreadPoolExecutor)的实现
- 文本字段和表单设计-UI组件系列
- 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结
- Firefox about
- 使用ndk standalone工具链来编译某个平台下的库