Java 使用MS excel 2007将excel文件中的数据转换为xml
我正在尝试将excel文件直接转换为XML文件。我已经有了xsd模式文件和xml文件,可以使用它们在excel中导入,然后将数据添加到这些字段并生成xml文件 我执行这个任务是为了减少额外的任务,比如创建一个解析器来解析excel文件,从xml模式文件生成java对象,向它们写入数据,并从这些对象生成xml文件。基本上是为了避免编组和取消编组过程。使用的模式是一个复杂的模式,包括3个其他模式文件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
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