10000條txt數據轉爲excel表格數據

從網上查資料知道Java有2種進行excel數據寫入,一種jxl,另一種poi.

jxl架包下載地址帶demo:https://download.csdn.net/download/wangguidong520/12088956

先陳述下實現過程:

(1)System.getProperty("user.dir")先獲取當前應用執行的路勁;

(2)將需要解析的數據放在和可執行程序同一目錄下,/data,可以自己定義;

(3)實現解析txt數據算法,將解析數據調用jxl接口寫入到excel表格;

(4)將java程序打包成架包文件,二種方法,一種是打成普通架包,另一種是打包成可執行架包

(5)通過exe4j將java jar生成可執行.exe文件。

詳細實現過程如下:

1和2過程如下:

public static void main(String[] args) {
		String rootPath = System.getProperty("user.dir");
		String savePath = rootPath + "\\data.xls";
		System.out.println("rootPath==" + rootPath);
		System.out.println("savePath==" + savePath);
		String txtPath = rootPath + "\\data";
		File dataDir = new File(txtPath);
		mDataFile = dataDir.listFiles();
		mExcelTool = new ExcelTool(savePath);
		System.err.println("dataFile==" + mDataFile.length);
		try {
			for (int i = 0; i < mDataFile.length; i++) {
				boolean isFinsh = false;
				System.out.println("dataFile===" + mDataFile[i].getAbsolutePath());
				InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(mDataFile[i]));
				BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
				doTx(mDataFile[i].getName(), i, isFinsh, bufferedReader);
				doRx(mDataFile[i].getName(), i, isFinsh, bufferedReader);
			}
			System.out.println("==============finish=====================");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

3解析txt和寫入excel過程:

源碼分析:

(1)Workbook = Workbook.createWorkbook(new File(savePath))創建excel表格

(2)mWritableSheet = mWorkbook.createSheet(SWConstant.TX, 0);創建分頁

(3)Label label = new Label(1+mColumnNumber++, row+1,content[5+i]);

       備註:1+mColumnNumber++爲列   row+1爲行  content[5+i]爲需要寫入內容

         mWritableSheet.addCell(label);

        將數據填入表格裏

注意事項:

(1)Workbook在數據尚未寫入完前不能關閉,否則報空指針異常,直到最後一個文件解析寫入完成調wiite和close關閉即可。

public void closeExcel() {
		if (mWorkbook != null) {
			try {
				mWorkbook.write();
				mWorkbook.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
private static void doTx(String fileName, int i, boolean isFinsh, BufferedReader bufferedReader)
			throws IOException {
		int lineCount;
		int lineTemp;
		String line;
		lineTemp = 0;
		lineCount = 0;
		while ((line = bufferedReader.readLine()) != null && !isFinsh) {
			lineCount++;
			if (line.contains(TX)) {
				System.out.println("TX==start========================" + lineCount);
				lineTemp = lineCount;
			}
			if (lineTemp > 1 && lineCount == lineTemp + 4) {
				if (line.contains("========================")) {
					System.out.println("result==" + line.trim());
					mExcelTool.setColumnNumber(0);
					break;
				}
				lineTemp++;
				if (!line.contains("========================") && line.trim().length() > 0) {
					mExcelTool.writeTX(fileName,line, i);
				}
			}
		}
	}
public void writeTX(String fileName,String line,int row) {
		synchronized (this) {
			try {
				// 生成名爲“第一頁”的工作表,參數0表示這是第一頁
				// 在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
				// 以及單元格內容爲test
				if (mColumnNumber==0 && row==0) {
					System.out.println("writeTX====excel=========" + SWConstant.TX);
					mWritableSheet = mWorkbook.createSheet(SWConstant.TX, 0);
				}
				String[] content = line.trim().split("\\s+");
				//System.out.println("menus==" + content[0] +",mColumnNumber==" + mColumnNumber);
				String[] menus_TX = {EVM,PWR,FEQERR};
				for (int i = 0; i < 3; i++) {
					//內容:列:行
					Label label = null;
					if (mColumnNumber==0) {
						label = new Label(0, row+1,fileName);
						mWritableSheet.addCell(label);
					}
					label = new Label(1+mColumnNumber++, row+1,content[5+i]);
					mWritableSheet.addCell(label);
					if (row ==0) {//菜單
						if (mColumnNumber==1 ) {//文件名
							Label labelMenu = null;
							if (row==0) {
								labelMenu = new Label(0, row,"日誌文件名");
							}
							mWritableSheet.addCell(labelMenu);
						}
						StringBuffer stringBuffer = new StringBuffer();
						stringBuffer.append(content[1]);
						stringBuffer.append(content[3]);
						stringBuffer.append(content[4]);
						stringBuffer.append(" ");
						stringBuffer.append(menus_TX[i]);
						Label labelMenu = new Label(mColumnNumber, row,stringBuffer.toString());
						// 將定義好的單元格添加到工作表中
						mWritableSheet.addCell(labelMenu);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

至此,已經完成了txt文件的解析算法和jxl方式寫入數據到excel表格了,終於緩了一口氣。。。

接下來通過eclipse進行java架包封裝,2中方法如下,其中可執行架包需要jdk環境下執行,具體打包方法,考慮到篇幅長度自己網上查下就好了。

最後時刻來了,將普通的架包轉換稱爲windows下可執行文件.exe

(1)從網上下載一個exe4j工具,並安裝完成

(2)兼容32位和64位

3.添加剛生成的test.jar,同時需要添加引用的第三方架包,否則報錯  剛開始時候我就在這掉坑裏了,望後來者避之。

4.選擇執行入口類

5.Allow JRE with.....時候只允許運行一個實例 Minimum version最小版本,我電腦配置環境比較高1.6運行不起來

 

下來就一直next即可。至此,終於將我了所有實現過程和需要注意地方了。下來將研究另一種excel方式:poi

POI寫入excel:

 目測POI可以設置表格參數比較多,其實jxl也行,具體自己研究,個人覺得意義不大,數據生成後再用windows調整就行。

所以以下代碼涉及到設置style之類的都註釋掉了,只保留關鍵代碼。

public POITools(String path) {
		//創建wookbook 對應一個excel
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFFont hssfFont = workbook.createFont();
		hssfFont.setFontName("宋體");
		//hssfFont.setFontHeightInPoints((short) 10);
		//HSSFCellStyle style =workbook.createCellStyle();
		//style.setFont(hssfFont);
		//style.setWrapText(true);
		//style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
		//style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		//style.setFillBackgroundColor(IndexedColors.LIGHT_BLUE.getIndex());
		//style.setFillPattern(CellStyle.SOLID_FOREGROUND);
		//style.setBorderBottom((short) 1);
		//style.setBorderLeft((short) 1);
		//style.setBorderTop((short) 1);
		//style.setBorderRight((short) 1);
		HSSFSheet sheet = workbook.createSheet("data_poi");
//		sheet.setColumnWidth(0, 0);
//		sheet.setColumnWidth(1, 20*256);
//		sheet.setColumnWidth(2, 20*256);
//		sheet.setColumnWidth(3, 20*256);
//		sheet.setColumnWidth(4, 20*256);
		HSSFRow hssfRow = sheet.createRow(0);
		hssfRow.setHeight((short) 800);
		HSSFCell hssfCell = hssfRow.createCell(0);
		hssfCell = hssfRow.createCell(1);
		hssfCell.setCellValue("a");
		//hssfCell.setCellStyle(style);
		hssfCell = hssfRow.createCell(2);
		hssfCell.setCellValue("b");
		//hssfCell.setCellStyle(style);
		try {
			FileOutputStream fileOutputStream =new FileOutputStream(new File(path+"\\adv.xls"));
			workbook.write(fileOutputStream);
			fileOutputStream.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 

 

 

發佈了48 篇原創文章 · 獲贊 31 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章