如何克隆/复制excel工作表并使用apache poi和java

时间:2018-03-26 08:36:18

标签: java apache-poi

XSSFSheet wire_drawing = (XSSFSheet) wb.getSheetAt(0);
            XSSFRow r1 = wire_drawing.getRow(3);
            XSSFCell c1 = r1.getCell(8);
            c1.setCellValue(wd);
            NoOfTickects(n1,"0");

            XSSFRow row5 = wire_drawing.getRow(3);
            XSSFCell cell4 = row5.getCell(4);
            cell4.setCellValue("2/"+ diameter + "mm HD");

            XSSFSheet stranding = (XSSFSheet) wb.getSheetAt(1);
            XSSFRow r2 = stranding.getRow(2);
            XSSFCell c2 = r2.getCell(10);
            c2.setCellValue(bs);
            NoOfTickects(n2,"1");

这是我在excel表上插入数据的代码。我使用NoOfTickets()方法克隆工作表,定义如下:

 public void NoOfTickects(int no, String sheet_index){

            switch(sheet_index){
                case "0" :
                     if(no==2){
                         wb.cloneSheet(0);
                        }
                     else {
                         for(int i =0 ; i<no ; i=i+2){
                             wb.cloneSheet(0);
                         }
                     }
                break;
                case "1" :
                     if(no==2){
                         wb.cloneSheet(1);
                        }
                     else {
                         for(int i =0 ; i<no ; i=i+2){
                             wb.cloneSheet(1);
                         }
                     }
                break;
                case "2" :
                     if(no==2){
                         wb.cloneSheet(2);
                        }
                     else {
                         for(int i =0 ; i<no ; i=i+2){
                             wb.cloneSheet(2);
                         }
                     }
                break;

变量&#34; no&#34;是所需的工作表数量。最初,工作表看起来像

the initial worksheet

运行代码后,工作表将

enter image description here

正如您在第二个工作表底部看到的那样,工作表现在超过五个。如何删除额外的工作表,以便下次运行代码时,额外的工作表将仅附加到前五个工作表中?

1 个答案:

答案 0 :(得分:0)

for(int rowq = 8; rowq < wb.getNumberOfSheets(); rowq++) {
                wb.removeSheetAt(rowq);
            }
我找到了上面的解决方案。以防万一其他人将面临同样的挑战