当前位置:编程学习 > JAVA >>

poi写入excel求助

我有三个网页table的数据要写入到excel里面,排成两列,第一列两个table,第二列一个table。
写入的思路是,每读取一个<tr>的数据就create一个row,知道第一列的两个table全写入完毕,然后再写入第三个table,此时把原来的rowNum从新赋予4,目的是从第二列的开头写入,然后再给row从第8个cell开始写入,目的是为了排成两列。
预期的结果是这样的
但是运行之后的结果却是如图这样的

我把被写入数据cell的位置和内容都打印出来,结果是和预期的布局一样,但是实际上却没有达到那种效果

于是我单独打印第一列和第二列的内容,各列数据位置都正常

所以我觉得是“此时把原来的rowNum从新赋予4,目的是从第二列的开头写入,然后再给row从第8个cell开始写入,目的是为了排成两列。”这里出现了问题。但是为什么自己没有检查出来,希望给我帮忙看看

下面是我贴出的代码

try {
File input = new File("C:/Users/Administrator/Desktop/finance.html");  
            Document doc = Jsoup.parse(input, "UTF-8");  
            // 提取出所有的编号  

            Elements panels = doc.getElementsByClass("panel-default");
         int rowNum = 4; //表格开头预留四行,为了填写标题
         int tableNum = 1;
            for (Element panel : panels) {          
                       
             Elements table = panel.getElementsByTag("table");
            
             if(table.html().length() != 0){
            
            
             int offSet = 0;
             if(tableNum == 1){
            
             }else if(tableNum == 3){
             offSet = 8;
             rowNum =4;
             }else if(tableNum == 4){
             offSet = 16;
            
             }
            
                 Elements panelHeader = panel.getElementsByClass("panel-heading");
                 panelHeader.text();
                 Elements thead = table.select("thead");
                 Elements tbody = table.select("tbody");
                 Elements ths = thead.select("th");
                
                 //创建填写表格头信息行
                 if(sheet.getRow(rowNum) == null){
                 row = sheet.createRow(rowNum);
                 }
                
                 //填写表格头信息
                 int i=0;
                 for (Element th : ths){                        
                 Cell cell = null;
                 if(row.getCell(i + offSet) == null){
                 cell = row.createCell(i + offSet);
                 }else{
                 cell = row.getCell(i + offSet);
                 }
                 cell.setCellValue(th.text());                                 
                 i++;
                                
                 }
                
                 //开辟表格标题行,并填写标题
                 CellRangeAddress region = new CellRangeAddress(rowNum-2, rowNum-1, 0 + offSet, i-1 + offSet);
                 sheet.addMergedRegion(region);
                 row = sheet.createRow(rowNum-2);
                 Cell cell1 = null;
                 cell1 = row.createCell(0 + offSet);
                 cell1.setCellValue(panelHeader.text());
                                
                 //创建表格内容行,并填写内容
                 Elements trs = tbody.select("tr");
                 for (Element tr : trs) {
                
                 //先创建内容行
                     if(sheet.getRow(++rowNum) == null){
                     row = sheet.createRow(rowNum);
                     }
                    
                 //填写内容
                      Elements tds = tr.select("td");
                      int j = 0;
                 for (Element td : tds){                
                 Cell cell = null;
                 if(row.getCell(j + offSet) == null){
                 System.out.println("body cell 不存在");
                 cell = row.createCell(j + offSet);
                 }else{
                 System.out.println("body cell 存在");
                 cell = row.getCell(j + offSet);
                 }
                     if(isNumeric(td.text()) || isDouble(td.text())){
                     cell.setCellValue(Double.valueOf(td.text()));
                     }else{
                     cell.setCellValue(td.text());
                     }
                 j++;
                 } 
                 }
                 //给表格与表格预留上下四个间隔
                 rowNum = rowNum + 5;
                 ++tableNum;                      
             }
            }          
}
补充:Java ,  Java相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,