У меня есть бизнес-требование, в котором мне предоставлен документ Excel, который имеет сопоставление xml на месте (в основном используя опцию меню Excel-> Source, а затем выбирая файл xml и отображение элементов XML в ячейки excel). Например: Значение в ячейке A2 отображается в элемент xml «document_title», B2 сопоставляется с «document_number».Чтение Excel, имя элемента XML MAP с использованием Apache POI
Требование состоит в том, чтобы программно прочитать документ Excel и найти список элементов XML и найти отображаемые ячейки и содержимое ячейки. Например: Искать элемент xml «document_title» и найти ячейку, к которой этот элемент сопоставлен (в примере, упомянутом выше, это A2) и прочитать содержимое ячейки.
Я попытался использовать классы OPCP и классы XSSFReader apache POI и попытаться разобрать его с помощью 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();
}
Сообщите мне, если у вас возникнут вопросы или предложения. Любая помощь будет действительно оценена