在JExcel中写入超链接后如何“激活”excel中的超链接?

时间:2013-04-24 14:51:03

标签: java excel jexcelapi

我的电子表格中使用JExcel创建的一些列是使用相邻单元格的超链接。举个例子:

|A         |B           |C         |D
|RowNumber |Unicorn Name|Unicorn ID|Link to Unicorn Profile
|000000001 |Jefficorn   |001       |=hyperlink(concatenate("www.stackoverflow.com/unicornfinder/",C1,"/profile.html"),"Unicorn Profile")

但是,当JExcel将其输出到电子表格中时,用户看到的是公式的纯文本(如上所示),而不是带有文本 Unicorn Profile 的超链接。 / p>

如何以编程方式激活它?我无法更改条目,因此我无法按照制作超链接的标准方式,在下面显示(半伪代码):

sheet.addHyperlink("www.stackoverflow.com/unicornfinder/"+cell.getNeighbourCell.getContent()+"/profile.html);
sheet.addLabel("Unicorn Profile");

有没有一种简单的方法来“激活”我的超链接?

1 个答案:

答案 0 :(得分:1)

以下代码在comment中建议似乎有效,但在单元格中给出了一个奇怪的值,但我无法说明原因。

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import jxl.CellFormat;
import jxl.Workbook;
import jxl.biff.CellReferenceHelper;
import jxl.biff.DisplayFormat;
import jxl.read.biff.BiffException;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class Launcher {

  /**
   * @param args
   * @throws IOException 
   * @throws IOException 
   * @throws WriteException 
   * @throws BiffException 
   */
  public static void main(String[] args) throws IOException, WriteException {
    //Creates a writable workbook with the given file name
    WritableWorkbook workbook = Workbook.createWorkbook(new File("D:\\Documents and Settings\\castone\\My Documents\\Formula.xls"));

    WritableSheet sheet = workbook.createSheet("My Sheet", 0);

    ArrayList<Label> labelList = new ArrayList<Label>();
    //create the filler text
    labelList.add(new Label(0, 0, "UnicornName"));
    labelList.add(new Label(0, 1, "Pureferret"));
    labelList.add(new Label(2, 0, "Unicorn ID"));
    labelList.add(new Label(2, 1, "1075247"));
    labelList.add(new Label(1, 0, "Hyperlink"));
    for(Label label:labelList){
        sheet.addCell(label);
    }    
    //Create a formula for adding cells
    String formulaText ="HYPERLINK(CONCATENATE(\"https://stackoverflow.com/users/\","+
            CellReferenceHelper.getCellReference(2, 1).toString()+"),\"Link\"";
    Formula link = new Formula(1, 1,formulaText);
    sheet.addCell(link);

    //Writes out the data held in this workbook in Excel format
    workbook.write(); 

    //Close and free allocated memory 
    workbook.close(); 
  }

}

这是单元格=CONCATENATE("https://stackoverflow.com/users/",C2) HYPERLINK("Link")中显示的内容。


或者,我已经使用这种设置来获取地址的相关部分,并形成一个新的超链接:

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;

import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableHyperlink;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class Launcher {

  /**
   * @param args
   * @throws IOException 
   * @throws IOException 
   * @throws WriteException 
   * @throws BiffException 
   */
  public static void main(String[] args) throws IOException, WriteException {
    //Creates a writable workbook with the given file name
    WritableWorkbook workbook = Workbook.createWorkbook(new File("D:\\Documents and Settings\\castone\\My Documents\\Formula.xls"));

    WritableSheet sheet = workbook.createSheet("My Sheet", 0);

    ArrayList<Label> labelList = new ArrayList<Label>();
    //create the filler text
    labelList.add(new Label(0, 0, "UnicornName"));
    labelList.add(new Label(0, 1, "Pureferret"));
    labelList.add(new Label(2, 0, "Unicorn ID"));
    labelList.add(new Label(2, 1, "1075247"));
    labelList.add(new Label(1, 0, "Hyperlink"));
    for(Label label:labelList){
        sheet.addCell(label);
    }    
    //Create a formula for adding cells
    String formulaText ="HYPERLINK(CONCATENATE(Overview$B$15,\"users\",C2),\"Link\")";
    String[] linkBits = formulaText.substring(formulaText.lastIndexOf("(")+1,formulaText.indexOf(")")).split(",");
    String baseURL = "http://www.stackoverflow.com/";
    String linkURL = baseURL+linkBits[1].replace("\"","")+"/"+sheet.getCell(linkBits[2]).getContents();
    String linkDesc = "Profile";
    WritableHyperlink link = new WritableHyperlink(1, 1, new URL(linkURL));
    link.setDescription(linkDesc);
    sheet.addHyperlink(link);

    //Writes out the data held in this workbook in Excel format
    workbook.write(); 

    //Close and free allocated memory 
    workbook.close(); 
  }

}