使用MS Excel 2007将excel文件中的数据转换为xml

我正在尝试将excel文件直接转换为XML文件。 我已经有了可以用于在Excel中导入的xsd模式文件和xml文件,然后将数据添加到这些字段并生成一个xml文件。

我正在执行这个任务,这样我就可以减less额外的任务,创build一个parsingexcel文件的parsing器,从xml模式文件生成java对象,向它们写入数据,并从这些对象中生成xml文件。 基本上要避免编组和解组过程。使用的模式是一个包含3个其他模式文件的复杂模式。

  1. 是否有可能使用这种方法直接从Excel文件创buildXML。所以,我不能使其工作。 我们如何导入MS Excel中的多个相互引用的模式?
  2. 对此的替代方法是编组/对象,这是耗时的,因为我再次需要将该XML文件转换为JSON数据.Ex:JAXB,JiBX Apis。
  3. 请提出任何替代scheme来实现这一目标。 例如:使用Groovy的MarkupBuilder API创buildXML。

在这里看到这个教程

该教程提供了这个例子

try { XmlGenner x = XMLGennerSingleton.getXmlGenner(); x.setCustomRows(1000); x.setSubRootElementName("Student"); x.setProgressBar(jProgressBar1); x.generateXML_Item("c:/temp/in.xls", "c:/temp/out.xml"); } catch (Exception ex) { // handler } 

它为inputxls生成xml文件。

你能够为用户提供一个“特殊”的Excel文件吗?

如果您将Excel保存为XML(来自Excel内),则Windows仍将其识别为Excel文件,其行为与Excel文件类似,但是它可以轻松读取和修改。

你只需要小心parsing空单元格 – 它们被跳过了XML格式。

如果您只是想从java / groovy应用程序中读取和写入Excel文件,则可能需要使用jexel-api或Apache POI – 这两个项目已经解决了这个问题。

使用下面的代码将.xls或.xlsx文件转换为xml。

 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.w3c.dom.Document; import org.w3c.dom.Element; public class ImportDataFromXLStoXML { public ImportDataFromXLStoXML() { } public void displayFromExcel(String xlsPath) { InputStream inputStream = null; try { inputStream = new FileInputStream(xlsPath); } catch (FileNotFoundException e) { System.out.println("File not found in the specified path."); e.printStackTrace(); } POIFSFileSystem fileSystem = null; try { // Initializing the XML document DocumentBuilderFactory factory = DocumentBuilderFactory .newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); Element rootElement = document.createElement("categories"); document.appendChild(rootElement); fileSystem = new POIFSFileSystem(inputStream); HSSFWorkbook workBook = new HSSFWorkbook(fileSystem); Integer count = workBook.getNumberOfSheets(); ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); for (int i = 0; i < count; i++) { HSSFSheet sheet = workBook.getSheetAt(i); Iterator<?> rows = sheet.rowIterator(); while (rows.hasNext()) { HSSFRow row = (HSSFRow) rows.next(); Iterator<?> cells = row.cellIterator(); ArrayList<String> rowData = new ArrayList<String>(); while (cells.hasNext()) { HSSFCell cell = (HSSFCell) cells.next(); HSSFRichTextString richTextString = cell.getRichStringCellValue(); System.out.println("String: " + richTextString.getString()); rowData.add(richTextString.getString()); } // end while data.add(rowData); } // end while } int numOfProduct = data.size(); for (int i = 0; i < numOfProduct; i++) { Element productElement = document.createElement("categoryName"); rootElement.appendChild(productElement); int index = 0; for (String s : data.get(i)) { String headerString = data.get(0).get(index); if (data.get(0).get(index).equals("image link")) { headerString = "image_link"; } if (data.get(0).get(index).equals("product type")) { headerString = "product_type"; } Element headerElement = document .createElement(headerString); productElement.appendChild(headerElement); headerElement.appendChild(document.createTextNode(s)); index++; } } TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); // Add indentation to output transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "2"); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(new File("products.xml")); // StreamResult result = new StreamResult(System.out); transformer.transform(source, result); } catch (IOException e) { System.out.println("IOException " + e.getMessage()); } catch (ParserConfigurationException e) { System.out .println("ParserConfigurationException " + e.getMessage()); } catch (TransformerConfigurationException e) { System.out.println("TransformerConfigurationException " + e.getMessage()); } catch (TransformerException e) { System.out.println("TransformerException " + e.getMessage()); } } public static void main(String[] args) { ImportDataFromXLStoXML poiExample = new ImportDataFromXLStoXML(); String xlsPath = "/home/vpanchal/installApps/workspace/QTOExport/output/Ptest.xls"; poiExample.displayFromExcel(xlsPath); } 

}