This program will merge two excel sheets with homogenous data
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Properties;
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.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class MergeExcel
{
public static void main(String args[]) throws Exception
{
MergeExcel mergeExcel = new MergeExcel();
Workbook workBook1 = mergeExcel.checkFileFormat("first excel");
Workbook workBook2 = mergeExcel.checkFileFormat("second excel");
String path="result excel";
ArrayList<ArrayListRows> rowsArrayList = mergeExcel.getObjectsFromWorkBook(workBook1);
ArrayList<ArrayListRows> rowsArrayList1 = mergeExcel.getObjectsFromWorkBook(workBook2);
ArrayListRows firstRowList1 = rowsArrayList.get(0);
rowsArrayList.remove(0);
ArrayListRows firstRowList2 = rowsArrayList1.get(0);
rowsArrayList1.remove(0);
ArrayList<Integer> tot = mergeExcel.compareHeadings(firstRowList1,firstRowList2);
rowsArrayList1 = mergeExcel.sortColoumns(rowsArrayList1,tot);
ArrayList<ArrayListRows> totalList = mergeExcel.addRows(rowsArrayList,rowsArrayList1);
mergeExcel.writeToFile(path,totalList,firstRowList1);
/* Iterator<ArrayListRows> hfgks = totalList.iterator();
while(hfgks.hasNext())
System.out.println(((ArrayListRows)hfgks.next()).coloumns);*/
}
public void writeToFile(String path,ArrayList<ArrayListRows> totalList,ArrayListRows firstRowList1) throws Exception
{
HSSFWorkbook wb1 = new HSSFWorkbook();
HSSFSheet sheet1 = wb1.createSheet("new sheet");
for(int k=0;k<HSSFSheet.INITIAL_CAPACITY;k++)
{
sheet1.setColumnWidth( k, (short) 5000);
}
HSSFRow newTitleRow = sheet1.createRow((short)0);
for(int index=0;index<firstRowList1.coloumns.size();index++)
{
newTitleRow.createCell(index).setCellValue(firstRowList1.coloumns.get(index));
}
for(int index=0;index<totalList.size();index++)
{
HSSFRow newRow = sheet1.createRow((short)(index+1));
ArrayListRows temp = totalList.get(index);
for(int index1=0;index1<temp.coloumns.size();index1++)
{
HSSFCell cel = newRow.createCell(index1);
cel.setCellValue((temp.coloumns.get(index1)));
}
}
FileOutputStream fileOut = new FileOutputStream(path);
wb1.write(fileOut);
fileOut.close();
System.out.println("result.xls created Sucessfully");
}
public ArrayList<ArrayListRows> sortColoumns(ArrayList<ArrayListRows> rowsList,ArrayList<Integer> tot)
{
ArrayList<ArrayListRows> rowsArrayList = new ArrayList<ArrayListRows>();
for(int i = 0;i<rowsList.size();i++)
{
ArrayListRows temp = new ArrayListRows();
for(int j=0;j<(rowsList.get(i).coloumns.size());j++)
{
temp.coloumns.add(rowsList.get(i).coloumns.get(tot.get(j)));
}
rowsArrayList.add(temp);
}
return rowsArrayList;
}
public ArrayList<Integer> compareHeadings(ArrayListRows firstRowList1,ArrayListRows firstRowList2)
{
ArrayList<Integer> tot = new ArrayList<Integer>();
if(!(firstRowList1.coloumns.size() == firstRowList2.coloumns.size()))
{
System.out.println("cannot merge the files");
System.exit(0);
//return null;
}
System.out.println(firstRowList1.coloumns);
System.out.println(firstRowList2.coloumns);
for(int i=0;i<firstRowList1.coloumns.size();i++)
{
for(int j=0;j<firstRowList2.coloumns.size();j++)
{
if((firstRowList1.coloumns.get(i).trim()).equals((firstRowList2.coloumns.get(j).trim())))
{
tot.add(j);
break;
}
}
}
return tot;
}
public ArrayList<ArrayListRows> addRows(ArrayList<ArrayListRows> rowsArrayList, ArrayList<ArrayListRows> rowsArrayList1 )
{
ArrayList<ArrayListRows> arrayRows = new ArrayList<ArrayListRows>();
Iterator<ArrayListRows> itera = rowsArrayList.iterator();
while(itera.hasNext())
{
arrayRows.add(itera.next());
}
for(int i=0;i<rowsArrayList1.size();i++)
{
int j;
for( j=0;j<rowsArrayList.size();j++)
{
if(compareColumns(rowsArrayList1.get(i), rowsArrayList.get(j)))
{
break;
}
}
if(j>=rowsArrayList1.size())
arrayRows.add(rowsArrayList1.get(i));
}
return arrayRows;
}
public boolean compareColumns(ArrayListRows row1,ArrayListRows row2)
{
for(int i=0;i<row1.coloumns.size();i++)
{
if(!row1.coloumns.get(i).equals(row2.coloumns.get(i)))
return false;
}
return true;
}
public ArrayList<ArrayListRows> getObjectsFromWorkBook(Workbook wb)
{
ArrayList<ArrayListRows> arrayRows = new ArrayList<ArrayListRows>();
Sheet sheet=null;
Row row=null;
Cell cell=null;
if(wb!=null){
sheet=wb.getSheetAt(0);
row=null;
cell=null;
Iterator<Row> rows=sheet.rowIterator();
while(rows.hasNext())
{
ArrayListRows allo = new ArrayListRows();
row=(Row)rows.next();
Iterator<Cell> cells=row.cellIterator();
while(cells.hasNext())
{
cell=( Cell)cells.next();
if(cell.getCellType()==Cell.CELL_TYPE_STRING){
allo.coloumns.add(cell.getStringCellValue());
}
else
allo.coloumns.add(""+cell.getNumericCellValue());
}
arrayRows.add(allo);
}
}
return arrayRows;
}
public Workbook checkFileFormat(String fileName){
Workbook hwb=null;
FileInputStream checkFis=null;
try{
checkFis=new FileInputStream(fileName);
//Instantiate the Workbook using HSSFWorkbook
hwb=new HSSFWorkbook(checkFis);
Sheet sheet=hwb.getSheetAt(0);
Iterator<Row> rows=sheet.rowIterator();
Iterator<Cell> cells=null;
Row row=null;
Cell cell=null;
int check=0;
//Read the file as HSSFWorkbook
while(rows.hasNext()){
check++;
row=(HSSFRow)rows.next();
cells=row.cellIterator();
while(cells.hasNext()){
cell=(HSSFCell)cells.next();
}
if(check==2)
break;
}
//Return HSSFWorkbook type object if there is no exception in reading the file using HSSFWorkbook
return hwb;
}catch(ClassCastException ce){ //Instantiate the Workbook using XSSFWorkbook in case of class cast exception
Workbook xwb=null;
//System.out.println("class cast");
try{
xwb=new XSSFWorkbook(checkFis);
checkFis.close();
}catch(IOException e){
e.printStackTrace();
//System.out.println("class cast io");
}
return xwb; }
catch(Exception e){ //Instantiate the Workbook using XSSFWorkbook in case of Exception while reading file through HSSFWorkbook
Workbook xwb=null;
try{
checkFis.close();
checkFis=null;
checkFis=new FileInputStream(fileName);
xwb=new XSSFWorkbook(checkFis);
checkFis.close();
}catch(IOException ie){
ie.printStackTrace();
}
return xwb;
}
}
}
import java.util.ArrayList;
public class ArrayListRows
{
ArrayList<String> coloumns = new ArrayList<String>();
ArrayList<Integer> coloumnsType=new ArrayList<Integer>();
}