Java实现从Excel文件转换成XML文件(二)

本文详细介绍了如何使用Java编程实现将Excel文件转换为XML文件的过程,包括XlsToAccess.java、AccessToXml.java和XlsToXml.java三个关键步骤的代码编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7.     编写代码XlsToAccess.java

 

 

package  com.asima;

import  java.io.FileInputStream;
import  java.sql.Connection;
import  java.sql.DriverManager;
import  java.sql.PreparedStatement;

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;

/**
 *
 * 
@author asima
 * @data  2006-10-18
 
*/

public   class  XlsToAccess
{
    HSSFSheet    globalSheet    
= null;
    
    
/*读取一个指定单元格内容*/
    
public String readCellValue(String pos)
    
{
        
int xpos;
        
short ypos;
        
int cellType;  /*取得此单元格的类型 0-Numeric,1-String,3-null*/
        String result; 
/*返回取得的单元格的值*/

        ypos 
= (short) (pos.toUpperCase().charAt(0- 65);
        xpos 
= Integer.parseInt(pos.substring(1, pos.length())) - 1;

        HSSFRow row 
= null;  /* 定义excel中的行 */
        HSSFCell cell 
= null;  /* 定义excel中的单元格 */

        
/* 根据xPos和yPos取得单元格 */
        row 
= globalSheet.getRow(xpos);
        cell 
= row.getCell(ypos);
        
/** **************此处如果是空需要修改********************************** */

        cellType 
= cell.getCellType();
        
switch (cellType)
        
{
            
case 0/* 0-Numeric */
                result 
= String.valueOf(cell.getNumericCellValue());
                
break;
            
case 1/* 1-String */
                result 
= cell.getStringCellValue();
                
break;
            
case 3/* 3-null */
                result 
= "";
                
break;
            
default:
                result 
= "";
                
break;
        }


        
return result;
    }


    
/*读取excel文件并把内容插入到access表中*/
    
public void insertIntoTable() throws Exception
    
{
        
// 创建对Excel工作簿文件的引用
        HSSFWorkbook workbook = 
            
new HSSFWorkbook(new FileInputStream("D:/temp/test.xls"));
        
// 获得一个sheet
        globalSheet = workbook.getSheetAt(0);

        String value1 
= readCellValue("c1");
        String value2 
= readCellValue("c2");
        String value3 
= readCellValue("c3");
        String value4 
= readCellValue("c4");

        System.out.println(value1);
        System.out.println(value2);

        
/* 插入数据库 */
        Class.forName(
"sun.jdbc.odbc.JdbcOdbcDriver");
        String url 
= "jdbc:odbc:asima";

        Connection conn 
= DriverManager.getConnection(url);
        PreparedStatement stmt 
= 
           conn.prepareStatement(
"insert into custom values(?,?,?,?)"); 
        
// 定义查询的SQL语句
        stmt.setString(1, value1);
        stmt.setString(
2, value2);
        stmt.setString(
3, value3);
        stmt.setString(
4, value4);
        stmt.executeUpdate();

        stmt.close(); 
// 关闭statement
        conn.close(); // 关闭连接
    }
    
}

8.     编写代码AccessToXml.java

package  com.asima;

import  java.io.FileOutputStream;
import  java.sql.Connection;
import  java.sql.DriverManager;
import  java.sql.ResultSet;
import  java.sql.ResultSetMetaData;
import  java.sql.Statement;

import  org.jdom.Document;
import  org.jdom.Element;
import  org.jdom.output.Format;
import  org.jdom.output.XMLOutputter;

/**
 *
 * 
@author asima
 * @data  2006-10-18
 
*/

public   class  AccessToXml
{
    
public void buildXML() throws Exception
    
{
        Class.forName(
"sun.jdbc.odbc.JdbcOdbcDriver");
        String url 
= "jdbc:odbc:asima";

        
// Connection conn = DriverManager.getConnection(url,"","");
        Connection conn = DriverManager.getConnection(url);
        Statement stmt 
= conn.createStatement();

        
// 创建一个statement
        String sql = "select * from custom"// 定义查询的SQL语句
        ResultSet rs = stmt.executeQuery(sql); // 执行查询
        
// 创建文档
        Document document = new Document(new Element("联系人列表"));
        ResultSetMetaData rsmd 
= rs.getMetaData(); // 获取字段名
        int numberOfColumns = rsmd.getColumnCount(); // 获取字段数
        int i = 0;

        
while (rs.next())
        
{   // 将查询结果取出
            Element element0 = new Element("联系人"); 
            
//创建元素 生成JDOM树
            document.getRootElement().addContent(element0);
            
for (i = 1; i <= numberOfColumns; i++)
            
{
                
//xml编码转换
                String date = rs.getString(i);
                Element element 
= 
                      
new Element(rsmd.getColumnName(i)).setText(date);
                element0.addContent(element);
            }

        }

        rs.close(); 
// 关闭结果集
        stmt.close(); // 关闭statement
        conn.close(); // 关闭连接
        XMLOutputter outp = new XMLOutputter();
        Format fm 
= org.jdom.output.Format.getPrettyFormat();
        fm.setEncoding(
"GB2312");
        outp.setFormat(fm);

        
// 输出XML文档
        outp.output(document, new FileOutputStream("d:/temp/test2.xml")); 
        System.out.print(
"XML 文档生成完毕!");
    }

}

9.     编写代码XlsToXml.java

package  com.asima;

import  org.eclipse.jface.dialogs.MessageDialog;
import  org.eclipse.swt.SWT;
import  org.eclipse.swt.events.SelectionAdapter;
import  org.eclipse.swt.events.SelectionEvent;
import  org.eclipse.swt.widgets.Button;
import  org.eclipse.swt.widgets.Display;
import  org.eclipse.swt.widgets.Label;
import  org.eclipse.swt.widgets.Shell;
import  org.eclipse.swt.widgets.Text;

/**
 *
 * 
@author asima
 * @data  2006-10-18
 
*/

public   class  XlsToXml
{
    
/**
     * Launch the application
     * 
@param args
     
*/

    
public static void main(String[] args) 
    
{
        
final Display display = Display.getDefault();
        
final Shell shell = new Shell();
        shell.setSize(
500375);
        shell.setText(
"excel文件转化成xml文件"); 
        shell.open();

        
final Label label = new Label(shell, SWT.NONE);
        label.setText(
"参数内容");
        label.setBounds(
15256716);

        
final Text text = new Text(shell, SWT.BORDER);
        text.setBounds(
882217520);

        
final Button button = new Button(shell, SWT.NONE);
        button.addSelectionListener(
new SelectionAdapter() {
            
public void widgetSelected(final SelectionEvent e)
            
{
                XlsToAccess aa 
= new XlsToAccess();
                
try
                
{
                    aa.insertIntoTable();
                }

                
catch(Exception ex)
                
{
                    System.out.println(ex);
                }
 
                MessageDialog.openInformation(
null,"","导入Access数据库成功!");
            }

        }
);
        button.setText(
"Excel到access");
        button.setBounds(
5010512555);

        
final Button button_1 = new Button(shell, SWT.NONE);
        button_1.addSelectionListener(
new SelectionAdapter() {
            
public void widgetSelected(final SelectionEvent e)
            
{
                AccessToXml bb 
= new AccessToXml();
                
try
                
{
                    bb.buildXML();
                }

                
catch(Exception ex)
                
{
                    System.out.println(ex);
                }
  
                MessageDialog.openInformation(
null,"","生成XML文件成功!");
            }

        }
);
        button_1.setText(
"从access到xml");
        button_1.setBounds(
19511014050);
        shell.layout();
        
while (!shell.isDisposed())
        
{
            
if (!display.readAndDispatch())
                display.sleep();
        }

    }

}

10.     关联swt包的原生库

