Excelファイル比較サンプル
package net.tianyu.study.poi;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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 int MAX_LINES = 3000;
private static final short DIFF_COLOR = IndexedColors.BLUE.getIndex();
private HSSFWorkbook wb1;
private HSSFSheet sheet1;
private HSSFWorkbook wb2;
private HSSFSheet sheet2;
private FileInputStream diff1In = null;
private FileInputStream diff2In = null;
private FileOutputStream out = null;
public void open(String input1FileName, String input2FileName, String outputFileName) throws IOException {
diff1In = new FileInputStream(input1FileName);
diff2In = new FileInputStream(input2FileName);
out = new FileOutputStream(outputFileName);
POIFSFileSystem filein = new POIFSFileSystem(diff1In);
wb1 = new HSSFWorkbook(filein);
filein = new POIFSFileSystem(diff2In);
wb2 = new HSSFWorkbook(filein);
}
public void run() throws IOException {
int countSheet = wb1.getNumberOfSheets();
for (int k = 0; k < countSheet; k++) {
sheet1 = wb1.getSheetAt(k);
sheet2 = wb2.getSheetAt(k);
for (int i = 4; i < MAX_LINES; i++) {
HSSFRow row1 = sheet1.getRow(i);
HSSFRow row2 = sheet2.getRow(i);
if (row1 == null || row2 == null) {
continue;
}
for (int j = 3; j < MAX_LINES; j++) {
HSSFCell cell1 = row1.getCell(j);
HSSFCell cell2 = row2.getCell(j);
if (cell1 == null || cell2 == null) {
continue;
}
String value1 = getCellValue(cell1);
String value2 = getCellValue(cell2);
if (value1 == null && value2 == null) {
continue;
}
if (value1 == null && value2 != null) {
setCellColor(cell1, DIFF_COLOR);
}
else if (value1 != null && value2 == null) {
setCellColor(cell1, DIFF_COLOR);
}
else if (!value1.equals(value2)) {
setCellColor(cell1, DIFF_COLOR);
}
}
}
}
wb1.write(out);
}
public void close() throws IOException {
out.close();
diff1In.close();
}
private String getCellValue(HSSFCell cell) {
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
return cell.getStringCellValue();
}
else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
return Double.toString(cell.getNumericCellValue());
}
return null;
}
private void setCellColor(HSSFCell cell, short color) {
CellStyle style = wb1.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入门)用apache.poi读写Excel文件的例子(1)”很可能是引导初学者如何利用Apache POI进行Excel操作的文章。Apache POI提供了API,使得在Java中创建、修改和读取Excel文件变得简单易行。 首先,让我们...
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...
2. POJ——1664 放苹果:此题可能需要理解数组操作和动态规划,解决如何在一定限制下放置苹果的问题,可能涉及到贪心算法或回溯法。 3. POJ——2675 计算书费:可能涉及到输入输出处理,字符串处理和基本的数学运算...
【标题】"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-...
2. poj_1013.c - "Divisors":此题主要考察了数论和数组处理,要求找出一个数的所有因子,对理解因数分解和遍历数组技巧有帮助。 3. poj_1833.c - "Tic Tac Toe":这是关于井字游戏的实现,涉及到博弈论和回溯算法...
标题中的"poj.rar_poj"暗示了这是一个与POJ(Programming Online Judge)相关的压缩文件,POJ是一个在线编程竞赛平台,主要供程序员们练习和提交算法解决方案。在这个压缩包中,很可能包含了用户在POJ上参与编程挑战...
在本压缩包“poj算法题目实现.zip”中,包含了五个经典的编程竞赛题目,主要针对的是POJ(Programming Online Judge)平台。这些题目是程序员提升算法能力、锻炼编程技巧的重要资源。下面,我们将详细探讨每个题目...
用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是一个在线的编程竞赛平台,它为参赛者提供了大量的算法题目进行练习和比赛,以提升...
2. "POJ2002-Squares.doc":这可能是一个Microsoft Word文档,包含了详细的解题报告,可能包括问题分析、算法描述、解题步骤、运行结果和可能的优化措施等。 详细说明: 在"POJ2002-Squares"这个问题中,参赛者可能...
根据提供的文件信息,本文将对其中提及的几个POJ(Peking University Judge Online)平台上的图论题目进行详细的解析,并介绍解决这些问题时所使用的算法和技术。这些题目涵盖了图论中的多个核心概念,如最短路径、...
2. "1045" - 这个文件名可能是问题1045的源代码文件,可能命名为“1045.cpp”或“1045.java”等,具体取决于使用的编程语言。它包含了直接解决POJ 1045问题的算法实现。 综上所述,这个压缩包提供的资源可以帮助...