weixin_46344791 2021-02-17 19:50 采纳率: 83.3%
浏览 95
已采纳

Java 以某一列为标准 删除该列中数值重复的行

我有一个excel表,想要用java删除某一列中,只要数据重复就仅仅保留重复数据中第一行的数据。

就比如4,5,10,11行的YKTSAMISD列都是重复的,我只保留第4行

之前有人让我看各种库,但是我只学过最基本的java,看不明白

  • 写回答

3条回答 默认 最新

  • ProfSnail 2021-02-17 21:50
    关注

    先安装一个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();
    	}
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了
  • ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
  • ¥188 需要修改一个工具,懂得汇编的人来。
  • ¥15 livecharts wpf piechart 属性
  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证