从网上查资料知道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文件。
详细实现过程如下:
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();
}
}