乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > <em>java</em>将<em>xml</em>转为xls文件-ja

<em>java</em>将<em>xml</em>转为xls文件-ja

作者:乔山办公网日期:

返回目录:excel表格制作


java解析excel生成的xml文件的方法是使用dom4j实现的。
dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。
1、excel生成的xml样例文件:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http:///TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Created>2006-09-16T00:00:00Z</Created>
<LastSaved>2016-07-25T03:26:50Z</LastSaved>
<Version>14.00</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
<RemovePersonalInformation/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>7956</WindowHeight>
<WindowWidth>14808</WindowWidth>
<WindowTopX>240</WindowTopX>
<WindowTopY>168</WindowTopY>
<ActiveSheet>2</ActiveSheet>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s16" ss:Name="好">
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#006100"/>
<Interior ss:Color="#C6EFCE" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s17">
<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:Indent="1"
ss:WrapText="1"/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="8" ss:Color="#686868"/>
<NumberFormat ss:Format="@"/>
</Style>
<Style ss:ID="s18" ss:Parent="s16">
<Alignment ss:Vertical="Bottom"/>
</Style>
<Style ss:ID="s19">
<NumberFormat ss:Format="yyyy/m/d\ h:mm:ss"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="3" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="14.4">
<Row>
<Cell><Data ss:Type="String">工号7a64e4b893e5b19e336</Data></Cell>
<Cell><Data ss:Type="String">姓名 </Data></Cell>
<Cell ss:Index="5"><Data ss:Type="String">工号</Data></Cell>
<Cell><Data ss:Type="String">姓名</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">111</Data></Cell>
<Cell><Data ss:Type="String">张三</Data></Cell>
<Cell ss:Index="5"><Data ss:Type="Number">111</Data></Cell>
<Cell ss:Formula="=VLOOKUP(R2C5:R3C5,RC[-5]:R[1]C[-4],2)"><Data
ss:Type="String">张三</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">112</Data></Cell>
<Cell><Data ss:Type="String">李四</Data></Cell>
<Cell ss:Index="5"><Data ss:Type="Number">112</Data></Cell>
<Cell ss:Formula="=VLOOKUP(R2C5:R3C5,RC[-5]:R[1]C[-4],2)"><Data
ss:Type="String">李四</Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>7</ActiveRow>
<ActiveCol>5</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
2、java解析代码:
import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo {
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("person.xml"));
Element root = document.getRootElement();

Iterator it = root.elementIterator();
while (it.hasNext()) {
Element element = (Element) it.next();

//未知属性名称情况下
/*Iterator attrIt = element.attributeIterator();
while (attrIt.hasNext()) {
Attribute a = (Attribute) attrIt.next();
System.out.println(a.getValue());
}*/

//已知属性名称情况下
System.out.println("id: " + element.attributeValue("id"));

//未知元素名情况下
/*Iterator eleIt = element.elementIterator();
while (eleIt.hasNext()) {
Element e = (Element) eleIt.next();
System.out.println(e.getName() + ": " + e.getText());
}
System.out.println();*/

//已知元素名情况下
System.out.println("title: " + element.elementText("title"));
System.out.println("author: " + element.elementText("author"));
System.out.println();
}
}
}

实现思路:
直接从Excel文件装换zhidao成XML文件是可以实现的,这里我采用一个中间装换,也就是先实现excel文件内容放入实现设计好的access数据库文件中,然后再从access中读取记录写道xml文件中,因为我这里的实际问题是把多个excel表,每个表中又有多个sheet工作薄,这样我先导入数据库中,也方便修改和处理.

这样,需要写两个类:
XlsToAccess类,用来实现从excel文件根据事先约定的格式,按照数据库设计字段存放进去
AccessToXml类,用来实现从access文件数据库中的记录按约定格式写到xml文件中去
然后还需要一个主运行窗口类XlsToXml,这个类我们使用eclipse插件SWT Designer来完成
最后把工程打成JAR包,再用NativeJ将Jar包生成为可执行的exe文件
实现思路:
直接从Excel文件装换成XML文件是可以实现的,这里我采用一个中间装换,也就是先实现excel文件内容放入实现设计好的access数据库文件中,然后再从access中读取记录写道xml文件中,因为我这里的实际问题是把多个excel表,每个表中又有多个sheet工作薄,这样我先导入数据库中,也方便修改和处理.

