XMLベースのマッピングがあるExcelドキュメントを提供しているビジネス要件があります(基本的にExcelのメニューオプションDeveloper-> Sourceを使用してxmlファイルを選択し、 XML要素をExcelセルにマッピングする)。例:A2セルの値がxml要素 "document_title"にマッピングされ、B2が "document_number"にマッピングされます。Apache POIを使用してExcel、XML MAP要素名を読み取る
要件は、プログラムでExcelドキュメントを読み取り、XML要素のリストを検索し、マップされたセルとセルの内容を見つけることです。例:xml要素 "document_title"を検索し、この要素がマップされているセルを見つけます(上記の例ではA2です)。セルの内容を読み込みます。
私はOPCPパッケージとXSSFReaderクラスのapi 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();
}
ご質問やご提案がありましたらお知らせください。どんな助けでも本当に感謝されます