台灣最大程式設計社群網站
線上人數
1145
 
會員總數:244123
討論主題:188483
歡迎您免費加入會員
討論區列表 >> Java >> 如何用jxl讀txt檔轉成Excel
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何用jxl讀txt檔轉成Excel
價值 : 100 QP  點閱數:336 回應數:7

樓主

883065
門外漢
0 2
38 9
發送站內信


我是一個初學者 目在IO的應用部分遇到瓶頸
需要判斷TXT檔的項目和格式是否正確,最後輸出特定的Excel
想要使用 JXL來作 在此請各位能多多幫忙

問題
讀取TXT檔轉成Excel檔
(輸出檔名為 系統日期 + _ + 作者 ) ex: 2018.8.24_author.xlsx


讀TXT檔的內容如下 (要判斷是否為4個項目 和 年齡(第3項)是否為數字)
*Input TXT檔
1001,考生01,18,台灣 (正常)
1002,考生02,中國 (異常)
1003,考生03,20,日本 (正常)
1004,考生04,2A,新加坡 (異常)
1005,考生05,26,馬來西亞 (正常)

*Output Excel檔
ID 名字 年齡 國籍
1001 考生01 18 台灣
1003 考生03 20 日本
1005 考生05 26 馬來西亞

正常:XXX件 異常:XXX件 合計:XXX件

搜尋相關Tags的文章: [ IO ] , [ Excel ] , [ JXL ] ,
本篇文章發表於2018-08-24 01:55
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

香帥
檢舉此回應
請參考
https://blog.csdn.net/hongjingchao/article/details/51734556
本篇文章回覆於2018-08-25 10:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

883065
檢舉此回應
感謝 香帥 您的回覆
其實我當初想試著練習這題 就是因為看到這個範例想在做延伸應用
想要加入判斷後再輸出
所以架構上其實跟這個非常相識
但是執行後發現 都沒有反應(跑不出結果)
或許技術自身還不太純熟 因此想參考各位的寫法
本篇文章回覆於2018-08-25 12:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

883065
檢舉此回應

想過split來判斷有幾項 (要判斷是否為4個項目)
private boolean checkNumber(String str) {
String data[] = str.split(",");

if (data.Length != 4)
return false;

if (!checkNumberStr(data[2])
return false;
}
也想到可以用正則來判斷是否為"數字" (年齡(第3項)是否為數字)
public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
}


如果上述有打錯的部分 也請不吝指教


目前差在最終整合時
1.判斷txt後只輸出(正常)的資料
2.依照對印的位置填寫入Excel
3.下方能顯示 正常的件數 異常件數 合計件數

期望最後可以輸出如下圖的Excel表



懂得任何一部分的人 也歡迎在此提出
希望能集合大家的智慧 便能夠迅速解決
本篇文章回覆於2018-08-26 18:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

ㄚ鈞
檢舉此回應
package practice.selfPractice;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class pra04 {
//讀取的txt文件路徑
private static String txtFilePath = "D:\\project\\practice\\practice\\src\\practice\\selfPractice\\testJXL02.txt";

//生成的excel文件路徑
private static String excelFilePath = new StringBuffer().append("D:/project/practice/practice/src/practice/selfPractice/")
.append("數據").append(new SimpleDateFormat("YYYYMMdd").format(new Date())).append(".xls").toString();

//編碼格式
private static String encoding = "UTF-8";

public static void readAndWrite(String filePath) throws Exception {
File file = new File(filePath);
File tempFile = new File(excelFilePath);

//判斷文件是否存在
if (file.isFile() && file.exists()){
String[] header = {"ID","名字","年齡","國籍"};
InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);//考慮到編碼格式
BufferedReader bufferedReader = new BufferedReader(read);
WritableWorkbook workbook = Workbook.createWorkbook(tempFile);
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
//一些臨時變數,用於寫到excel中
Label l = null;
String lineTxt = null;
//設置字體為宋體,11號
WritableFont headerFont = new WritableFont(WritableFont.createFont("宋體"), 11, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
WritableCellFormat headerFormat = new WritableCellFormat(headerFont);
// 置中對齊
headerFormat.setAlignment(Alignment.CENTRE);

//設置單元格寬度
sheet.setColumnView(0, 20);
sheet.setColumnView(1, 35);
sheet.setColumnView(2, 15);
sheet.setColumnView(3, 35);

String[] cols = null;
int i = 0, valid = 0, inValid = 0;
//印表頭
for(int j=0, len=header.length; j<len; j++) {
l = new Label(j, i, header[j], headerFormat);
sheet.addCell(l);
}
i++;
while((lineTxt = bufferedReader.readLine()) != null){
cols = lineTxt.split(",");
if(cols.length != 4) {
inValid++;
continue;
}
valid++;
for(int j=0; j<4; j++) {
l = new Label(j, i, cols[j], headerFormat);
sheet.addCell(l);
}
i++;
}
//加個空白行
l = new Label(0, i++, "", headerFormat);
sheet.addCell(l);

sheet.mergeCells(0,i,3,i);
l = new Label(0, i, "正常:"+valid+"件 異常:"+inValid+"件 合計:"+(valid+inValid)+"件", headerFormat);
sheet.addCell(l);


//寫入文件
workbook.write();
//關閉文件
workbook.close();
read.close();
}
else{
System.out.println("找不到指定的文件");
}
}
public static void main(String argv[]) throws Exception {
readAndWrite(txtFilePath);
}
}
本篇文章回覆於2019-02-21 16:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

ㄚ鈞
檢舉此回應
讀取的文字檔

產生的excel檔
本篇文章回覆於2019-02-21 17:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

ㄚ鈞
檢舉此回應
我第一次回覆文章中夾入圖片,送出後發現圖片看不到,文章又沒法修改, 只好在發一次試試, 我換一個圖片上傳網站上傳試試
讀取的文字檔

產生的excel檔
本篇文章回覆於2019-02-21 17:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

ㄚ鈞
檢舉此回應
抱歉沒看清楚題目,請更換以下這行以改正excel產出之檔名
//生成的excel文件路徑
private static String excelFilePath = new StringBuffer().append("D:/project/practice/practice/src/practice/selfPractice/")
.append(new SimpleDateFormat("YYYY.MM.dd").format(new Date())).append("_author.xls").toString();

另外JXL似乎不支援xlsx副檔名, 只能將就著用.xls了^^"
本篇文章回覆於2019-02-21 17:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.