poi 写入excel求助,

小昭归来 发布于 2013/11/27 12:13
阅读 212
收藏 1

有三块数据,本意是在excel中弄成两列,第一列有两块数据,第二列有一块数据,如图(正确的显示,是红框框里面的内容移到上面那个框里面)

实现思路是:前两个块就从excel上到下写入数据,到第三个数据的时候,也是从excel的表格上下写入,只不过在写入的时候给cell一个偏移数量。 


            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; //在不写这一句的时候输出为上图,和我想象的情况一样;当写入这句的时候,目的是为了让第三快数据,从excel顶部开始显示(和第一列一样),但是打印出的结果却是下图那种情况。

                    }else if(tableNum == 4){
                        offSet = 16;
                    
                    }
                    
                    System.out.println("第弟弟弟弟弟弟"+(tableNum-1) +"table");
                    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){
                           System.out.println("thead该行不存在");
                        row = sheet.createRow(rowNum);
                    }else{
                        System.out.println("thead该行存在");
                    }
                    
                    //填写表格头信息
                    int i=0;
                    for (Element th : ths){                               
                        Cell cell = null;
                        cell = row.createCell(i + offSet);
                           System.out.println("tbody第"+rowNum+"行");
                           System.out.println("第"+(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);
                    System.out.println("标题行"+panelHeader.text());
                    cell1.setCellValue(panelHeader.text());
                                       
                    //创建表格内容行,并填写内容
                    Elements trs = tbody.select("tr");
                    for (Element tr : trs) {
                        
                        //先创建内容行
                        if(sheet.getRow(++rowNum) == null){
                            System.out.println("tbody该行不存在");
                            row = sheet.createRow(rowNum);
                        }else{
                            System.out.println("tbody该行存在");
                        }
                        
                        //填写内容
                         Elements tds = tr.select("td");
                         int j = 0;
                        for (Element td : tds){                            
                            Cell cell = null;
                            cell = row.createCell(j + offSet);
                               System.out.println("tbody第"+rowNum+"行");
                               System.out.println("第"+(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;
                }
            }          
      不知道是哪的逻辑写错啦,求帮忙看下 

加载中
0
小昭归来
小昭归来
我又从新测试啦下,只打印前两个 或是只打印后一个位置都是正常的,所以我感觉错在生成最后一个的时候
返回顶部
顶部