Trouver cellule fusionnée dans Excel, fractionner les cellules et de les écrire dans les nouvelles de feuille de calcul?
Que j'ai reçu une Affectation que j'ai besoin de Diviser les données d'une feuille de calcul et l'Écrire dans la nouvelle feuille de calcul. Les Conditions sont, compte tenu de feuille de calcul peut avoir plusieurs numéros de Cellules Fusionnées et j'ai besoin de trouver ces cellules Fusionnées et écrire les Données dans une Nouvelle feuille de calcul.
c'est à dire, les données ou les cellules entre une cellule fusionnée jusqu'à une autre cellule Fusionnée doit être écrit dans une autre feuille de calcul.
Mon Code d'Effort est donnée ci-dessous,
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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;
public class CopyTest {
public static void main(String[] args) throws IOException {
CopyTest excel = new CopyTest();
excel.process("D:\\B3.xls");
}
public void process(String fileName) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName));
HSSFWorkbook workbook = new HSSFWorkbook(bis);
HSSFWorkbook myWorkBook = new HSSFWorkbook();
HSSFSheet sheet = null;
HSSFRow row = null;
HSSFCell cell = null;
HSSFSheet mySheet = null;
HSSFRow myRow = null;
HSSFCell myCell = null;
int sheets = workbook.getNumberOfSheets();
int fCell = 0;
int lCell = 0;
int fRow = 0;
int lRow = 0;
for (int iSheet = 0; iSheet < sheets; iSheet++) {
sheet = workbook.getSheetAt(iSheet);
if (sheet != null) {
mySheet = myWorkBook.createSheet(sheet.getSheetName());
fRow = sheet.getFirstRowNum();
System.out.println("First Row at"+fRow);
lRow = sheet.getLastRowNum();
for (int iRow = fRow; iRow <= lRow; iRow++) {
row = sheet.getRow(iRow);
myRow = mySheet.createRow(iRow);
if (row != null) {
fCell = row.getFirstCellNum();
lCell = row.getLastCellNum();
for (int iCell = fCell; iCell < lCell; iCell++) {
//if (mySheet.getMergedRegionAt(index)!=null)
System.out.println("Finding next merged Cells");
cell = row.getCell(iCell);
myCell = myRow.createCell(iCell);
if (cell != null) {
myCell.setCellType(cell.getCellType());
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BLANK:
myCell.setCellValue("");
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
myCell.setCellValue(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR:
myCell.setCellErrorValue(cell.getErrorCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
myCell.setCellFormula(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
myCell.setCellValue(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
myCell.setCellValue(cell.getStringCellValue());
break;
default:
myCell.setCellFormula(cell.getCellFormula());
//System.out.println("Reading Cell value\t"+myCell);
}System.out.println("Reading Cell value\t"+myCell);
}
}
}
}
}
}
bis.close();
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("D:\\Result Excel1.xls", true));
myWorkBook.write(bos);
bos.close();
}}
Avec ce Code, j'ai Réalisé le clonage de la feuille de calcul dans une autre nouvelle Feuille. Ici, je suis à défaut de trouver la Cellule fusionnée, getMergedCellRegionAt() m'aide et retourne cellule fusionnée de la région comme la Une:4 D:12 comme ça. comment dois-je procéder avec cette. De bien vouloir m'Aider, votre petit effort est apprécié. Merci à l'avance.
OriginalL'auteur Java_User | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
Selon la Javadoc
HSSFSheet
,getMergedCellRegionAt()
a été dépréciée en 2008 parce que lesRegion
il retourne a également été déprécié en faveur deCellRangeAddress
. Il suggère que vous devriez utilisergetMergedRegion(int)
au lieu de cela, ce qui renvoie uneCellRangeAddress
.La fusion de données de la région ne sont pas stockées directement avec les cellules elles-mêmes, mais avec le
Sheet
objet. Si vous n'avez pas besoin d'une boucle sur les lignes et les cellules à la recherche pour savoir s'ils font partie d'une fusion de la région; vous avez juste besoin de faire une boucle par la liste de fusion des régions sur la feuille, puis ajouter la fusion de la région à votre nouvelle feuille avecaddMergedRegion(CellRangeAddress)
.De ces méthodes sur
HSSFSheet
sont dans leFeuille
interface, donc ils vont travailler avec n'importe quel classeur Excel que Apache POI prend en charge, .xls (HSSF) ou .xlsx (XSSF).getMergedRegions()
qui renvoie une liste deCellRangeAddress
.OriginalL'auteur rgettman
Les cellules fusionnées ont leur valeur dans la première cellule.
La méthode suivante renvoie la valeur de la région à condition que la première cellule de la ligne et de colonne dans la fusion de la région
OriginalL'auteur Sorter
rgettmans réponse est tout à fait correct.
Java 8
Je voulais juste ajouter une solution pour Java 8 avec des cours d'eau:
OriginalL'auteur winklerrr