将网页中的table导入excel2007

原创 2013年12月04日 09:51:00

公司为了测试单板的性能,使用firefox工具查看每个请求的,因此使用了firebug的YSlow工具,但是每个选项都必须复制黏贴很是麻烦,因此这里写了一个小程序,将网页中的table导入到excel中

 

以前使用的jxl.jar这个工具包不支持office2007,为了解决这方面的问题,可以使用apache的POI。

 

现在大家已经慢慢的熟悉了office2007的操作,因此我也就用07作为示范了例子

 

模拟一个table例子

<html> 
<head> 
<TITLE>class_obj_js_class</TITLE> 
<body > 
    <table>
		<tr>
			<td style="color:#00ff00">01</td>
			<td>02</td>
			<td>03</td>
		</tr>
		<tr>
			<td>11
			</td>
			<td>12</td>
			<td>13</td>
		</tr>
		<tr>
			<td style="color:#ff0000">2
			1</td>
			<td>22</td>
			<td>23</td>
		</tr>
	</table>
</body> 
</html>

 

 

读取网页中的table

package hb.com;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class TableToExcel {

	//因为网页中可能对标签设置样式,因此只能根据前面的一部分可以判断
	private static String ROW_FLAG_BEGIN = "<tr";
	private static String ROW_FLAG_END = "</tr";
	private static String COL_FLAG_BEGIN = "<td";
	private static String COL_FLAG_END = "</td";
	private static int NOT_HAS_STRING = -1;
	
	public static void main(String[] args) {
		
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("temp.html")));
			String temp;
			String result = "";
			//XSSFWorkbook创建的对象可以操作office2007,而HSSFWorkbook()创建的对象只能控制2003之前的版本
			Workbook wb = new XSSFWorkbook();
//			Workbook wb = new HSSFWorkbook();
			Sheet sheet = wb.createSheet("huangbiao test");
			int begin,end;
			int rowNum = -1, colNum = -1;
			Row row = null;
			Cell cell = null;
			//判断某一列内容是否已经结束
			boolean hasContent = false;
			
			while((temp = br.readLine()) != null){
				begin = temp.indexOf(TableToExcel.COL_FLAG_BEGIN);
				end  = temp.indexOf(TableToExcel.COL_FLAG_END);
				if(temp.indexOf(TableToExcel.ROW_FLAG_BEGIN) != TableToExcel.NOT_HAS_STRING){
					rowNum = rowNum + 1;
					colNum = -1;
					row = sheet.createRow(rowNum);
				}else{
					
				}
				//当前行有<td>标签
				if(begin != TableToExcel.NOT_HAS_STRING)
				{
					colNum = colNum + 1;
					hasContent = true;
					cell = row.createCell(colNum);
					//表明<td></td>两个标签在同一行
					if(end != TableToExcel.NOT_HAS_STRING)
					{
						result = TableToExcel.getInSameRow(temp);
						cell.setCellValue(result);
						hasContent = false;
					}else{
						//表明<td></td>两个标签不在同一行,且只有开始标签,没有结束标签
						result = TableToExcel.getInDiffRow(temp);
					}
					
				}
				//当前行没有<td>标签
				else{
					//当前行有</td>标签且没有开始标签,需要把前面的数据插入到excel中
					if(end != TableToExcel.NOT_HAS_STRING)
					{
						result = result + TableToExcel.getInBeforRow(temp);
						cell.setCellValue(result);
						hasContent = false;
					}
				}
			}
			
			// Write the output to a file
		    FileOutputStream fileOut = new FileOutputStream("test.xlsx");
		    wb.write(fileOut);
		    fileOut.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//获取<td></td>标签中间的字符串
	public static String getInSameRow(String str){
		//<(.*)> .* <\/\1> 
		Pattern p = Pattern.compile("(<td(.*)>)(.*)<\\/td>");
		Matcher m = p.matcher(str);
		//m.find()方法一定不能少,否则后面的group()方法通不过
		System.out.println(m.find());
		System.out.println(m.group(3));
		return m.group(3);
	}
	
	//获取<td标签后面的字符串
	public static String getInDiffRow(String str){
		//<(.*)> .* <\/\1> 
		Pattern p = Pattern.compile("(<td(.*)>)(.*)");
		Matcher m = p.matcher(str);
		//m.find()方法一定不能少,否则后面的group()方法通不过
		System.out.println(m.find());
		System.out.println(m.group(3));
		return m.group(3);
	}
	
	//获取结束行前面的字符串
	public static String getInBeforRow(String str){
		//<(.*)> .* <\/\1> 
		Pattern p = Pattern.compile("(.*)<\\/td>");
		Matcher m = p.matcher(str);
		//m.find()方法一定不能少,否则后面的group()方法通不过
		System.out.println(m.find());
		System.out.println(m.group(1));
		return m.group(1);
	}
}

 

