Java实现将txt文件转成xls文件的方法

 更新时间:2018年10月11日 15:10:18   作者:Frank_lyn  
今天小编就为大家分享一篇Java实现将txt文件转成xls文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近项目用到txt文件和xls文件的转换,这里记录一下具体的思路。

下面利用java代码实现txt转xls,这里要使用到jxl.jar包,这个包是通过java来操作Excel表格的工具类库。

该jar包支持字体、数字、日期操作,能够修饰单元格属性,还能够支持图像和图表,基本上已经满足我们的日常操作,最主要的是这套API是纯Java实现的,在Windows和Linux操作系统下,它都可以正确的处理Excel文件。

具体实现代码如下:

package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class txtToxls {
    //txt文本路径
    static String txtFilePath = "D:\\Super_PLU.txt";
    //xls路径
    static String xlsFilePath = "D:\\Super_PLU.xls";
    //每一列的列名
    static String c1Name, c2Name, c3Name, c4Name, c5Name, c6Name, c7Name, c8Name;

    public static void main(String args[]) {
      // 将txt文件进行解析,保存为List
      ArrayList<TxtFile> xlsList = getTxtInfos();
      // 将List以xls保存
      TransToExcel(xlsList);
    }

    private static ArrayList<TxtFile> getTxtInfos() {
      ArrayList<TxtFile> txtFileList = new ArrayList<TxtFile>();
      BufferedReader bufferedReader = null;
      try {
        // 这里注意指定文件的编码格式
        bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(txtFilePath), "gbk"));
        String element = null;
        int index = 0;
        while ((element = bufferedReader.readLine()) != null) {
          //如果是此行为空,则跳过
          if(element.trim().equals("")){
            continue;
          }
          //第一行作为每列名称
          String[] value = element.trim().split(",");
          if (index == 0) {
            c1Name = value[0];
            c2Name = value[1];
            c3Name = value[2];
            c4Name = value[3];
            c5Name = value[4];
            c6Name = value[5];
            c7Name = value[6];
            c8Name = value[7];
            index = 1;
            continue;
          }
          //从第二行开始读取每行内容,以TxtFile形式存储
          TxtFile txtFile = new TxtFile(Integer.parseInt(value[0]), Integer.parseInt(value[1]), value[2], value[3], value[4], Integer.parseInt(value[5]), Integer.parseInt(value[6]), Integer.parseInt(value[7]));
          txtFileList.add(txtFile);
        }
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        if (bufferedReader != null) {
          try {
            bufferedReader.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
      return txtFileList;
    }

  private static void TransToExcel(ArrayList<TxtFile> txtFileList) {
    WritableWorkbook book = null;
    try {
      // 创建一个xls文件
      book = Workbook.createWorkbook(new File(xlsFilePath));
      // 生成名为'商品信息'的工作表,这里参数0表示第一页
      WritableSheet sheet = book.createSheet("商品信息", 0);
      // 在Label对象为每一列添加列名,即每一列的第一行      
      Label label1 = new Label(0, 0, c1Name);
      Label label2 = new Label(1, 0, c2Name);
      Label label3 = new Label(2, 0, c3Name);
      Label label4 = new Label(3, 0, c4Name);
      Label label5 = new Label(4, 0, c5Name);
      Label label6 = new Label(5, 0, c6Name);
      Label label7 = new Label(6, 0, c7Name);
      Label label8 = new Label(7, 0, c8Name); 
      // 将定义好列名添加到工作表中
      sheet.addCell(label1);
      sheet.addCell(label2);
      sheet.addCell(label3);
      sheet.addCell(label4);
      sheet.addCell(label5);
      sheet.addCell(label6);
      sheet.addCell(label7);
      sheet.addCell(label8);

      /*
       * 遍历传进来的List,把每一行的内容再顺序加入到工作表中,
       * 在生成数字单元格时, 必须使用Number的完整包路径 
       */
      for (int i = 0; i < txtFileList.size(); i++) {
        TxtFile p = txtFileList.get(i); 
        jxl.write.Number item_code = new jxl.write.Number(0, (i+1), p.item_code);
        jxl.write.Number plu = new jxl.write.Number(1, (i+1), p.plu);
        Label commodity = new Label(2, (i+1), p.commodity);
        Label ingredient= new Label(3, (i+1), p.ingredient);
        Label special = new Label(4, (i+1), p.special);
        jxl.write.Number use_by_date = new jxl.write.Number(5, (i+1), p.use_by_date);
        jxl.write.Number use_by_date_print = new jxl.write.Number(6, (i+1), p.use_by_date_print);
        jxl.write.Number packge_by_date_print = new jxl.write.Number(7, (i+1), p.packge_by_date_print);

        sheet.addCell(item_code);
        sheet.addCell(plu);
        sheet.addCell(commodity);
        sheet.addCell(ingredient);
        sheet.addCell(special);
        sheet.addCell(use_by_date);
        sheet.addCell(use_by_date_print);
        sheet.addCell(packge_by_date_print);
      }
      book.write();
      book.close();
    } catch (Exception e) {
      e.printStackTrace();;
    }
  }
}
  // txt文件model类
  class TxtFile {
    int item_code;
    int plu;
    String commodity;
    String ingredient;
    String special;
    int use_by_date;
    int use_by_date_print;
    int packge_by_date_print;

    public TxtFile(int item_code, int plu, String commodity, String ingredient, String special,int use_by_date, int use_by_date_print, int packge_by_date_print) {
      this.item_code = item_code;
      this.plu = plu;
      this.commodity = commodity;
      this.ingredient = ingredient;
      this.special = special;
      this.use_by_date = use_by_date;
      this.use_by_date_print = use_by_date_print;
      this.packge_by_date_print = packge_by_date_print;
    }
  }

以上这篇Java实现将txt文件转成xls文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot整合RabbitMQ中死信队列的实现

    springboot整合RabbitMQ中死信队列的实现

    死信是无法被消费的消息,产生原因包括消息TTL过期、队列最大长度达到以及消息被拒绝且不重新排队,RabbitMQ的死信队列机制能够有效防止消息数据丢失,适用于订单业务等场景,本文就来介绍一下
    2024-10-10
  • SpringBoot使用jsoup爬取HTML的方法

    SpringBoot使用jsoup爬取HTML的方法

    jsoup 是一款 Java 的 HTML 解析器,它提供了一套非常便利的 API,可通过 DOM、CSS 通过类似于 JQuery 的操作方法来取出和操作数据,这篇文章主要介绍了SpringBoot使用jsoup爬取HTML,需要的朋友可以参考下
    2024-02-02
  • 详解SpringMVC拦截器配置及使用方法

    详解SpringMVC拦截器配置及使用方法

    本篇文章主要介绍了SpringMVC拦截器配置及使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • debug模式迟迟不能启动问题及解决

    debug模式迟迟不能启动问题及解决

    在使用Debug模式进行代码测试时,由于设置了过多的断点,导致程序加载缓慢甚至无法启动,解决此问题的方法是取消不必要的断点,通过IDE的断点管理功能,检查并移除问题断点,从而优化调试效率,分享此经验希望能帮助遇到相同问题的开发者
    2022-11-11
  • SpringBoot2底层注解@Import用法详解

    SpringBoot2底层注解@Import用法详解

    这篇文章主要为大家介绍了SpringBoot2底层注解@Import用法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Spring-retry实现循环重试功能

    Spring-retry实现循环重试功能

    这篇文章主要介绍了Spring-retry 优雅的实现循环重试功能,通过@Retryable注解,优雅的实现循环重试功能,需要的朋友可以参考下
    2023-07-07
  • springboot实现获取当前服务器IP及当前项目使用的端口号Port

    springboot实现获取当前服务器IP及当前项目使用的端口号Port

    这篇文章主要介绍了springboot实现获取当前服务器IP及当前项目使用的端口号Port方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • jdk1.8的环境配置过程

    jdk1.8的环境配置过程

    Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上,本文给大家讲解jdk1.8的环境配置过程,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • Java模拟HTTP Get Post请求实现论坛自动回帖功能

    Java模拟HTTP Get Post请求实现论坛自动回帖功能

    这篇文章主要介绍了Java模拟HTTP Get Post请求实现论坛自动回帖功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Java HashMap两种简便排序方法解析

    Java HashMap两种简便排序方法解析

    这篇文章主要介绍了Java HashMap两种简便排序方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01

最新评论