       以上代码写好之后,编译会报错误

       java.lang.UnsatisfiedLinkError: no swt-win32 -3139 in java.library.path

       因为在 3.1.2 中这个swt需要使用到Eclispe提供的一个dll文件原生库,

ECLIPSE_HOME/plugins/中,找到org.eclipse.swt.win32.win32.x86_ 3.1.2 .jar

rar软件打开此jar文件,把swt-win32-3139.dll文件解压到机器上的jre目录的bin目录下,这样编译才能通过(如果机器中的jre目录太多,不妨逐个jre里面都粘贴,总有一个可以满足)

11.     运行程序

       根据以上程序的设置,那么需要在D:/建立一个temp文件夹,然后把准备好的Access文件test.mdbexcel文件test.xls放到temp文件夹中

       XlsToAccessAccessToXml两个类中可以看到使用了jdbc-odbc桥来连接access数据文件,那么需要我们建立ODBC数据源,根据程序段jdbc:odbc:asima,建立系统DSN,指定数据源名称为asima,文件就指定以上test.mdb

      

先点Excelaccess,再点accessxml,然后我们就可以看到在d:/temp目录下新产生了一个xml文件test.xmlOK

 

Java实现从Excel文件转换成XML文件(一)

Java实现从Excel文件转换成XML文件(三)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值