我有一个excel表,想要用java删除某一列中,只要数据重复就仅仅保留重复数据中第一行的数据。
就比如4,5,10,11行的YKTSAMISD列都是重复的,我只保留第4行
之前有人让我看各种库,但是我只学过最基本的java,看不明白
我有一个excel表,想要用java删除某一列中,只要数据重复就仅仅保留重复数据中第一行的数据。
就比如4,5,10,11行的YKTSAMISD列都是重复的,我只保留第4行
之前有人让我看各种库,但是我只学过最基本的java,看不明白
先安装一个jxl包,java代码如下。
import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import java.io.File;
import java.io.IOException;
import java.util.Vector;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class test{
public static void main(String[] args) throws IOException, WriteException, BiffException
{
File xlsFile = new File("test.xls");
File outFile = new File("out.xls");
// 获得读入的工作簿对象
Workbook workbook = Workbook.getWorkbook(xlsFile);
// 获得读入的所有工作表
Sheet[] sheets = workbook.getSheets();
WritableWorkbook outbook = Workbook.createWorkbook(outFile);
// 创建一个工作表
WritableSheet outsheet = workbook.createSheet("sheet1", 0);
// 指定第0列作为筛选重复行
int column = 0;
// 用来记录哪些行重复了
// 遍历读入的工作表
if (sheets != null){
Sheet sheet = sheets[0];
// 获得行数
int rows = sheet.getRows();
// 获得列数
int cols = sheet.getColumns();
// 读取数据
Vector<Integer> repeated = new Vector<Integer>(rows);
// 初始化,全部赋值为0(不重复)
for(int i = 0; i < rows; i++)repeated.elementAt(i) = 0;
// 第一遍筛选,判断哪几行是重复的。
for (int i = 0; i < rows; i++){
// 这行已经重复,就不再重新判断一遍。
if(repeated.elementAt(i)==1)
continue;
for(int j = i + 1; j < rows; j++){
// 这行和上面重复了,记录这行重复,为1。
if(sheet.getCell(i,column)==sheet.getCell(j,column)){
repeated.elementAt(j) = 1;
}
}
}
// 记录正在写入表的第几行
int writingRow = 0;
// 第二遍写入数据,将未重复的行写入新表中。
for(int row = 0; row < rows; row++){
if(repeated.elementAt(row) == 1){
continue;
}
for(int col = 0; col < cols; col++){
sheet.addCell(new Label(writingRow, row, sheet.getCell(col, row)));
}
writingRow++;
}
}
workbook.close();
outbook.close();
}
}