Как конвертировать Excel в XML, используя Java? - PullRequest
1 голос
/ 14 декабря 2009

Я хочу преобразовать свой входной файл Excel в выходной XML-файл.

Если у кого-нибудь есть какое-либо решение в java для того, как принять входной файл Excel и как записать в XML в качестве вывода, укажите любой код или любой URL или любое другое решение.

Спасибо

Мишал Шах

Ответы [ 5 ]

6 голосов
/ 14 декабря 2009

Просмотрите библиотеки jexcel или Apache POI для чтения в файле Excel.

Создать файл XML очень просто: либо просто записать XML в файл напрямую, либо добавить в документ XML, а затем записать его, используя стандартные библиотеки Java, библиотеки или Xerces или аналогичные.

4 голосов
/ 18 декабря 2012

Я недавно сделал преобразование Excel (xlsx) в xml в Java. Я предположил, что каждая строка в Excel как один объект здесь. Вот шаги, которые я выполнил: -

  1. Чтение файла Excel с использованием Apache POI
  2. Создал xsd файл и сгенерированные соответствующие классы
  3. Чтение каждой созданной строки, созданных соответствующих объектов и инициализированных значений с использованием сгенерированных методов получения / установки в классах
  4. Добавлены объекты в массив, содержащий только объекты одного типа
  5. Использование Jaxb Marshelled объекта arraylist в выходной файл

Готов предоставить код, если требуется Здесь вы можете начать https://sites.google.com/site/arjunwebworld/Home/programming/jaxb-example

2 голосов
/ 14 декабря 2009

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/ для начала работы и ссылку на область загрузки.

1 голос
/ 19 июля 2012
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");
}
0 голосов
/ 26 октября 2013

Скачайте 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);
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...