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

Java 使用MS excel 2007将excel文件中的数据转换为xml,java,xml,excel,groovy,Java,Xml,Excel,Groovy,我正在尝试将excel文件直接转换为XML文件。我已经有了xsd模式文件和xml文件,可以使用它们在excel中导入,然后将数据添加到这些字段并生成xml文件 我执行这个任务是为了减少额外的任务,比如创建一个解析器来解析excel文件,从xml模式文件生成java对象,向它们写入数据,并从这些对象生成xml文件。基本上是为了避免编组和取消编组过程。使用的模式是一个复杂的模式,包括3个其他模式文件 是否可以使用这种方法直接从excel文件创建xml。到目前为止,我还不能使它工作。如何在MS Exc

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

我执行这个任务是为了减少额外的任务,比如创建一个解析器来解析excel文件,从xml模式文件生成java对象,向它们写入数据,并从这些对象生成xml文件。基本上是为了避免编组和取消编组过程。使用的模式是一个复杂的模式,包括3个其他模式文件

  • 是否可以使用这种方法直接从excel文件创建xml。到目前为止,我还不能使它工作。如何在MS Excel中导入相互引用的多个架构
  • 另一种方法是编组/取消编组对象,这非常耗时,因为我再次需要将xml文件转换为json数据
  • 请提出实现这一目标的任何备选方案。例如:使用Groovy的MarkupBuilderAPI创建XML
  • 请参见本教程

    该教程提供了这个示例

    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
    }
    

    为输入xls生成xml文件。

    您能为用户提供一个“特殊”excel文件吗

    如果将Excel另存为XML(从Excel中),windows仍会将其识别为Excel文件,其行为类似于Excel文件,但它是可以轻松读取和修改的XML


    您只需仔细分析空单元格-它们在XML格式中被跳过。

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

    使用下面的代码将.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);
    }
    
    导入java.io.File;
    导入java.io.FileInputStream;
    导入java.io.FileNotFoundException;
    导入java.io.IOException;
    导入java.io.InputStream;
    导入java.util.ArrayList;
    导入java.util.Iterator;
    导入javax.xml.parsers.DocumentBuilder;
    导入javax.xml.parsers.DocumentBuilderFactory;
    导入javax.xml.parsers.parserConfiguration异常;
    导入javax.xml.transform.OutputKeys;
    导入javax.xml.transform.Transformer;
    导入javax.xml.transform.TransformerConfiguration异常;
    导入javax.xml.transform.TransformerException;
    导入javax.xml.transform.TransformerFactory;
    导入javax.xml.transform.dom.DOMSource;
    导入javax.xml.transform.stream.StreamResult;
    导入org.apache.poi.hssf.usermodel.HSSFCell;
    导入org.apache.poi.hssf.usermodel.HSSFRichTextString;
    导入org.apache.poi.hssf.usermodel.HSSFRow;
    导入org.apache.poi.hssf.usermodel.HSSFSheet;
    导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
    导入org.apache.poi.poifs.filesystem.poifsfsystem;
    导入org.w3c.dom.Document;
    导入org.w3c.dom.Element;
    公共类ImportDataFromXLStoXML{
    public ImportDataFromXLStoXML()的公共导入数据{
    }
    公共void displayFromExcel(字符串xlsPath){
    InputStream InputStream=null;
    试一试{
    inputStream=新文件inputStream(xlsPath);
    }catch(filenotfounde异常){
    System.out.println(“在指定路径中找不到文件”);
    e、 printStackTrace();
    }
    POIFSFileSystem=null;
    试一试{
    //初始化XML文档
    DocumentBuilderFactory工厂=DocumentBuilderFactory
    .newInstance();
    DocumentBuilder=factory.newDocumentBuilder();
    Document Document=builder.newDocument();
    Element rootElement=document.createElement(“类别”);
    document.appendChild(rootElement);
    fileSystem=新的POIFSFfilesystem(inputStream);
    HSSF工作簿=新的HSSF工作簿(文件系统);
    整数计数=工作簿。getNumberOfSheets();
    ArrayList数据=新的ArrayList();
    for(int i=0;i