2015-04-20 3 views
7

Ich verwende Apache POI, um eine Excel-Datei zu generieren. Ich muss alle Ränder in meinem Arbeitsblatt löschen. Wie kann ich dies mit Apache PIO 3.11 und Microsoft Excel 2007 erreichen? HierEntfernen Sie alle Grenzen auf einem bestimmten Excel-Arbeitsblatt mit Apache POI

ist der Code Ich habe bisher:

package models; 

import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.ss.util.CellRangeAddress; 

import java.io.FileOutputStream; 
import java.util.List; 
public class Excel { 

    public static void writeDocument() { 
     Workbook workbook = new HSSFWorkbook(); 
     Sheet sheet = workbook.createSheet("sheet"); 
     //first font 
     Font font1 = workbook.createFont(); 
     font1.setBoldweight(Font.BOLDWEIGHT_BOLD); 
     //first style 
     CellStyle style1 = workbook.createCellStyle(); 
     style1.setBorderLeft(CellStyle.BORDER_NONE); 
     style1.setBorderRight(CellStyle.BORDER_NONE); 
     style1.setBorderBottom(CellStyle.BORDER_NONE); 
     style1.setBorderTop(CellStyle.BORDER_NONE); 

     //second style 
     CellStyle style2 = workbook.createCellStyle(); 
     style2.setFont(font1); 
     style2.setVerticalAlignment(CellStyle.VERTICAL_CENTER); 
     style2.setAlignment(CellStyle.ALIGN_CENTER); 
     style2.setFillForegroundColor(IndexedColors.ORANGE.getIndex()); 
     style2.setFillPattern(CellStyle.SOLID_FOREGROUND); 
     style2.setBorderBottom(CellStyle.BORDER_THIN); 
     style2.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); 
     style2.setBorderLeft(CellStyle.BORDER_THIN); 
     style2.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); 
     style2.setBorderRight(CellStyle.BORDER_THIN); 
     style2.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); 
     style2.setBorderTop(IndexedColors.GREY_25_PERCENT.getIndex()); 

     for(int i=0; i< 100 ; i++){ 
      for(int j=0; j< 100; j++){ 
       Cell cell = sheet.createRow(i).createCell(j); 
       cell.setCellStyle(style1); 
      } 
     } 


     CellRangeAddress region = new CellRangeAddress(0, 10, 0, 10); 
     cleanBeforeMergeOnValidCells(sheet, region, style2); 
     sheet.addMergedRegion(region); 

     try { 
      FileOutputStream output = new FileOutputStream("tmp/rapport.xls"); 
      workbook.write(output); 
      output.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void cleanBeforeMergeOnValidCells(Sheet sheet, CellRangeAddress region, CellStyle cellStyle) { 
     for (int rowNum = region.getFirstRow(); rowNum <= region.getLastRow(); rowNum++) { 
      Row row = sheet.getRow(rowNum); 
      if (row == null) { 
       sheet.createRow(rowNum); 
      } 
      for (int colNum = region.getFirstColumn(); colNum <= region.getLastColumn(); colNum++) { 
       Cell currentCell = row.getCell(colNum); 
       if (currentCell == null) { 
        currentCell = row.createCell(colNum); 
       } 

       currentCell.setCellStyle(cellStyle); 

      } 
     } 

    } 
} 
+0

Was tut nicht arbeiten? – Mirco

+0

Erstens konnte ich immer noch die Ränder in meinem Arbeitsblatt sehen. Zweitens, wenn ich versuchte, 2 oder mehr Werte in derselben Zeile einzufügen, wurde nur der erste Wert korrekt eingefügt. –

+0

die Art, wie ich Zellen in der gleichen Zeile hinzugefügt habe: sheet.createRow (5) .createCell (6) .setCellValue ("a"); sheet.createRow (5) .createCell (7) .setCellValue ("b"); sheet.createRow (5) .createCell (8) .setCellValue ("c"); –

Antwort

18

Ich glaube, Sie bedeuten, dass Sie die Rasterlinien nicht brauchen, in diesem Fall verwenden Sie die setDisplayGridlines Methode wie:

sheet.setDisplayGridlines(false); 
+0

Sehr schön ...... –