这样,需要写两个类:
XlsToAccess类,用来实现从excel文件根据事先约定的格式,按照数据库设计字段存放进去
AccessToXml类,用来实现从access文件数据库中的记录按约定格式写到xml文件中去
然后还需要一个主运行窗口类XlsToXml,这个类我们使用eclipse插件SWT Designer来完成
最后把工程打成JAR包,再用NativeJ将Jar包生成为可执行的exe文件
开发工具:
Eclipse3.1.2 for window
SWT Designer5.0.0 for Eclipse3.1.x
NativeJ编译可执行文件
开发环境:Microsoft Windows XP sp2 Home 或者 Professional
其他:
准备excel文件,放到D:/temp下,取名为test.xls
准备access文件,设计表名为custom,四个字段,均是文本类型,字段名可以自己定,在xml文件中会用字段名作为节点名,同样放到D:/temp下,取名为test.mdb
手工建立一个ODBC,在系统DSN中建立一个名为asima的数据源,数据库文件就指向D:/temp的test.mdb
需要安装一个JRE runtime运行环境,这个可以从Sun公司网站下下到
1. 安装Eclipse3.1.2
因为Eclipse3.1.X版本要求的Java版本是1.4.1及以上,如果运行Eclipse.exe系统提示错误,如图

那么可以在Eclipse.exe目录下新建一个auto.bat,内容为:

set JAVA_HOME=c:/java1.4.2/;
set PATH=c:/java1.4.2/bin/;
eclipse.exe

这样直接运行auto.bat文件就可以运行eclipse了
2. 安装Eclipse插件SWT Designer_v5.0.0
从网站地址:http://可以下载到对应版本,解压后的目录plugins下的两个子目录,分别复制到Eclipse的features和plugins目录中这样就可以了(或者参考eclipse插件的安装)
打开Eclipse,File->New->other中我们可以看到Designer项,那么说明这个插件安装成功了(如果看不到,尝试在auto.bat在Eclipse后加入参数clean,即eclipse -clean),需要进行注册,如果机器不能上网,到一台注册过的机器中把C:/Documents and Settings/[username]/Instantiations.license复制粘贴到对应的目录中
3. 新建一个SWT/JFace Java Project工程
打开Eclipse,File->New->Other,在弹出的窗口中找到Designer(这说明安装上述插件成功),再选择SWT/JFace Java Project

在ProjectName中输入xlstoxml,然后在Project layout中选择Create separate source and output folders(这样可以把java文件和class文件分离开,方便我们对源代码的处理)

Next->,然后finish,右边的资源试图中如图

4. 添加几个读取excel和写xml需要的jar包
在xlstoxml项目上新建一个folder,取名lib,在此folder上import四个jar包(选择Archive file),分别是jdom.jar(生成xml需要使用的),三个操作7a64e58685e5aeb9335excel表的jar包:
poi-3.0-alpha1-20050704.jar、poi-contrib-3.0-alpha1-20050704.jar、
poi-scratchpad-3.0-alpha1-20050704.jar;(这一步不一定非要导入到新建的lib中来,这样做呢只是能方便管理自己的这些lib包,以下操作才是关键)
在xlstoxml项目上,右键->Build Path->Add External Archives,(也可以在Libraries中,点中Add External JARS…)加入这四个jar包,这很关键

