- 浏览: 197627 次
- 性别:
- 来自: 本溪
文章分类
最新评论
-
shouchun_w:
写的非常翔实!辛苦了!我在按照你的“扩展抓屏函数”(命令完全一 ...
Selenium循环测试,使用变量,抓屏 -
chenhailong:
わかる、ありがど
【转载】ようだ、みたいだの比較 -
mahengyang:
为什么用tomcat启动web工程时需要将用到的jar包都放在 ...
(tomcat中级)应用Tomcat的WebappClassLoader加载指定目录的jar文件 -
柏新星:
柏新星 写道create table Person (id i ...
derby+myBatis 入门 -
柏新星:
create table Person (id int pri ...
derby+myBatis 入门
本例用到以下Class,完成对Excel的基本读写。我用的Excel是2003
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
package net.tianyu.study.poi; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.IndexedColors; public class DiffXls { private static final String KEY_MARK = "key"; private static final String END_MARK = "end"; private static final String UPDATE_DATA_MARK = "Updated"; private static final int MAX_LINES = 3000; private HSSFWorkbook wb; private HSSFSheet sheet; private List<Integer> keyColumns = new ArrayList<Integer>(); private List<KeyData> orgKeyList = new ArrayList<KeyData>(); private int dataStartRow; private int dataEndColumn; private FileOutputStream out = null; private FileInputStream in = null; private short updateColor = IndexedColors.LIGHT_YELLOW.getIndex(); private short insertColor = IndexedColors.LIGHT_GREEN.getIndex(); private short deleteColor = IndexedColors.GREY_25_PERCENT.getIndex(); public void open(String inputFileName, String outputFileName) throws IOException { in = new FileInputStream(inputFileName); out = new FileOutputStream(outputFileName); POIFSFileSystem filein = new POIFSFileSystem(in); wb = new HSSFWorkbook(filein); sheet = wb.getSheetAt(0); } public void run() throws IOException { initKeyColumn(); initOrgKeyList(); initDataStartRow(); startDiff(); format(); wb.write(out); } public void close() throws IOException { out.close(); in.close(); } private void initKeyColumn() { HSSFRow markRow = sheet.getRow(0); for (int i = 0; i < MAX_LINES; i++) { HSSFCell cell = markRow.getCell(i); if (cell != null && KEY_MARK.equals(cell.getStringCellValue())) { keyColumns.add(i); System.out.println(i); } if (cell != null && END_MARK.equals(cell.getStringCellValue())) { dataEndColumn = i; System.out.println("dataEndColumn :" + dataEndColumn); break; } } } private void initOrgKeyList() { for (int i = 2; i < MAX_LINES; i++) { HSSFRow dataRow = sheet.getRow(i); if (dataRow == null) { break; } KeyData key = new KeyData(); key.setRow(i); for (Integer keyColumn : keyColumns) { HSSFCell cell = dataRow.getCell(keyColumn); if (cell != null) { if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { key.addValue(cell.getStringCellValue()); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { key.addValue(Double.toString(cell.getNumericCellValue())); } } } System.out.println(key.toString()); orgKeyList.add(key); } } private void format() { for (int i = 0; i < dataEndColumn; i++) { sheet.autoSizeColumn(i); int width = sheet.getColumnWidth(i); if (width > 256 * 100) { sheet.setColumnWidth(i, 256 * 100); } } } private void initDataStartRow() { for (int i = 1; i < MAX_LINES; i++) { HSSFRow dataRow = sheet.getRow(i); if (dataRow == null) { continue; } HSSFCell cell = dataRow.getCell(0); if (cell != null && cell.getCellType() == HSSFCell.CELL_TYPE_STRING && UPDATE_DATA_MARK.equals(cell.getStringCellValue())) { dataStartRow = i + 2; break; } if (cell != null && cell.getCellType() == HSSFCell.CELL_TYPE_STRING && END_MARK.equals(cell.getStringCellValue())) { break; } } System.out.println(dataStartRow); } private int matchKeyRow(KeyData key) { for (KeyData orgKey : orgKeyList) { if (orgKey.equals(key)) { orgKey.setHasSameData(true); return orgKey.getRow(); } } return 0; } private boolean isSameData(int orgRow, int targetRow) { boolean result = true; for (int i = 0; i < dataEndColumn; i++) { HSSFRow orgData = sheet.getRow(orgRow); HSSFRow targetData = sheet.getRow(targetRow); if (orgData == null || targetData == null) { result = false; } HSSFCell orgCell = orgData.getCell(i); HSSFCell targetCell = targetData.getCell(i); if (orgCell == null && targetCell == null) { continue; } if (orgCell == null && targetCell != null) { setCellColor(orgCell, updateColor); setCellColor(targetCell, updateColor); result = false; } if (targetCell == null && orgCell != null) { setCellColor(orgCell, updateColor); setCellColor(targetCell, updateColor); result = false; } if (orgCell.getCellType() != targetCell.getCellType()) { setCellColor(orgCell, updateColor); setCellColor(targetCell, updateColor); result = false; } if (orgCell.getCellType() == HSSFCell.CELL_TYPE_STRING) { if (!orgCell.getStringCellValue().equals(targetCell.getStringCellValue())) { setCellColor(orgCell, updateColor); setCellColor(targetCell, updateColor); result = false; } } if (orgCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { if (orgCell.getNumericCellValue() != targetCell.getNumericCellValue()) { setCellColor(orgCell, updateColor); setCellColor(targetCell, updateColor); result = false; } } } return result; } private void startDiff() { for (int i = dataStartRow; i < MAX_LINES; i++) { HSSFRow dataRow = sheet.getRow(i); if (dataRow == null) { break; } HSSFCell cell = dataRow.getCell(0); if (cell != null && cell.getCellType() == HSSFCell.CELL_TYPE_STRING && END_MARK.equals(cell.getStringCellValue())) { break; } KeyData key = new KeyData(); key.setRow(i); for (Integer keyColumn : keyColumns) { cell = dataRow.getCell(keyColumn); if (cell != null) { if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { key.addValue(cell.getStringCellValue()); } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { key.addValue(Double.toString(cell.getNumericCellValue())); } } } int orgRow = matchKeyRow(key); if (orgRow != 0) { System.out.println("updateRow : " + i + " orgRow : " + orgRow + " " + isSameData(i, orgRow)); } else { setRowColor(i, insertColor); } } setDeleteColor(); } private void setDeleteColor() { for (KeyData orgKey : orgKeyList) { if (!orgKey.isHasSameData()) { setRowColor(orgKey.getRow(), deleteColor); } } } private void setRowColor(int row, short color) { HSSFRow dataRow = sheet.getRow(row); for (int i = 0; i < dataEndColumn; i++) { HSSFCell cell = dataRow.getCell(i); if (cell == null) { cell = dataRow.createCell(i); } setCellColor(cell, color); } } private void setCellColor(HSSFCell cell, short color) { CellStyle style = wb.createCellStyle(); style.cloneStyleFrom(cell.getCellStyle()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(color); style.setBorderBottom(CellStyle.BORDER_THIN); style.setBorderTop(CellStyle.BORDER_THIN); style.setBorderLeft(CellStyle.BORDER_THIN); style.setBorderRight(CellStyle.BORDER_THIN); cell.setCellStyle(style); } }
- java.zip (3.6 KB)
- 下载次数: 10
发表评论
-
WCF & WSDL
2014-07-16 09:25 629http://www.atmarkit. ... -
设定PNG的bKGD
2012-06-01 17:20 1079一,参考资料 PNG结构说明 http://home ... -
扩展ExtJS的【Ext.data.reader.Json】例子
2012-03-07 19:35 1951一,下面是扩展Class Ext.define('Dn ... -
Java合并PNG图像(保持背景透明)
2012-01-21 10:43 8206import java.awt.Graphics2D; im ... -
htmlcompressor介绍
2011-09-05 16:01 4245官网 : http://code.google.com/p/h ... -
(java入门)Velocity最简单例程
2011-08-26 06:51 1883一,前言 在编程中总会用到 “文本模板”+“数据” 来生 ... -
找出Web程序依赖的所有的JAR(中文)
2011-06-23 20:02 1062一,前言 开发Web应用程序时总会在lib目录下放很多J ... -
(java入门)创建SSL连接
2011-06-09 16:21 1594纯粹备忘录。 用Windows系统的证明书STORE ... -
Google的Mail地址簿的API的应用
2011-05-25 23:22 4338#前言 我用Gmail觉得地址簿操作不方便。幸好Goog ... -
gclog的分析方法
2011-04-21 19:17 1343一,概要 通过GC的LOG也能为判断内存泄漏提供些相关信 ... -
找出Web程序依赖的所有的JAR
2011-04-13 10:51 945■問題 WebAppを開発する際、Spring、Strut ... -
JConsole连接远程JVM的设定
2011-03-24 10:38 632■検測されたJVMのパラメータは、下記である。 -Dcom. ... -
derby+myBatis 入门
2010-10-15 13:00 38321, 下载derby, myBatis。 2, 设定DERB ... -
(java入门)用apache.poj读写Excel文件的例子(2)
2010-09-03 15:39 1212Excelファイル比較サンプル package net.ti ... -
Cobertura 笔记
2010-05-07 13:56 13891,从 http://cobertura.sourceforg ... -
(Struts2)OGNL笔记 # 的用法三
2010-03-30 20:37 894在行选择等计算中,用 #this 代表迭代中的当前对象 Ac ... -
(Struts2)OGNL笔记 # 的用法二
2010-03-30 20:11 802可以作成一个Map JSP <s:s ... -
(Struts2)OGNL笔记 # 的用法一
2010-03-30 19:49 769可以用#访问 Request, Session, Applic ... -
(java入门) MyLog
2009-09-07 23:47 993package net.dncsoft.test; ... -
(Axis2 入门) Sample JAX-WS 异步Client
2009-08-18 15:17 18611、binding.xml準備 <bindings ...
相关推荐
org.apache.poi:poi:4.1.2 org.apache.poi:poi-ooxml:4.1.2 org.apache.poi:poi-ooxml-schemas:4.1.2 org.apache.xmlbeans:xmlbeans:3.1.0 com.github.virtuald:curvesapi:1.06 com.zaxxer:SparseBitSet:1.2 commons...
【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...
总的来说,POJ 1751挑战要求程序员用Prim算法解决求解最小生成树的问题,这涉及到对图论的理解,以及在Java环境中实现和测试该算法的能力。对于想要提升数据结构和算法技能的开发者来说,这是一个很好的实践题目。...
Java操作Excel时,有两种常用的库:jxl和Apache POI(POJ是POI的一部分,全称为Plain Old Java Objects)。这两个库都允许开发者在Java应用程序中读取、写入和修改Excel文件,但它们有不同的特性和适用场景。 **jxl...
在解决此类问题时,通常会使用C++等编程语言,因此`POJ1004-Financial Management.cpp`文件很可能包含了用C++编写的源代码。代码可能包含了读取输入、处理数据、计算结果和输出答案等核心功能。同时,`POJ1004-...
5. poj_1002.c - "Addition":这是最基础的加法问题,虽然简单,但却是所有计算的基础,体现了编程语言的基本运算符使用。 6. poj_2503.c - "Sudoku":九宫格数独,需要解决的问题是如何填充空格使得每一行、每一列...
标题中的"poj.rar_poj"暗示了这是一个与POJ(Programming Online Judge)相关的压缩文件,POJ是一个在线编程竞赛平台,主要供程序员们练习和提交算法解决方案。在这个压缩包中,很可能包含了用户在POJ上参与编程挑战...
1. poj1082 "Bridge"(桥) 这个问题是关于网络连通性的。给定一个图,你需要找出最长的一条由桥(边的删除会导致图变成多个连通分量)组成的路径。解决这个问题通常采用深度优先搜索(DFS)或广度优先搜索(BFS)...
用java的biginteger实现的poj1001,比较简单的方法
【北大POJ JAVA源码】是一系列用于解决北京大学在线编程平台(POJ)问题的Java程序集合。这个压缩包中的代码资源,对于学习Java编程、算法设计和优化以及熟悉在线编程竞赛有着重要的参考价值。POJ是北京大学面向全国...
### ACM POJ PKU 最全题目分类解析 #### 动态规划(DP) 在计算机科学领域,动态规划(Dynamic Programming, DP)是一种重要的算法思想,主要用于解决多阶段决策过程中的优化问题。它通过将原问题分解成相互重叠的...
【标题】"凸包练习: POJ 2187(JAVA)" 是一个关于编程算法的挑战,主要涉及计算机科学中的几何算法。在本问题中,我们关注的是二维平面上的点集及其凸包(Convex Hull)的概念。凸包可以被理解为一个最小的多边形,该...
【标题】"POJ.rar_poj" 指的是一份与编程竞赛相关的压缩文件,主要涉及POJ(Problem Overloading Judge)平台上的问题解答。POJ是一个在线的编程竞赛平台,它为参赛者提供了大量的算法题目进行练习和比赛,以提升...
1. "POJ2002-Squares.cpp":这是一个C++源代码文件,包含了解决此问题的程序。C++是一种常用的编程语言,特别适合处理算法和性能敏感的问题。 2. "POJ2002-Squares.doc":这可能是一个Microsoft Word文档,包含了...
根据提供的文件信息,本文将对其中提及的几个POJ(Peking University Judge Online)平台上的图论题目进行详细的解析,并介绍解决这些问题时所使用的算法和技术。这些题目涵盖了图论中的多个核心概念,如最短路径、...
2. "1045" - 这个文件名可能是问题1045的源代码文件,可能命名为“1045.cpp”或“1045.java”等,具体取决于使用的编程语言。它包含了直接解决POJ 1045问题的算法实现。 综上所述,这个压缩包提供的资源可以帮助...