`
thtwin
  • 浏览: 165028 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java代码写excel和文本文档的导入导出【转】

    博客分类:
  • J2SE
阅读更多
例子1-----》利用jxl包来完成excel导入导出

JXL包提供了JAVA环境下操作EXCEL文件的方法,可对EXCEL文件进行读写操作。总体而言这个包的使用非常简单,因工作需要对它进行了简单的应用,现写一下个人总结。

JXL包似乎对某些版本的EXCEL文件不太兼容,网站上说它支持EXCEL95-2000。不知道是不是这个原因,在读取EXCEL XP文件时(文件中使用了“数据有效性”等格式),会发出一些警告信息,虽然不影响使用,但终究不太好看。所以下面这个例子是从一个EXCEL文件中读取数据,并将数据写入另一文件中,清除掉文件中使用的所有格式。在清除掉文件中使用的格式之后,再读取这个文件就一切正常了。

import jxl.*;

import jxl.write.*;i

mport java.io.*;

public class CleanExcel {

public static void clean(String inFile, String outFile){ 

//首先需要声明输入输出流与Workbook,Workbook对应Excel文件 

InputStream is = null; 

Workbook inWb = null; 

OutputStream os = null; 

WritableWorkbook outWb = null; 

try{ 

//实例化输入输出流与Workbook  

is = new FileInputStream(inFile); 

//Workbook无法通过new关键字进行实例化,必须调用Workbook.getWorkbook(File)静态方法  

inWb = Workbook.getWorkbook(is);  

os = new FileOutputStream(outFile);  

outWb = Workbook.createWorkbook(os);  

//下面这一句是选择原文件的工作表,Sheet对应的是Excel中的Sheet  

Sheet inSheet = inWb.getSheet("Sheet1");  

//WritableSheet为要创建的文件中的工作表  

WritableSheet outSheet = outWb.createSheet("Sheet1", 0);  

//设置循环标志  

boolean flag = true;  

//循环条件  

int i = 0;     

while(flag){   

//Cell对应一个单元格,getCell方法第一个参数对应列,第二个参数对应行。   

//注意:行和列的开始坐标均为0,与JAVA中的数组一样   

Cell tmp = inSheet.getCell(0, i);   

//取得每行第一列单元格中的数据。不管单元格中的数据在EXCEL中为何种类型,读取之后都将成为String类型   

String c = tmp.getContents().trim();   

//为处理方面,EXCEL文件中最后一行的第一个单元格设置了一个break标志,读到这一行时将退出循环   

if(c.equals("break")){    

flag = false;    

break;   

}   

//我处理的EXCEL表格为8列   

for(int j = 0; j < 8; j++){   

//取得源单元格    

Cell inCell = inSheet.getCell(j, i);    

//获取数据    

String content = inCell.getContents().trim();   

//创建新单元格,并用数据填充    

Label labelCF=new Label(j, i,  content);   

//将新单元格加入到新工作表中    

outSheet.addCell(labelCF);   

}  

i++;  

}  

//写入文件  

outWb.write();  

//关闭流  

outWb.close();  

os.close();    

}catch(Exception e){  

e.printStackTrace(); 

}



//测试

public static void main(String[] args){ 

try {  

String in = "old.xls"; 

String out = "new.xls";  

CleanExcel.clean(in, out);    

} catch (Exception e) {  

e.printStackTrace(); 

}

}

}

-----------------------------------------------------------------------

例子2-----》利用jxl包来完成excel导入导出

import java.io.File;
import java.io.IOException;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class ExcelTest {

public static void main(String[] adf) {

try {
Workbook workbook = Workbook .getWorkbook(new File( "d:\\myfile.xls"));
Sheet sheet = workbook.getSheet(0);

String[] tempValue = new String[sheet.getColumns()];

for (int i = 0; i < sheet.getRows(); i++) {
for (int j = 0; j < sheet.getColumns(); j++) {
String value = sheet.getCell(j, i).getContents();
if (value.equals( " "))
value = tempValue[j];
System.out.print(value + "\t\t\t\t\t\t\t ");
tempValue[j] = value;
}
System.out.println( " ");
}

} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

-----------------------------------------------------------------------

例子3-----》利用apache包来完成excel导入导出

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

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.apache.poi.poifs.filesystem.POIFSFileSystem;

public class POITest {
private static Connection conn = null;
private static Statement stmt = null;
private static boolean connectDB2() {

  String url = "";
  String username = "username";
  String password = "password";

  //加载驱动程序以连接数据库
  try {
   //添加类库驱动包db2jcc.jar和db2jcc_license_cu.jar
   Class.forName("com.ibm.db2.jcc.DB2Driver");
   url = "jdbc:db2://192.168.0.1:50000/dbname";
   //添加类库驱动包db2java.jar
   //Class.forName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
   //url = "jdbc:db2:njtcdata";
   conn = DriverManager.getConnection(url, username, password);
   stmt = conn.createStatement();
  }
  //捕获加载驱动程序异常
  catch (ClassNotFoundException cnfex) {
   System.err.println("装载JDBC驱动程序失败。");
   cnfex.printStackTrace();
   return false;
  }
  //捕获连接数据库异常
  catch (SQLException sqlex) {
   System.err.println("无法连接数据库");
   sqlex.printStackTrace();
   //System.exit(1); // terminate program
   return false;
  }
  return true;
}

private static boolean readExcelToDB2() {
  POIFSFileSystem fs = null;
  HSSFWorkbook wb = null;
  try {
   fs = new POIFSFileSystem(new FileInputStream("c:\\test.xls"));
   wb = new HSSFWorkbook(fs);
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
  HSSFSheet sheet = wb.getSheetAt(0);
  HSSFRow row = null;
  HSSFCell cell = null;
  String name = "";
  int id = 0;
  int rowNum, cellNum;
  int i;
  rowNum = sheet.getLastRowNum();
  for (i = 0; i <= rowNum; i++) {
   row = sheet.getRow(i);
   //cellNum = row.getLastCellNum();
   cell = row.getCell((short) 0);
   name = cell.getStringCellValue();
   cell = row.getCell((short) 1);
   id = (int) cell.getNumericCellValue();
   String sql = "insert into TEST(ID, NAME) values(" + id + ",'" + name + "')";
   try {
    stmt.executeUpdate(sql);
   } catch (SQLException e1) {
    e1.printStackTrace();
    return false;
   }
  }
  return true;
}

public static void main(String[] args) {
  if (connectDB2()==true){
   if (readExcelToDB2()==true)
    System.out.println("数据导入成功");
   else
    System.out.println("数据导入失败");
  }
  else{
   System.out.println("数据库连接失败");
  }
}
}

-----------------------------------------------------------------------

例子4-----》文本文件导入例子

1、将数据按一定规律录入到一个文本文件,每一行代表一条记录。

下面是数据库建表SQL:
CREATE TABLE t_FltPsgInfo  -- 航班乘客信息

(

    FltNum  VARCHAR(10), -- 航班号

    FltLine  VARCHAR(30),  -- 航线

    FltDate  VARCHAR(10),  -- 日期

    PsgName  VARCHAR(30),  -- 姓名

    PsgType  VARCHAR(30), -- 乘客类型,数字表示,目前是1-13

    PsgSex  VARCHAR(1),  -- 0 男  1 女

    PsgCab  VARCHAR(1),  -- 几等舱, F/Y  舱位按字母顺序排列

    PsgSeatNo  VARCHAR(5),-- 座位号 2A,22F,根据这个得到一排有多少个座位,共有多少排座位信息

    PsgInfo  VARCHAR(2048) -- 详细信息,可能很长

)

我们将向表t_FltPsgInfo中插入1000条记录。

新建一个文本文件,每一行代表一条记录,如:

HU7804,广州-北京,2007-07-18,谢丽珍,3,1,C,3A,服务保障信息:未用餐随行人员…

其中以“,”作为字段的分隔标志,我们在解析这个文本文件时将根据“,”来拆分字段值。

按照上面的格式,将要插入的数据输入到文本文件中,注意,是每一行代表一条记录,或者你已有从数据库导出的文本文件,那你就只需找到文件的规律,稍作调整就行了。

2、编写Java源码

1》数据库操作类InsertDB.java

package test;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class InsertDB {

    private static final String user = "sa";

    private static final String pwd = "sa";

    private static final String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=hhfly";

    private static final String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

    public static Connection getCon() {

        Connection con = null;

        try {

            Class.forName(driver).newInstance();

            con = DriverManager.getConnection(url, user, pwd);

            if (con != null) {

                System.out.println("你已连接到数据库:"

+con.getCatalog());

            }

        } catch (Exception e) {

            System.out.println("连接数据库失败!");

            e.printStackTrace();

        }

        return con;

    }

    public boolean insertDB(String FltNum, String FltLine, String FltDate,  String PsgName, String PsgType, String PsgSex, String PsgCab,String PsgSeatNo, String PsgInfo) {

        Connection con = null;

        Statement stm = null;

        boolean flag = false;

        String sql = "insert into t_FltPsgInfo values('" + FltNum + "','" + FltLine + "','" + FltDate + "','" + PsgName + "','" + PsgType

+ "','" + PsgSex + "','" + PsgCab + "','" + PsgSeatNo + "','"+ PsgInfo + "')";

        try {

            con = getCon();

            stm = con.createStatement();

            int i = stm.executeUpdate(sql);

            if (i > 0) {

                flag = true;

                System.out.println(flag + "插入数据成功!");

            }

        } catch (Exception e) {

            flag = false;

            e.printStackTrace();

        } finally {

            close(null, stm, con);

        }

        return flag;

    }

    //关闭相关连接

    public void close(ResultSet rs, Statement stm, Connection con) {

        if (rs != null)

            try {

                rs.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

        if (stm != null)

            try {

                stm.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

        if (con != null)

            try {

                con.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

    }

}

2》数据采集类DataGather.java

package test;

import java.io.RandomAccessFile;

import java.io.UnsupportedEncodingException;

public class DataGather {

    private static final String path = "src/resource/test";

    public static final String openFileStyle = "r";

    public static final String fieldLimitChar = ",";

    public static final int fieldAllCount = 9;

    private int count;

    private String FltNum;

    private String FltLine;

    private String FltDate;

    private String PsgName;

    private String PsgType;

    private String PsgSex;

    private String PsgCab;

    private String PsgSeatNo;

    private String PsgInfo;

    /*

     * 功能:解析文本文件

     */

    public void loadFile() {

        try {

            RandomAccessFile raf = new RandomAccessFile(path,openFileStyle);

            String line_record = raf.readLine();

            while (line_record != null) {

                // 解析每一条记录

                parseRecord(line_record);

                line_record = raf.readLine();

            }

            System.out.println("共有合法的记录" + count + "条");

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

/** 功能:具体解析每一条记录,这里可以增加很多对记录的解析判断条件,如是否为字母、

* 数字、email等。 */

    private void parseRecord(String line_record) throws Exception {

     //拆分记录

        String[] fields = line_record.split(fieldLimitChar);

        if (fields.length == fieldAllCount) {

            FltNum = tranStr(fields[0]);

            FltLine = tranStr(fields[1]);

            FltDate = tranStr(fields[2]);

            PsgName = tranStr(fields[3]);

            PsgType = tranStr(fields[4]);

            PsgSex = tranStr(fields[5]);

            PsgCab = tranStr(fields[6]);

            PsgSeatNo = tranStr(fields[7]);

            PsgInfo = tranStr(fields[8]);

            System.out.println(FltNum + " " + FltLine + " " + FltDate + " " + PsgName + " " + PsgType + " " + PsgSex + " " + PsgCab + " " + PsgSeatNo + " " + PsgInfo);

            InsertDB db = new InsertDB();

            db.insertDB(FltNum, FltLine, FltDate, PsgName, PsgType, PsgSex, PsgCab, PsgSeatNo, PsgInfo);

            count++;

        }

    }

   private String tranStr(String oldstr) {

        String newstr = "";

        try {

            newstr = new String(oldstr.getBytes("ISO-8859-1"), "GBK");

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }

        return newstr;

    }

}

3》测试类Test.java

package test;

public class Test {

    public static void main(String[] args) {

        try {

            DataGather gather = new DataGather ();

            gather.loadFile();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ak_2005/archive/2008/09/14/2912507.aspx
分享到:
评论

相关推荐

    数据导入导出 (java)

    综上所述,Java在数据导入导出方面提供了强大的工具和库,通过合理的设计和实现,可以有效地处理各种数据格式,满足各种业务需求。在实践中,我们需要结合具体业务场景,选择合适的方法和技术,确保数据的安全、高效...

    java导出到excel的工具类

    在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...

    ssh 导入导出excel+百度富文本编辑器+highcharts

    综合以上,这个案例涵盖了SSH框架的综合应用,包括数据交换与报表(Excel导入导出)、用户界面增强(ueditor)、数据可视化(highcharts)以及大数据量文本处理(CLOB)。这样的案例对于提升开发者在企业级Java Web...

    Java对Excel数据导入导出工具类(含Exel单元格样式设置)

    在Java编程领域,处理Excel数据是一项常见的任务,特别是在数据分析、报表生成或数据导入导出时。本资源提供了一个使用Java语言结合jxl库实现的工具类,它简化了Excel文件的读写操作,并且允许对单元格样式进行...

    C#代码NPOI实现的Excel导入导出.rar

    这个压缩包“C#代码NPOI实现的Excel导入导出.rar”包含了实现这一功能所需的所有关键组件,包括操作类、实例和类库。 1. **NPOI基本概念**: - 工作簿(HSSFWorkbook for .xls, XSSFWorkbook for .xlsx):表示...

    execl导入导出

    "Excel导入导出"这一主题涵盖了如何将数据从外部源导入到Excel工作表,以及如何将Excel数据导出到其他格式或系统中。以下是对这个主题的详细阐述: **一、Excel数据导入** 1. **CSV导入**:CSV(逗号分隔值)是一...

    Java 设置Excel单元格对齐方式、文本旋转、换行、缩进.pdf

    在Java编程中,处理Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据导入导出等场景。本篇文章主要探讨如何使用Java来设置Excel单元格的样式,包括对齐方式、文本旋转、换行以及缩进。为了实现这些功能...

    文档导入导出小实例

    文档导入导出是信息化管理中常见的一项操作,它允许用户将数据从一种格式转换到另一种格式,以便在不同的系统或应用程序之间交换信息。在本例中,我们将关注一个使用"ling to sql"技术的小实例,这可能是一个工具或...

    java导出word、excel、pdf、txt文件,同时兼容office2003和office2007

    在处理文件导出,尤其是办公文档如Word、Excel、PDF和TXT时,Java提供了多个库来帮助开发者实现这些功能。本教程将详细介绍如何使用Java进行文件导出,并确保与Office 2003和Office 2007的兼容性。 首先,我们要...

    java 导入导出Word、excel的Jar包+例子

    在你提供的信息中,“java 导入导出Word、excel的Jar包+例子”显然涉及到两个主要的Java库:Apache POI和一个名为“JavaCaoZuoExcel”的库。Apache POI是一个广泛使用的开源项目,专门用于读写Microsoft Office格式...

    SpringBoot整合EasyExcel+MyBatis-Plus实现Excel批量导入和导出

    本文将详细介绍如何使用SpringBoot框架结合EasyExcel和MyBatis-Plus来实现Excel的批量导入和导出,从而提高数据处理效率。 首先,SpringBoot是一个轻量级的Java开发框架,它简化了Spring应用的初始搭建以及开发过程...

    POI的EXCEL导出,自动换行

    在日常工作中,经常需要处理大量的数据导入导出任务,尤其是在企业级应用开发中,Excel文件的处理成为了一项必不可少的能力。Apache POI项目提供了一系列用于读写Microsoft Office格式文件的Java API,其中包括对...

    Excel表格导入导出

    在IT领域,Excel表格的导入导出是一项常用且重要的技能,尤其在数据分析、报表制作以及数据交换等场景中。Excel由于其易用性、灵活性和强大的功能,被广泛应用于各种行业。下面我们将深入探讨Excel表格的导入导出,...

    JXL、POI实现Excel导入导出

    以上就是关于使用JXL和Apache POI实现Excel导入导出的基本知识。根据实际需求,你可以结合这两个库的功能,灵活地处理各种Excel文件操作。在实际项目中,通常会根据性能、功能需求以及文件兼容性等因素选择适合的库...

    导出excel此单元格中的数字为文本格式,或者其前面有撇号

    在Excel中,数字前出现撇号(')或者...通过编写自定义转换器,可以有效地处理这类问题,确保数据在导入导出过程中的准确性。同时,要记得在使用EasyExcel时,合理设置单元格的数据类型和格式,避免不必要的转换错误。

    java_导入导出_Excel_word

    ### Java导入导出Excel与Word技术详解 #### 一、Java操作Excel技术 在Java中,我们可以使用Apache POI库来实现对Excel文件的操作。Apache POI是一个流行的API,它允许程序员创建、修改和显示MS Office文件(如...

    导入导出Word文档、Execle表格

    总之,Java提供了强大的库,如Apache POI,来支持Word文档和Excel表格的导入导出。通过熟练掌握这些API,开发者可以轻松地在Java应用程序中实现对这些文件的高效处理,提高数据管理的灵活性和效率。

    java中导入导出Excel文件

    ### Java中导入导出Excel文件知识点详解 #### 一、POI简介 **Jakarta POI** 是 Apache 的一个子项目,旨在处理 Microsoft Office 文件格式。它为开发者提供了丰富的 API 来读取、写入、修改 Microsoft Office 文件...

    非常全的实现Excel导入导出

    在IT行业中,Excel数据的导入和导出是日常工作中常见的任务,..."Desktop.rar"文件可能包含示例代码或模板,供学习者参考和实践Excel导入导出的技巧。通过不断学习和实践,可以提高在Excel数据处理方面的效率和能力。

Global site tag (gtag.js) - Google Analytics