從網上查資料知道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();
}
}