2016-03-20 10 views
0

を設定していない、との行は、リンクが含まれている場合、私はそのようなリンクに前のセルのハイパーリンクを設定します。私はJavaのPOIは、私は、テキストファイルから読み込むしようとしている前のセルのハイパーリンク

while (scanner.hasNextLine()) { 

    String nextToken = scanner.nextLine(); 
    if (nextToken.startsWith("<")) { 

     temp = Jsoup.parse(nextToken); 
     url = temp.select("a").first(); 
     link.setAddress(url.attr("href")); 
     System.out.println(link.getAddress()); 
     prevCol = currRow.getCell(col - 1); 
     System.out.println(row + ", " + col -1); 
     prevCol.setHyperlink(link); 

    } else { 
     currCol.setCellValue(nextToken); 
     col++; 
     currCol = currRow.createCell(col); 
    } 

    if (nextToken.isEmpty()) { 
     row++; 
     col = 0; 
     currRow = sheet.createRow(row); 
     currCol = currRow.createCell(col); 
    } 

} 

すべてのリンクとセル座標をコンソールに印刷して、リンクがセルに設定されていることを確認します。しかし、私の問題は、すべてのデータの最後のセルにのみハイパーリンクが付いていることです。なぜどんなアイデア?それがより参考人のための

全コード:

public static void main(String[] args) throws EncryptedDocumentException, InvalidFormatException, IOException { 
    File file = new File("C:\\Users\\Jester\\Desktop\\data scrap payday\\finishedformat.txt"); 
    FileInputStream fis = new FileInputStream(
      new File("C:\\Users\\Jester\\Desktop\\data scrap payday\\Payday 2 Rewards.xlsx")); 
    XSSFWorkbook workbook = new XSSFWorkbook(fis); 
    CreationHelper createHelper = workbook.getCreationHelper(); 
    XSSFSheet sheet = workbook.createSheet("Achievement Rewards"); 
    Document temp; 
    Element url; 
    Scanner scanner = new Scanner(file, "UTF-8"); 
    XSSFHyperlink link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_URL); 
    int row = 0; 
    int col = 0; 
    XSSFRow currRow = sheet.createRow(row); 
    XSSFCell currCol = currRow.createCell(col); 
    XSSFCell prevCol; 

    XSSFCellStyle hlinkstyle = workbook.createCellStyle(); 
    XSSFFont hlinkfont = workbook.createFont(); 
    hlinkfont.setUnderline(XSSFFont.U_SINGLE); 
    hlinkfont.setColor(HSSFColor.BLUE.index); 
    hlinkstyle.setFont(hlinkfont); 
    while (scanner.hasNextLine()) { 

     String nextToken = scanner.nextLine(); 
     if (nextToken.startsWith("<")) { 

      temp = Jsoup.parse(nextToken); 
      url = temp.select("a").first(); 
      link.setAddress(url.attr("href")); 
      System.out.println(link.getAddress()); 
      prevCol = currRow.getCell(col - 1); 
      System.out.println(row + ", " + col); 
      prevCol.setHyperlink(link); 
      prevCol.setCellStyle(hlinkstyle); 
      System.out.println(prevCol.getHyperlink().getAddress()); //This is returning the desired link to the console too, sooooo.... 

     } else { 
      currCol.setCellValue(nextToken); 
      col++; 
      currCol = currRow.createCell(col); 
     } 

     if (nextToken.isEmpty()) { 
      row++; 
      col = 0; 
      currRow = sheet.createRow(row); 
      currCol = currRow.createCell(col); 
     } 

    } 

    fis.close(); 
    FileOutputStream fos = new FileOutputStream(
      new File("C:\\Users\\Jester\\Desktop\\data scrap payday\\Payday 2 Rewards.xlsx")); 
    workbook.write(fos); 
    fos.close(); 

} 

入力形式は、このようなようなものですが:

Hail to the King, Baby 
In the Golden Grin Casino heist, kill "The King" and complete the heist in stealth 
<a href="http://payday.wikia.com/wiki/Golden_Grin_Casino" title="Golden Grin Casino">Golden Grin Casino</a> 
"Sports Utility Mask" mask 
<a href="http://payday.wikia.com/wiki/Masks_(Payday_2)#The_Golden_Grin_Casino_Heist_DLC" title="Masks (Payday 2)">Sports Utility Mask</a> 
"Carpet" material 
<a href="http://payday.wikia.com/wiki/Materials#The_Golden_Grin_Casino_Heist_DLC" title="Materials">Carpet</a> 
"Dices" pattern 
<a href="http://payday.wikia.com/wiki/Patterns#The_Golden_Grin_Casino_Heist_DLC" title="Patterns">Dices</a> 

答えて

1

これはスコープの問題です。 ifステートメント内でリンクオブジェクトの作成を移動します。

  if (nextToken.startsWith("<")) { 
      XSSFHyperlink link = (XSSFHyperlink) createHelper.createHyperlink(Hyperlink.LINK_URL); 
      temp = Jsoup.parse(nextToken); 
      url = temp.select("a").first(); 
      link.setAddress(url.attr("href")); 
      System.out.println(link.getAddress()); 
      prevCol = currRow.getCell(col - 1); 
      System.out.println(row + ", " + col); 
      prevCol.setHyperlink(link); 
      prevCol.setCellStyle(hlinkstyle); 
      System.out.println(prevCol.getHyperlink().getAddress()); //This is returning the desired link to the console too, sooooo. 
+0

これは、トリック、ありがとう! – JesterXIII

関連する問題