从网上查资料知道Java有2种进行excel数据写入,一种jxl,另一种poi.

jxl架包下载地址带demo:

先陈述下实现过程:

(1)System.getProperty("user.dir")先获取当前应用执行的路劲;

(2)将需要解析的数据放在和可执行程序同一目录下,/data,可以自己定义;

(3)实现解析txt数据算法,将解析数据调用jxl接口写入到excel表格;

(4)将java程序打包成架包文件,二种方法,一种是打成普通架包,另一种是打包成可执行架包

(5)通过exe4j将java jar生成可执行.exe文件。

java读取txt文件并将数据存入数组 java读取txt文件内容生成excel_jxl

详细实现过程如下:

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环境下执行,具体打包方法,考虑到篇幅长度自己网上查下就好了。

java读取txt文件并将数据存入数组 java读取txt文件内容生成excel_jxl_02

java读取txt文件并将数据存入数组 java读取txt文件内容生成excel_java读取txt文件并将数据存入数组_03

最后时刻来了,将普通的架包转换称为windows下可执行文件.exe

(1)从网上下载一个exe4j工具,并安装完成

(2)兼容32位和64位

java读取txt文件并将数据存入数组 java读取txt文件内容生成excel_java读取txt文件并将数据存入数组_04

3.添加刚生成的test.jar,同时需要添加引用的第三方架包,否则报错  刚开始时候我就在这掉坑里了,望后来者避之。

java读取txt文件并将数据存入数组 java读取txt文件内容生成excel_数据_05

4.选择执行入口类

java读取txt文件并将数据存入数组 java读取txt文件内容生成excel_System_06

5.Allow JRE with.....时候只允许运行一个实例 Minimum version最小版本,我电脑配置环境比较高1.6运行不起来

java读取txt文件并将数据存入数组 java读取txt文件内容生成excel_jxl_07

 

下来就一直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();
		}
	}