软件编程
位置:首页>> 软件编程>> java编程>> Java实现将txt文件转成xls文件的方法

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

作者:Frank_lyn  发布时间:2022-05-20 10:21:25 

标签: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;
   }
 }

来源:https://blog.csdn.net/omelon1/article/details/78783851

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com