【发布时间】:2016-11-22 20:05:54
【问题描述】:
我有一个业务需求,其中向我提供了具有 xml 映射的 excel 文档(基本上使用 excel 菜单选项 Developer-> Source,然后选择一个 xml 文件并将 XML 元素映射到 excel 单元格)。例如:单元格 A2 中的值映射到 xml 元素“document_title”,B2 映射到“document_number”。
要求是以编程方式读取 excel 文档并搜索 XML 元素列表并找到映射的单元格和单元格的内容。例如:搜索xml元素“document_title”,找到该元素映射到的单元格(在上面提到的示例中,这是A2)并读取该单元格的内容。
我曾尝试使用 Apache POI 的 OPCP 包和 XSSFReader 类,并尝试使用 DOMParser 对其进行解析,但无法实现。
以下是源代码的精简版,有人可以帮助我正确的方向。
public static void main( String[] args ) throws IOException
{
System.out.println( "reading excel" );
try {
OPCPackage pkg = OPCPackage.open("D:\\test.xlsx");
XSSFReader r = new XSSFReader( pkg );
SharedStringsTable sst = r.getSharedStringsTable();
InputStream inp = r.getSheet("rId1");
InputSource inpSource = new InputSource(inp);
DOMParser parser = new DOMParser();
parser.parse(inpSource);
Document doc = parser.getDocument();
inp.close(); // dont know yet, how to read each element, and hence trying to write this to a file
OutputStream writer = new FileOutputStream("D:\\outtrId11.xml");
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
//create string from xml tree
StreamResult result = new StreamResult(writer);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
} catch (InvalidFormatException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (OpenXML4JException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如有任何疑问/建议,请告诉我。任何帮助将不胜感激
【问题讨论】:
标签: java xml excel apache-poi