2014-01-06 1 views
1

У меня есть лист первенствовать со значениями ячеек, какдисплей значение отформатирована Cell листа Excel на JTextPane

«Это жирный текст».

И я хочу показать его на JTextPane.I думаю, что я как-то связан с RichTextString и StyledDocument JTextPane, но я не уверен, пожалуйста, помогите мне с этим.

+0

Решение действительно сработало или в любом другом ком ? складки – PopoFibo

+0

Да, это действительно сработало, но у меня возникают осложнения, когда вы хотите сохранить текст jTextPane в файл excel. потому что он дает html-код. Любое решение? – Mustafa

ответ

2

Ваш вариант заключается в том, чтобы записать полученное значение ячейки из excel как html в JTextPane.

Я ранее ссылался на пример this, чтобы извлечь html-формат значений ячейки из excel - каждый раз работает как шарм.

Я расширил код, включив опцию JTextPane для отображения содержимого вашей ячейки.

Базовый код:

static boolean boldsie = false; 

    public static void main(String... args) { 
     File excel = new File("\\test.xlsx"); 
     FileInputStream fis; 
     try { 
      fis = new FileInputStream(excel); 
      XSSFWorkbook wb = new XSSFWorkbook(fis); 
      XSSFSheet ws = wb.getSheet("Sheet1"); 

      int rowNum = ws.getLastRowNum() + 1; 
      int colNum = ws.getRow(0).getLastCellNum(); 
      String[][] data = new String[rowNum][colNum]; 

      for (int i = 0; i < rowNum; i++) { 
       XSSFRow row = ws.getRow(i); 
       for (int j = 0; j < colNum; j++) { 
        XSSFCell cell = row.getCell(j); 
        String value = cell.toString(); 
        data[i][j] = value; 

        showDataInTextPane(ws, cell.getReference()); 

       } 
      } 

     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    private static void showDataInTextPane(XSSFSheet ws, String reference) { 
     JFrame frame = new JFrame("Formatted POI Sample"); 
     Container content = frame.getContentPane(); 
     JPanel panel = new JPanel(); 

     JTextPane textPane = new JTextPane(); 
     textPane.setContentType("text/html"); 

     textPane.setText(getHtmlFromExcel(ws, reference)); 

     panel.setLayout(new BorderLayout()); 
     panel.add(textPane); 

     content.add(panel); 
     frame.setSize(100, 100); 
     frame.setVisible(true); 
    } 

    public static String getHtmlFromExcel(XSSFSheet sheet, String cellName) { 

     CellReference cellReference = new CellReference(cellName); 
     XSSFRow row = sheet.getRow(cellReference.getRow()); 
     XSSFCell cell = row.getCell(cellReference.getCol()); 

     XSSFRichTextString cellText = cell.getRichStringCellValue(); 

     String htmlCode = ""; 

     for (int i = 0; i < cellText.numFormattingRuns(); i++) { 
      try { 
       htmlCode += getFormatFromFont(cellText.getFontAtIndex(i)); 
      } catch (NullPointerException ex) { 

      } 
      try { 
       htmlCode += getFormatFromFont(cellText 
         .getFontOfFormattingRun(i)); 
      } catch (NullPointerException ex) { 

      } 

      htmlCode += cellText.getString().substring(
        cellText.getIndexOfFormattingRun(i), 
        cellText.getIndexOfFormattingRun(i) 
          + cellText.getLengthOfFormattingRun(i)); 
     } 

     if (boldsie) { 
      htmlCode += "</b>"; 
      boldsie = false; 
     } 

     return htmlCode; 
    } 

    private static String getFormatFromFont(XSSFFont font) { 
     String formatHtmlCode = ""; 
     if (font.getBold() && !boldsie) { 
      formatHtmlCode += "<b>"; 
      boldsie = true; 
     } else if (!font.getBold() && boldsie) { 
      formatHtmlCode += "</b>"; 
      boldsie = false; 
     } 

     return formatHtmlCode; 
    } 

Выход:

enter image description here

Вы можете продлить на ваши потребности, чтобы сделать его более универсальным, выравнивать к передовой практике и включают в себя другие форматы как курсив и т. д.

 Смежные вопросы

  • Нет связанных вопросов^_^