我的电子表格中使用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");
有没有一种简单的方法来“激活”我的超链接?
答案 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();
}
}