当前位置:编程学习 > JAVA >>

JXL读取Excel表格,再由Jdom转换为XML文件出错问题~急!!

使用jxl读取Excel表格,再将读取的内容转化为XMl文件,遇到了两个问题;
第一个是:当遇到Excel表格中有空格的时候就无法转化,如果某一行中有一个空单元格,那么这一整行都无法转换成xml,在xml文件中就没有这一行。例如:Excel表中是这样的形式:
姓名 性别 年龄   
张三 男 23
李四 女 34
charlie 男
Lily 33

那么转换成xml文件如下:
<?xml version="1.0" encoding="GB2312"?>
<Table>
  <Rows>
    <姓名>姓名</姓名>
    <性别>性别</性别>
    <年龄>年龄</年龄>
  </Rows>
  <Rows>
    <姓名>张三</姓名>
    <性别>男</性别>
    <年龄>23</年龄>
  </Rows>
  <Rows>
    <姓名>李四</姓名>
    <性别>女</性别>
    <年龄>34</年龄>
  </Rows>
</Table>
也就是后两行没有转化,并提示错误:java.lang.ArrayIndexOutOfBoundsException: 2
at ReadAndWrite.main(ReadAndWrite.java:48)


第二个问题:当某一个单元格中的字符有空格时,比如"年龄"如果内容是"年龄   " 也会出错,错误如下:
org.jdom.IllegalNameException: The name "年龄    " is not legal for JDOM/XML elements: XML names cannot contain the character " ".
at org.jdom.Element.setName(Element.java:207)
at org.jdom.Element.<init>(Element.java:141)
at org.jdom.Element.<init>(Element.java:153)
at ReadAndWrite.main(ReadAndWrite.java:56)

这是怎么回事呢??
代码如下:
import java.io.*;

import jxl.*;

import org.jdom.*;

public class ReadAndWrite {
 public static void main(String[] args){
 Element rootElement = new Element("Table");
     Document myDocument = new Document(rootElement);
   
    try{
     InputStream sourceFile = new FileInputStream("C:/work/Test.xls");
     Workbook NewFile = Workbook.getWorkbook(sourceFile);
     //获得Sheet 1
     Sheet sheet = NewFile.getSheet(0);
     
     String sheetName = sheet.getName();
     System.out.println(sheetName);   
     
     int colnum = sheet.getColumns();
     System.out.print(colnum+"列");   
     
     int rownum = sheet.getRows();
     System.out.println(rownum+"行");   
     

     String[] colsName = new String[colnum];
     for(int col=0; col<colnum; col++) {
      Cell cell = sheet.getCell(col,0);
      
      colsName[col] = cell.getContents();  
     }
     
    
     
     for(int row=0; row<rownum; row++) {
      Element rowElement = new Element("Rows");
      Cell[] cells = sheet.getRow(row);
      if(cells !=null && cells.length>0) {
      for(int col=0; col<colnum; col++) {
    
    
      String cellCon = cells[col].getContents();
         if(cellCon == null)  cellCon = "null";    
      cellCon = cellCon.replaceAll("\\s+", ",");
     cellCon = cellCon.replaceAll(" ", "");
 cellCon = cellCon.replace("", "null");
    
      
      Element cellElement = new Element(colsName[col]).addContent(cellCon);
      rowElement.addContent(cellElement);
     }
      }
      rootElement.addContent(rowElement);
     }
      
  }catch(Exception ex){
     ex.printStackTrace();
    }
    try {
     
         org.jdom.output.Format format = org.jdom.output.Format.getPrettyFormat();
         
         org.jdom.output.Format ft = format.setEncoding("GB2312");//setIndent("  ");
  
         XMLOutputter output = new XMLOutputter(ft);
         
         OutputStream os = new FileOutputStream(new File("c:/work/Test.xml"));
    
        
         output.output(myDocument,os);
         
         
         os.close();
         
     } catch (IOException IllegalNameException) {
      IllegalNameException.printStackTrace();
     }
   }
}



--------------------编程问答-------------------- 空格还有大多数符号都是不能作为XML节点名的,这个你trim一下就可以了吧。。。
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,