擴大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