Ich schreibe ein Programm in POI, um Zellen zusammenzuführen, und ich bin in der Lage, sie zusammenzuführen. Es gibt eine Spalte mit Zahleninhalt, und wenn ich diese Spalte zusammenfasse und wenn ich mein Blatt öffne und diese Spalte zu meiner Überraschung auswähle, zeigt das die Zählung und Summe an, als ob es nicht zusammengeführt wäre.Verwirrung mit der Zusammenführung mit POI
Unten ist mein Excel.
Hier sollte die count
5
sein und sum
530
sein sollte, aber dies zeigt dies als 25
und 2650
Unten ist mein Code.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
public class RowsMerge {
// public static void main(String[] args)
public static void main(String[] args) throws IOException {
FileInputStream fin = new FileInputStream(
new File("C:\\D\\Sheets\\Quality Sheet\\Quality_template.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(fin);
HSSFSheet sheet = workbook.getSheetAt(0);
int row = sheet.getPhysicalNumberOfRows();
String currentLawName, currentCountry, currentAssociate, previousLawName, previousCountry, previousAssociate;
String currentPages, previousPages;
int startIndex = 1, finalIndex = 0;
System.out.println(row);
for (int i = 2; i < row; i++) {
currentAssociate = sheet.getRow(i).getCell(1).toString();
currentLawName = sheet.getRow(i).getCell(3).toString();
currentCountry = sheet.getRow(i).getCell(4).toString();
currentPages = sheet.getRow(i).getCell(5).toString();
previousAssociate = sheet.getRow(i - 1).getCell(1).toString();
previousLawName = sheet.getRow(i - 1).getCell(3).toString();
previousCountry = sheet.getRow(i - 1).getCell(4).toString();
previousPages = sheet.getRow(i - 1).getCell(5).toString();
if (currentAssociate.equals(previousAssociate) && currentCountry.equals(previousCountry)
&& currentLawName.equals(previousLawName) && currentPages.equals(previousPages)) {
finalIndex += 1;
if (((i + 1) == row)) {
System.out.println("yes");
finalIndex += 1;
sendRangeToMergeCells(startIndex + 1, finalIndex - 1, sheet, workbook);
}
} else {
sendRangeToMergeCells(startIndex + 1, finalIndex, sheet, workbook);
startIndex = i;
finalIndex = 0;
}
}
FileOutputStream fileOut = new FileOutputStream("C:\\D\\Sheets\\Quality Sheet\\new.xls");
workbook.write(fileOut);
fileOut.close();
}
private static void sendRangeToMergeCells(int startIndex, int finalIndex, HSSFSheet sheet, HSSFWorkbook workbook) {
System.out.println(startIndex + "\t" + (startIndex + finalIndex));
CellRangeAddress region = CellRangeAddress.valueOf("F" + (startIndex) + ":F" + ((startIndex + finalIndex)));
sheet.addMergedRegion(region);
}
}
Das ist ziemlich verwirrend. Bitte lass mich wissen, wo ich falsch liege und wie ich das beheben kann.
Dank
Dies kann ein Fehler sein. Excel behält nur den Wert in der oberen linken Zelle einer zusammengeführten Region bei. Es scheint, dass POI alle Werte beibehalten kann. Bitte dieses Problem unter https://bz.apache.org/bugzilla/buglist.cgi?list_id=146416&product=POI. Fügen Sie den Mindestcode ein, der zur Reproduktion des Problems erforderlich ist. – jmarkmurphy