5. 创建package包,建立class文件
完成excel文件转换成xml格式的文件,思路是将excel文件中的内容读入到Access文件中,然后再从Access文件中写入到xml文件里,那么除了主运行窗口类外,还需要连个类分别完成以上两步
在src目录上右键->New->Package,在新弹出的窗口中Name输入com.asima,然后再在此package上右键->New->Class,新弹出的窗口中Name处输入XlsToAccess,不要勾选public static void main(String[] args),然后finish
按此方法再建立一个类取名为和AccessToXml
6. 创建Application Window
在com.asima上右键->New->Designer->SWT->Application Window,弹出的Name中输入XlsToXml,勾选public static main() method,finish

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.sppm.kds.entity.Policy;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class ImportTest {

@Test
public void test01(){
File file = new File("E:\\import\\语料e69da5e887aa7a64366.xls");
readExcelAddXML(file,"E:\\import");
}

public void readExcelAddXML(File f,String path){
OutputStreamWriter pw = null;
try {
List<Policy> list = readExcelFileOutList(f);
//String tempFile = "E:\\import\\test.xml";
File file = new File(path,"tianlong.xml");
if (!file.exists()) {
file.createNewFile();
}
//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw = new OutputStreamWriter(new FileOutputStream(file),"utf-8");

pw.write("<docs>"+"\n");
pw.write("<lst>"+"\n");
pw.write("<num>"+list.size()+"</num>"+"\n");
pw.write("</lst>"+"\n");
for(int i=0;i <list.size();i++){
pw.write("<doc>"+"\n");
pw.write("<id>"+list.get(i).getId()+"</id>"+"\n");
pw.write("<title>"+list.get(i).getTitle()+"</title>"+"\n");
pw.write("<department>"+list.get(i).getDepatment()+"</department>"+"\n");
pw.write("<release_date>"+list.get(i).getRelease_date()+"</release_date>"+"\n");
pw.write("<timeliness>"+list.get(i).getTimeliness()+"</timeliness>"+"\n");
pw.write("<province>"+list.get(i).getProvince()+"</province>"+"\n");
pw.write("<category>"+list.get(i).getCategory()+"</category>"+"\n");
pw.write("<effect_level>"+list.get(i).getEffect_level()+"</effect_level>"+"\n");
pw.write("<source>"+list.get(i).getSource()+"</source>"+"\n");
pw.write("<content>"+list.get(i).getContent()+"</content>"+"\n");
pw.write("<post_date>"+list.get(i).getPost_date()+"</post_date>"+"\n");
pw.write("<issued_number>"+list.get(i).getIssued_number()+"</issued_number>"+"\n");
pw.write("<implement_date>"+list.get(i).getImplement_date()+"</implement_date>"+"\n");
pw.write("</doc>");
pw.flush();
}
pw.write("\n"+"</docs>");
pw.flush();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
pw.close();//关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}

private static List<Policy> readExcelFileOutList(File f) {
System.out.println("进入到readExcelFileOutList()");
List<Policy> list = new ArrayList<Policy>();
InputStream is = null;
try{
is = new FileInputStream(f);
Workbook rwb = Workbook.getWorkbook(is);
//获得总的Sheets,得到sheet的层数
Sheet[] sheets = rwb.getSheets();
int sheetLen = sheets.length;
//获得第一个Sheets 的结果
jxl.Sheet rs = rwb.getSheet(0);
int num_row = rs.getRows();//得到行数
int num_column=rs.getColumns();//得到列数

System.out.println("行:"+num_row+"列:"+num_column);
for(int j=1;j < num_row ;j++){
Cell[] cell = rs.getRow(j);//得到第j行的所有值

for(int column_index=0;column_index<num_column;column_index++){
String id = cell[column_index++].getContents();
String title= cell[column_index++].getContents();
String department = cell[column_index++].getContents();
String release_date = cell[column_index++].getContents();
String timeliness= cell[column_index++].getContents();
String province = cell[column_index++].getContents();
String category= cell[column_index++].getContents();
String effect_level = cell[column_index++].getContents();
String source = cell[column_index++].getContents();
String content = cell[column_index++].getContents();
String post_date= cell[column_index++].getContents();
String issued_number = cell[column_index++].getContents();
String implement_date = cell[column_index++].getContents();
list.add(new Policy(id, title, department, release_date, timeliness, province, category, effect_level, source, content, post_date,issued_number,implement_date));
}
}
} catch(Exception ex) {
ex.printStackTrace();
} finally {
try {
if(is != null) is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}

}

相关阅读

  • <em>java</em>将<em>xml</em>转为xls文件-ja

  • 乔山办公网excel表格制作
  • java解析excel生成的xml文件的方法是使用dom4j实现的。dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。1、excel生成的xm
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网