使用JXLS在xls中单击链接

时间:2015-06-26 15:00:25

标签: ios jxls xlslib

我正在使用JXLS v1.0在我的ios项目中创建xls文件,我无法理解如何在电子表格的某个单元格中创建可点击链接,有没有办法用JXLS制作,或者也许还有其他一些免费的xls框架存在

3 个答案:

答案 0 :(得分:1)

如果可能,您应该迁移到Jxls-2。 在Jxls-2中,创建超链接就像在Excel模板中使用以下标记一样简单

${util.hyperlink(linkAddress,linkTitle)}

linkAddress linkTitle 是包含超链接URL和名称的Jxls上下文中的变量名称。 检查XlsCommentBuilderDemo example项目中的以下jxls-demo,了解其实际效果。

使用Jxls 1.x,您应该使用公式方法来创建超链接。在你的标记中你应该有这样的东西

$[HYPERLINK(A1,A2)]

在单元格 A1 A2 中的位置,您应该有链接地址和链接标题。如果它们是动态的,你也可以用jxls输出它们。例如,在 A1 中,您可以拥有${link.url},在 A2 中,您可以拥有${link.title},其中link是bean上下文中的对象,其属性为< em> url 和 title 。当然你可以使用任何单元而不是 A1 A2

答案 1 :(得分:1)

好的,我找到了解决JXLS ios框架链接问题的方法。

问题出在Objective-C包装器中,没有方法在这个包装器的某个单元格中添加链接,但工作表类中有“hyperLink”方法,所以决定在类JXLSWorkSheet中创建一个包装器方法(您可以在Objective-C代码中使用)。实施看起来像: JXLSWorkSheet.h: 只需在标题

中添加此方法即可
    - (void)addLink:(JXLSCell *)cell link:(NSString *)link;

JXLSWorkSheet.m: 在结束语句之前添加实现主体

- (void)addLink:(JXLSCell *)cell link:(NSString *)link
  {
    cell_t          *cl;
    unichar         *uniName;
    ustring         uniStr;
    size_t          len;

    len = [link length];

    uniName = (unichar *)calloc(len+1, sizeof(unichar));
    [link getCharacters:uniName];
    uniStr.assign(uniName);
    free(uniName);

    cl = (xlslib_core::cell_t *)cell.cell;

    _workSheet->hyperLink(cl, uniStr, uniName);

}

在我的实现中,我使用相同的文本作为标签和链接,如果你想在电子表格中使用其他文本作为超链接的标签,可以在此方法中再添加一个参数。

用法非常简单:您只需获取要包含网址的单元格并添加链接即可。请参阅下面的列表。

 JXLSCell *cell;
 cell = [workSheet setCellAtRow:rowCount column:1 toString:@"http://stackoverflow.com/"];
 [workSheet addLink:cell link:@"http://stackoverflow.com/"];

我希望它可以帮助您在电子表格中创建超链接。

答案 2 :(得分:0)

此代码更正确:

    - (void)addLink:(JXLSCell *)cell link:(NSString *)link
{
    cell_t          *cl;
    unichar         *uniName;
    ustring         uniStr;
    size_t          len;

    len = [link length];

    /*uniName = (unichar *)calloc(len+1, sizeof(unichar));
    [link getCharacters:uniName];
    uniStr.assign(uniName);
    free(uniName);*/

    @autoreleasepool {
        uniName = (unichar *)[link cStringUsingEncoding:NSUnicodeStringEncoding];
        uniStr.assign(uniName);
    }

    cl = (xlslib_core::cell_t *)cell.cell;

    _workSheet->hyperLink(cl, uniStr, uniName);

}