package package_final;
import common_function.CommonFunction;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.swing.JFileChooser;
import jxl.*;
import jxl.read.biff.BiffException;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;
/**
* <p>该文件作用主要是删除已提取出来的表格中右边有重复的项。
*
* @version 1.0
*/
public class Delete_youbianchongfu
{
private Workbook workbook;
private Sheet sheet;
/**
* <br>
* 方法说明:读取excel的指定单元数据 <br>
* 输入参数: <br>
* 返回类型:
*/
public String read(int col, int row)
{
try
{
// 获得单元数据
Cell a2 = sheet.getCell(col, row);
String value = a2.getContents();
return value;
}
catch(Exception e)
{
e.printStackTrace();
workbook.close();
return null;
}
}
public static void main(String[] arges)
{
int countFlag = 0;
String fileName = "E://";
String []getfileName = CommonFunction.selectPath(fileName);
Workbook workBook_Source = null;
Sheet sheetWorkBook_Source = null;
WritableWorkbook writeWorkBook_Middle = null;
WritableWorkbook writeWorkBook_END = null;
try
{
try
{
workBook_Source = Workbook.getWorkbook(new File(fileName));
}
catch(IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
catch(BiffException e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
//下面主要是将excel文件内容读取出来放到hashMap中
sheetWorkBook_Source = workBook_Source.getSheet(0);
LinkedHashMap hashMap1 = new LinkedHashMap();
LinkedHashMap hashMap2 = new LinkedHashMap();
for(int i =0, rows = sheetWorkBook_Source.getRows(); i<rows;i++)
{
//从EXCEL文件中获取的值
String []getValue = null;
//记住第一个第一列不为零的行值
int firstFlag = 0;
for(int j =0, columns = 3; j<columns;j++)
{
getValue[j] = sheetWorkBook_Source.getCell(j,i).getContents();
}
if( getValue[0]!=null && !getValue[0].trim().equals(""))
{
firstFlag = i;
}
//下面第一个if条件过滤掉某行全是空的那一行
if(!getValue[0].trim().equals("") && !getValue[1].trim().equals("") &&!getValue[2].trim().equals(""))
{
//若hashMap2里面没有包含英文键值,则将键值加进去
if(!hashMap2.containsKey(getValue[1]))
{
hashMap2.put(getValue[1], getValue[2]);
}
//若hashMap2里面虽然已经包含英文键值,但是第三列有值(即为有所在文件xml ,properties 等的标志)则将键值加进去,覆盖,为了是增加第三列的值
if(hashMap2.containsKey(getValue[1]) && hashMap2.get(getValue[1]) != null)
{
hashMap2.put(getValue[1], getValue[2]);
}
}
if(sheetWorkBook_Source.getCell(0,i+1).getContents()!=null && !sheetWorkBook_Source.getCell(0,i+1).getContents().trim().equals(""))
{
hashMap1.put(sheetWorkBook_Source.getCell(0,firstFlag).getContents(), hashMap2);
hashMap2.clear();
}
}
/*******************************************************************************************************************/
/******BEGIN该段作用主要是将源文件见一个可写的文件,便于对它进行修改操作*******************/
try
{
writeWorkBook_Middle = Workbook.createWorkbook(new File("E://AfterSelected.xls"));
}
catch(IOException e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}
writeWorkBook_Middle.createSheet("msg", 0);
LinkedHashMap hashMap2Excel = new LinkedHashMap();
int rows_excel = 0;
for (Iterator iter = hashMap1.keySet().iterator(); iter.hasNext();)
{
rows_excel = rows_excel+1;
String key_zh = iter.next().toString();
String []valueFromMap = null;
valueFromMap[0]=key_zh;
Label label0 = new Label(0,rows_excel, valueFromMap[0]);
/begin 开始写第一列数据
try
{
writeWorkBook_Middle.getSheet(0).addCell(label0);
}
catch(RowsExceededException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
catch(WriteException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
catch(IndexOutOfBoundsException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
END 开始写第一列数据
hashMap2Excel = (LinkedHashMap)hashMap1.get(key_zh);
for (Iterator iter2 = hashMap2.keySet().iterator(); iter2.hasNext(); )
{
String key_en = iter2.next().toString();
valueFromMap[1]=key_en;
valueFromMap[2]= (String)hashMap2.get(key_en);
Label label1 = new Label(1,rows_excel, valueFromMap[1]);
Label label2 = new Label(2,rows_excel, valueFromMap[2]);
try
{
writeWorkBook_Middle.getSheet(0).addCell(label1);
writeWorkBook_Middle.getSheet(0).addCell(label2);
rows_excel = rows_excel+1;
}
catch(RowsExceededException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
catch(WriteException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
catch(IndexOutOfBoundsException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
System.out.println("---------------------------------Create Writable File ok");
/*******************************************************************************************************************/
/******END该段作用主要是将源文件见一个可写的文件,便于对它进行修改操作*******************/
try
{
Sheet workBook_Source_Sheet = workBook_Source.getSheet(0);// getSheet(0);
int rowNumbers = workBook_Source_Sheet.getRows();
int columnNumbers = workBook_Source_Sheet.getColumns();
//
// /*******************************************************************************************************************/
// /******BEGIN该段作用主要是将源文件见一个可写的文件,便于对它进行修改操作*******************/
// writeWorkBook_Middle = Workbook.createWorkbook(new File("E://AfterSelected.xls"));
// writeWorkBook_Middle.createSheet("msg", 0);
// for (int i = 0 ,realrow =0; i < rowNumbers;i++ )
// {
//
// for (int j = 0 ; j < columnNumbers; j++)
// {
// Cell cell = workBook_Source_Sheet.getCell(j, i);
// String value = cell.getContents();
// if(value!=null && !value.equals(""))
// {
// Label label1 = new Label(j,realrow,value);
// writeWorkBook_Middle.getSheet(0).addCell(label1);
// System.out.println(i);
// if(j==1)
// {
// realrow++;
// }
//
// }
//
// }
// }
// System.out.println("---------------------------------Create Writable File ok");
// /*******************************************************************************************************************/
// /******END该段作用主要是将源文件见一个可写的文件,便于对它进行修改操作*******************/
/****************************************************************************************************************/
/*BEGIN 下面这段的功能主要是将中转文件AfterSelected.xls里的内容进行筛选处理*/
/****************************************************************************************************************/
Sheet writeWorkBook_Middle_Sheet = writeWorkBook_Middle.getSheet(0);// getSheet(0);
int rowNumbersB = writeWorkBook_Middle_Sheet.getRows();
int columnNumbersB = writeWorkBook_Middle_Sheet.getColumns();
/*BEGIN该模块主要作用是将被操作的文件备份作为一个中转文件B*/
for (int i = 0 ,realrow =0; i < rowNumbersB;i++ )
{
//value0是用来与后面各行第一列的值比较的
String value0 =null;
for (int j = 0 ; j < columnNumbersB; j++)
{
Cell cell = writeWorkBook_Middle_Sheet.getCell(j, i);
String value = cell.getContents();
if(j==0)
{
value0 = value;
}
if(value.trim()!=null && !value.trim().equals(""))
{
Label label1 = new Label(j,realrow,value);
writeWorkBook_END.getSheet(0).addCell(label1);
if(j==1)
{ //只能加1次
realrow=realrow+1;
System.out.println(i);
}
}
}
//下面判断有没有重复的,若有则将重复的添加到C文件中,并在BB中用“”替换关键字
if(value0.trim()!=null && !value0.trim().equals(""))
{
for(int k =i+1;k<rowNumbersB;k++)
{
if(( writeWorkBook_Middle.getSheet(0).getCell(0, k).getContents()!=null)&&(value0.trim().equals(writeWorkBook_Middle.getSheet(0).getCell(0, k).getContents().trim())))
{
System.out.println("-------------------------------------k="+k);
//将重复的值拷贝到右边
Label label1 = new Label(1, realrow, writeWorkBook_Middle.getSheet(0).getCell(1, k).getContents().trim());
writeWorkBook_END.getSheet(0).addCell(label1);
//将中转表中重复的那行置成空格
Label labelnull = new Label(0, k, "");
Label labelnull2 = new Label(1, k, "");
writeWorkBook_Middle.getSheet(0).addCell(labelnull);
writeWorkBook_Middle.getSheet(0).addCell(labelnull2);
realrow = realrow + 1;
if(k==18744)
{
System.out.println("-------------------------------------2here");
}
}
}
}
}
writeWorkBook_END.write();
writeWorkBook_END.close();
writeWorkBook_Middle.write();
writeWorkBook_Middle.close();
System.out.println("-------------------------------------END_ok");
/*END下面这段的功能主要是将中转文件B里的内容检出来放在C中,第一列值相同的放在一起,并删除重复的字段中非第一次出现的键值*/
}
catch(Exception e)
{
e.printStackTrace();
}
workBook_Source.close();
}
}