如何使用java将Excel转换为XML?

时间:2009-12-14 12:28:58

标签: java xml excel

我想将输入的Excel文件转换为输出XML文件。

如果有人在java中有任何解决方案如何获取输入Excel文件以及如何写入XML作为输出,请提供任何代码或任何URL或任何其他解决方案。

谢谢,

Mishal Shah

5 个答案:

答案 0 :(得分:6)

查看jexcel或Apache POI库以便在Excel文件中读取。

创建XML文件很简单,只需将XML直接写入文件,或者附加到XML文档,然后使用标准Java库或Xerces或类似文件将其写出来。

答案 1 :(得分:4)

我最近在Java中将Excel(xlsx)转换为xml。我假设excel中的每一行都是一个单独的对象。以下是我遵循的步骤: -

  1. 使用Apache POI阅读Excel文件
  2. 创建了一个xsd文件  生成相应的类
  3. 使用类中生成的getter / setter方法读取创建的每一行,创建相应的对象和初始值
  4. 将对象添加到只包含相同类型对象的arraylist
  5. 使用Jaxb将arraylist对象标记为输出文件
  6. 如果需要,准备提供代码 您可以在这里开始https://sites.google.com/site/arjunwebworld/Home/programming/jaxb-example

答案 2 :(得分:2)

JExcel对我来说很容易使用。将jxl.jar放在类路径上并编写如下代码:

    File excelFile = new File(excelFilename);

    // Create model for excel file
    if (excelFile.exists()) {
        try {
            Workbook workbook = Workbook.getWorkbook(excelFile);
            Sheet sheet = workbook.getSheets()[0];

            TableModel model = new DefaultTableModel(sheet.getRows(), sheet.getColumns());
            for (int row = 0; row < sheet.getRows(); row++) {
                for (int column = 0; column < sheet.getColumns(); column++) {
                    String content = sheet.getCell(column, row).getContents();
                    model.setValueAt(content, row, column);
                }
            }

            previewTable.setModel(model);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error: " + e);
        }

    } else {
        JOptionPane.showMessageDialog(null, "File does not exist");
    }

请参阅http://jexcelapi.sourceforge.net/resources/faq/开始并链接到下载区。

答案 3 :(得分:1)

File excelFile = new File(excelFilename);

// Create model for excel file
if (excelFile.exists()) {
    try {
        Workbook workbook = Workbook.getWorkbook(excelFile);
        Sheet sheet = workbook.getSheets()[0];

        TableModel model = new DefaultTableModel(sheet.getRows(), sheet.getColumns());
        for (int row = 0; row < sheet.getRows(); row++) {
            for (int column = 0; column < sheet.getColumns(); column++) {
                String content = sheet.getCell(column, row).getContents();
                model.setValueAt(content, row, column);
            }
        }

        previewTable.setModel(model);
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Error: " + e);
    }

} else {
    JOptionPane.showMessageDialog(null, "File does not exist");
}

答案 4 :(得分:0)

下载jxl并使用此代码

    import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.swing.text.BadLocationException;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Font;
import jxl.read.biff.BiffException;

public class XlsToXml {
public String toXml(File excelFile) throws IOException, BiffException {
    try {
        String xmlLine = "";
        String rowText = "";
        String colText = "";
        String isBold = "";
        Font font = null;
        String cellCol = "";
        String cellAddress = "";
        Cell cell = null;
        Workbook workbook = Workbook.getWorkbook(excelFile);
        xmlLine += "<workbook>" + "\n";
        for (int sheet = 0; sheet < workbook.getNumberOfSheets(); sheet++) {
            Sheet s = workbook.getSheet(sheet);
            xmlLine += "  <sheets>" + "\n";
            Cell[] row = null;
            for (int i = 0; i < s.getRows(); i++) {
                row = s.getRow(i);
                for (int j = 0; j < row.length; j++) {
                    if (row[j].getType() != CellType.EMPTY) {
                        cell = row[j];
                        cellCol=columnName(cell.getColumn());
                        cellCol=" colLetter=\""+cellCol+"\"";
                        cellAddress=" address=\""+cellAddress(cell.getRow()+1,cell.getColumn())+"\"";
                        isBold = cell.getCellFormat().getFont().getBoldWeight() == 700 ? "true" : "false";
                        isBold = (isBold == "false" ? "" : " isBold=\"true\"");
                        colText += "      <col number=\"" + (j + 1) + "\"" + isBold +cellAddress+ ">";
                        colText += "<![CDATA[" + cell.getContents() + "]]>";
                        colText += "</col>" + "\n";
                        rowText += cell.getContents();
                    }
                }
                if (rowText != "") {
                    xmlLine += "    <row number=\"" + (i + 1) + "\">" + "\n";
                    xmlLine += colText;
                    xmlLine += "    </row>" + "\n";
                }
                colText = "";
                rowText = "";
            }
            xmlLine += "  </sheet>" + "\n";;
        }
        xmlLine += "</workbook>";
        return xmlLine;
    } catch (UnsupportedEncodingException e) {
        System.err.println(e.toString());
    }
    return null;
}
private String cellAddress(Integer rowNumber, Integer colNumber){
    //return "$"+columnName(colNumber)+"$"+rowNumber;
    return columnName(colNumber)+rowNumber;
}
private String columnName(Integer colNumber) {
    Base columns = new Base(colNumber,26);
    columns.transform();
    return columns.getResult();
}

class Base {
    String[] colNames = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",");
    String equalTo;
    int position;
    int number;
    int base;
    int[] digits;
    int[] auxiliar;

    public Base(int n, int b) {
        position = 0;
        equalTo = "";
        base = b;
        number = n;
        digits = new int[1];
    }

    public void transform() {
        if (number < base) {
            digits[position] = number;
            size();
        } else {
            digits[position] = number % base;
            size();
            position++;
            number = number / base;
            transform();
        }
    }

    public String getResult() {
        for (int j = digits.length - 2; j >= 0; j--) {
            equalTo += colNames[j>0?digits[j]-1:digits[j]];
        }
        return equalTo;
    }

    private void size() {
        auxiliar = digits;
        digits = new int[auxiliar.length + 1];
        System.arraycopy(auxiliar, 0, digits, 0, auxiliar.length);
    }
}

}