读取excel中的数据,然后做相应的修改

package hb.com;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcel {
	
	public static String fileName = "test.xlsx";
	
	public static void main(String[] args) {
		ReadExcel.readAndRewrite(fileName);
	}
	
	public static void readAndRewrite(String fileName){
		InputStream inp;
		try {
			inp = new FileInputStream(fileName);
			Workbook wb = WorkbookFactory.create(inp);
			//遍历所有的数据
			ReadExcel.IteratorRowCell(wb);
			//将excel的第一行第一列的数据改为huangbiao
		    Sheet sheet = wb.getSheetAt(0);
		    Row row = sheet.getRow(0);
		    Cell cell = row.getCell(0);
		    //给指定的单元格设定值
		    if (cell != null){
		    	cell.setCellValue("huangbiao");
		    }
		    //设定完值之后然后通过数据流写入文件中保存起来
		    FileOutputStream fileOut = new FileOutputStream(fileName);
		    wb.write(fileOut);
		    fileOut.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvalidFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//遍历所有的数据
	public static void IteratorRowCell(Workbook wb){
		Sheet sheet = wb.getSheetAt(0);
		for (Iterator<Row> rit = sheet.rowIterator(); rit.hasNext(); ) {
			Row row = rit.next();
			for (Iterator<Cell> cit = row.cellIterator(); cit.hasNext(); ) {
				Cell cell = cit.next();
				// Do something here
				System.out.println(cell);
			}
		}
	}
}

 

相关文章推荐

JS 导出网页中Table内容到excel

var idTmr; function method1(tableid) {//整个表格拷贝到EXCEL中 var curTbl = document.ge...
  • kalision
  • kalision
  • 2012年12月20日 16:37
  • 37918

[JSP]导出网页中的table到excel

不过上次那个sql>>excel的功能我觉得不是很好,因为数据是导出来了,可是数据的相关属性和名称,每一列的数据分别是什么都看不到了。。必须对照着sql的列名来判断,这样比较麻烦,客户肯定也不会满意。...
  • zzsyzjb
  • zzsyzjb
  • 2011年07月20日 11:01
  • 272

JSP结合JXL.jar包实现网页Table显示读取到的Excel表格

最近我的每日一讲是JSP结合JXL.jar包实现网页显示读取的Excel表格,话说和JXL.jar。去年就是讲它和数据库的结合。 好了言归正传、在实现之前先认识几个JXL.jar中的方法:读取一个工...

关于Java使用POI对Excel2003和2007的导入和导出

关于Java使用POI对Excel2003和2007的导入和导出

poi/jxls导入/导出Excel工具类(支持2003和2007)

1、ExportUtil导出工具类(根据模板导出),支持2003/2007不同excel格式文件 [html] view plain copy package o...

导入EXCEL2007报错"外部表不是预期的格式错误"的解决方法

错误经过:在读取Excel时,出现外部表不是预期的格式 错误原因1: 由于Excel 97-2003的连接格式与Excel 2007 的 不同造成。 以下是从网上摘抄原文 Excel...

关于java导入导出excel2007

由于公司之前用的导入导出e'x
  • wjs7740
  • wjs7740
  • 2014年07月30日 16:08
  • 708

Excel2007导入Sql2008

今天在做项目的时候,本地有一张客户表需要手动添加到数据库中。一下是导入方法: 首页开启导入功能,并允许进程中使用ACE.OLEDB.12: --开启导入功能 exec sp_configure...
  • xs_zgsc
  • xs_zgsc
  • 2012年12月20日 11:47
  • 1149
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将网页中的table导入excel2007
举报原因:
原因补充:

(最多只允许输入30个字)