把Excel文件中的数据直接读取之后写到XML文件中
要用到的jar包:dom4j-1.6.1.jarpoi-3.2-FINAL-20081019.jarpoi-contrib-3.2-FINAL-20081019.jarpoi-scratchpad-3.2-FINAL-20081019.jar以下是java源代码import java.io.FileInputStream;import java.io.Fil...
要用到的jar包:
dom4j-1.6.1.jar
poi-3.2-FINAL-20081019.jar
poi-contrib-3.2-FINAL-20081019.jar
poi-scratchpad-3.2-FINAL-20081019.jar
以下是java源代码
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class ExcelXMLTest {
/**
* @param args
*/
public static void main(String[] args) {
export("D:/code.xls","D:/Area.xml");
}
public static void export(String inFile,String outFile){
HSSFWorkbook book = null;
try {
//读取一个现有的excel文件
book = new HSSFWorkbook(new FileInputStream(inFile));
} catch (FileNotFoundException e) {
System.out.println("===要读取的excel文件不存在===");
e.printStackTrace();
} catch (IOException e) {
System.out.println("===读取excel文件是出错===");
e.printStackTrace();
}
//获取excel文件的第一个工作薄
HSSFSheet sheet = book.getSheetAt(0);
//创建一个XML的文件
Document d = DocumentHelper.createDocument();
//为这个XML文件设置一个根结点,名为:address
Element root = d.addElement("address");
//获取的代码
String code = "";
//代码对应的值
String value = "";
//省级代码,也就是代码的前两位,如北京:11
String proCode = "";
//市级代码,也就是代码的前四位,如北京1100
String cityCode = "";
//创建几个结点,省级结点
Element province = null;
//市级结点
Element city = null;
//乡镇结点
Element country = null;
//循环读取excel文件中的数据,第一行是标题就不读取了
for(int i=1;i<sheet.getLastRowNum();i++) {
HSSFRow row = sheet.getRow(i);
HSSFCell codeCell = row.getCell(0);
HSSFCell valueCell = row.getCell(1);
code = new String((int)codeCell.getNumericCellValue()+"");
if(valueCell.getRichStringCellValue()!=null)
value = valueCell.getRichStringCellValue().toString();
//如果省级代码不等于代码中的前两位就表示这又是另一个省了
if(!proCode.equals(code.substring(0,2))) {
//改变省级代码
proCode = code.substring(0,2);
//在根目录下添加一个province的子结点
province = root.addElement("province");
//为这个结点添加一两个属性:name和value,对应的值两个是value和code
province.addAttribute("name", value);
province.addAttribute("value", code);
//如果市级代码不等于代码的前四位就表示这是另一个市的了
} else if(!cityCode.equals(code.substring(0,4))) {
//改变市级代码
cityCode = code.substring(0,4);
//在省结点下添加相应的市子结点
city = province.addElement("city");
//设置两个属性并赋值
city.addAttribute("name", value);
city.addAttribute("value", code);
} else {
//否则的话就直接在市结点下添加相应的乡镇子结点
country = city.addElement("country");
country.addAttribute("name", value);
country.addAttribute("value", code);
}
}
try {
//格式化XML
OutputFormat format = OutputFormat.createPrettyPrint();
//是否缩进
format.setIndent(true);
//在声明完之后是否进行换行
format.setNewLineAfterDeclaration(false);
//设置字符编码,只是在声明里把encoding的值设置为UTF-8
format.setEncoding("UTF-8");
//进否格式化
format.setTrimText(true);
//进否添加新行
format.setNewlines(true);
XMLWriter writer = new XMLWriter(new FileWriter(outFile),format);
writer.write(d);
//写完之后要进行flush这样才会把数据真正的写到文件中去
writer.flush();
writer.close();
System.out.println("===成功生成XML文件!!!===");
} catch (IOException e) {
System.out.println("===生成XML文件是出错===");
e.printStackTrace();
}
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)