扩大Mike的答案。您可以创建一个ContentHandler
找到像合并地区:
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.util.CellRangeAddress;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class MergedRegionLocator extends DefaultHandler {
private final List<CellRangeAddress> mergedRegions = new ArrayList<>();
@Override
public void startElement (String uri, String localName, String name, Attributes attributes) {
if ("mergeCell".equals(name) && attributes.getValue("ref") != null) {
mergedRegions.add(CellRangeAddress.valueOf(attributes.getValue("ref")));
}
}
public CellRangeAddress getMergedRegion (int index) {
return mergedRegions.get(index);
}
public List<CellRangeAddress> getMergedRegions() {
return mergedRegions;
}
}
一个例子使用它与基于事件的POI解析:
OPCPackage pkg = OPCPackage.open(new FileInputStream("test.xlsx"));
XSSFReader reader = new XSSFReader(pkg);
InputStream sheetData = reader.getSheetsData().next();
MergedRegionLocator mergedRegionLocator = new MergedRegionLocator();
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(mergedRegionLocator);
parser.parse(new InputSource(sheetData));
mergedRegionLocator.getMergedRegions();
你说得对 - 我是在错误的地方寻找。有一些名为“mergeCell”的元素具有“ref”属性。 ref的值是例如“A1:B3”。现在,我似乎必须解释该字符串(“A1:B3”)才能获得所有合并区域的列/行索引。谢谢! – Patter 2012-07-24 11:33:04
那么,正确的地方在哪里?是“mergeCell”元素吗?我也有同样的问题。 – Samoth 2017-01-13 14:27:15