java
Apache Poi
Vor der Ausführung
Ich konnte eine solche Methode in der Sheet-Klasse nicht finden, also habe ich sie selbst gemacht. Code zum Auflösen von Zellen in A2: C6
Sample.java
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
public static void main(String[] args) {
try(Workbook book = WorkbookFactory.create(Sample.class.getResourceAsStream("sample.xlsx"));
OutputStream out = new FileOutputStream("sample.xlsx");) {
XSSFSheet sheet = (XSSFSheet) book.getSheetAt(0);
CellRangeAddress targetRange = CellRangeAddress.valueOf("A2:C6");
int removeCount = removeMergedRagions(targetRange, sheet);
System.out.println(removeCount + "Ungebunden");
book.write(out);
}catch(Exception ex) {
//Etwas tun
}
}
/**
*Bricht das Zusammenführen von Zellen innerhalb des angegebenen Bereichs ab<br>
*Befindet sich auch nur ein Teil innerhalb des angegebenen Bereichs, wird die Kombination außerhalb des Bereichs ebenfalls abgebrochen.
* @param targetRange Bereich zum Unterbrechen des Joins,not {@code null}
* @param sheet Das freizugebende Blatt,not {@code null}
* @return Anzahl der nicht verbundenen
* @see org.apache.poi.xssf.usermodel.XSSFSheet#Sie können dies verwenden, wenn die Version removeMergedRegions nur xlsx ist
*/
private static int removeMergedRegions(CellRangeAddress targetRange ,Sheet sheet) {
List<CellRangeAddress> mergeList = sheet.getMergedRegions();
List<Integer> removeIndices = new ArrayList<>();
for(int mergeIndex = 0; mergeIndex < mergeList.size(); mergeIndex++) {
CellRangeAddress mergedAddress = mergeList.get(mergeIndex);
if(targetRange.intersects(mergedAddress))
removeIndices.add(mergeIndex);
}
//Wenn Sie es von vorne freigeben, stimmt der Index nicht überein. Löschen Sie ihn daher von hinten
Collections.reverse(removeIndices);
for(int removeIndex : removeIndices)
sheet.removeMergedRegion(removeIndex);
return removeIndices.size();
}
Ausführungsprotokoll
Nach der Ausführung
Zusammengeführte Zellen, die sich teilweise in "A2: C6" befanden, wurden nicht zusammengeführt
Methodenimplementierung:
Sample.java
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFSheet;
public static void main(String[] args) {
try(Workbook book = WorkbookFactory.create(Sample.class.getResourceAsStream("sample.xlsx"));
OutputStream out = new FileOutputStream("sample.xlsx");) {
XSSFSheet sheet = (XSSFSheet) book.getSheetAt(0);
CellRangeAddress targetRange = CellRangeAddress.valueOf("A2:C6");
int removeCount = removeMargedRagions(targetRange, sheet);
System.out.println(removeCount + "Ungebunden");
book.write(out);
}catch(Exception ex) {
//Etwas tun
}
}
/**
*Bricht das Zusammenführen von Zellen innerhalb des angegebenen Bereichs ab<br>
*Befindet sich auch nur ein Teil innerhalb des angegebenen Bereichs, wird die Kombination außerhalb des Bereichs ebenfalls abgebrochen.
* @param targetRange Bereich zum Unterbrechen des Joins,not {@code null}
* @param xssfSheet Sheet wird freigegeben,not {@code null}
* @return Anzahl der nicht verbundenen
*/
private static int removeMergedRagions(CellRangeAddress targetRange ,XSSFSheet xssfSheet) {
List<CellRangeAddress> mergeList = xssfSheet.getMergedRegions();
List<Integer> removeIndices = new ArrayList<>();
for(int mergeIndex = 0; mergeIndex < mergeList.size(); mergeIndex++) {
CellRangeAddress mergedAddress = mergeList.get(mergeIndex);
if(targetRange.intersects(mergedAddress))
removeIndices.add(mergeIndex);
}
xssfSheet.removeMergedRegions(removeIndices);
return removeIndices.size();
}