java实现任意带table表格的html页面,生成与表格相同内容的excel文件
2016-09-23 12:23
1281 查看
java学习手册下载 楼主自己开发的象棋棋谱app,含10万棋谱
要求: 要求能够实现给出任意带table表格的html文件,生成与表格相同内容的excel文件,附件可以作为测试文件,提供给定的roster.html文件,通过java代码,实现生成与html页面的table相同样式的roster.xls文件。
首先看roster.html:
然后是生成的excel:
解释都写在了代码中。
实现代码如下:
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class HTMLTOExcel { public static void main(String args[]) throws IOException{ ///读取classpath目录下面的路径 String path=HTMLTOExcel.class.getResource("/").getPath(); path+="roster.html"; toExcel(path,"roster"); } //得到Document并且设置编码格式 public static Document getDoc(String fileName) throws IOException{ File myFile=new File(fileName); Document doc= Jsoup.parse(myFile, "GBK",""); return doc; } ///这个方法用于根据trs行数和sheet画出整个表格 public static void mergeColRow(Elements trs,WritableSheet sheet) throws RowsExceededException, WriteException{ int[][] rowhb=new int[300][50]; for(int i=0;i<trs.size();i++){ Element tr=trs.get(i); Elements tds=tr.getElementsByTag("td"); int realColNum=0; for(int j=0;j<tds.size();j++){ Element td=tds.get(j); if(rowhb[i][realColNum]!=0){ realColNum=getRealColNum(rowhb,i,realColNum); } int rowspan=1; int colspan=1; if(td.attr("rowspan")!=""){ rowspan = Integer.parseInt(td.attr("rowspan")); } if(td.attr("colspan")!=""){ colspan = Integer.parseInt(td.attr("colspan")); } String text=td.text(); drawMegerCell(rowspan,colspan,sheet,realColNum,i,text,rowhb); realColNum=realColNum+colspan; } } } ///这个方法用于根据样式画出单元格,并且根据rowpan和colspan合并单元格 public static void drawMegerCell(int rowspan,int colspan,WritableSheet sheet,int realColNum,int realRowNum,String text,int[][] rowhb) throws RowsExceededException, WriteException{ for(int i=0;i<rowspan;i++){ for(int j=0;j<colspan;j++){ if(i!=0||j!=0){ text=""; } Label label = new Label(realColNum+j,realRowNum+i,text); WritableFont countents = new WritableFont(WritableFont.TIMES,10); // 设置单元格内容,字号12 WritableCellFormat cellf = new WritableCellFormat(countents ); cellf.setAlignment(jxl.format.Alignment.CENTRE);//把水平对齐方式指定为居中 cellf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//把垂直对齐方式指定为居 label.setCellFormat(cellf); sheet.addCell(label); rowhb[realRowNum+i][realColNum+j]=1; } } sheet.mergeCells(realColNum,realRowNum, realColNum+colspan-1,realRowNum+rowspan-1); } public static int getRealColNum(int[][] rowhb,int i,int realColNum){ while(rowhb[i][realColNum]!=0){ realColNum++; } return realColNum; } ///根据colgroups设置表格的列宽 public static void setColWidth(Elements colgroups,Writabl acb3 eSheet sheet){ if(colgroups.size()>0){ Element colgroup=colgroups.get(0); Elements cols=colgroup.getElementsByTag("col"); for(int i=0;i<cols.size();i++){ Element col=cols.get(i); String strwd=col.attr("width"); if(col.attr("width")!=""){ int wd=Integer.parseInt(strwd); sheet.setColumnView(i,wd/8); } } } } //toExcel是根据html文件地址生成对应的xls public static void toExcel(String fileName,String excelName)throws IOException{ Document doc=getDoc(fileName); String title = doc.title(); ///得到样式,以后可以根据正则表达式解析css,暂且没有找到cssparse Elements style= doc.getElementsByTag("style"); ///得到Table,demo只演示输入一个table,以后可以用循环遍历tables集合输入所有table Elements tables= doc.getElementsByTag("TABLE"); if(tables.size()==0){ return; } Element table=tables.get(0); //得到所有行 Elements trs = table.getElementsByTag("tr"); ///得到列宽集合 Elements colgroups=table.getElementsByTag("colgroup"); try { //文件保存到classpath目录下面 String path=HTMLTOExcel.class.getResource("/").getPath(); path+=excelName+".xls"; System.out.println(path); WritableWorkbook book = Workbook.createWorkbook(new File(path)); WritableSheet sheet = book.createSheet("人事关系", 0); setColWidth(colgroups,sheet); mergeColRow(trs,sheet); book.write(); book.close(); } catch (RowsExceededException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } }
Demo下载 地址
最后,如果大家对学安卓感兴趣,请请下载安卓108例子:108例子,源码例子文档一网打尽。
相关文章推荐
- 点击修改table表格的内容,点击页面别的地方或按Enter键生成修改(javaquery语句)
- java html内容生成word文件实现代码
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- 合并不同目录下,相同文件的内容(java实现)
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- php页面静态化 适用于添加 更新文章内容 模板文件生成html
- Java和.Net版通用工具类实现--生成自定义Web Html/Excel测试用例和测试报告
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- java web应用中自动生成文章html页面的实现
- JXL包大解析;Java程序生成excel文件和解析excel文件内容
- 如何用java实现在网页中保存html编辑器 编辑好的 html 文件?!(如blog里发文章的时候把要发表的内容以html文件的形式保存到服务器上?)
- 利用JS将TABLE内容生成EXCEL文件
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- java 实现页面上的table导出为EXCEL
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
- 使用jQuery实现页面表格中相同内容的行或列合并[转载]
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例 .