导出到Excel时是否可以在jrxml中添加宏?

我找不到任何文档,我唯一能找到的就是JasperSoft社区Excel macro and pivot tables上的这个问题。

最佳答案

可以使用net.sf.jasperreports.export.xlsx.macro.template报表属性从具有Macro(MS Excel类型)的外部文件添加MS Excel Macro。

可以使用xltm或xlsm类型的宏。



让我们尝试添加简单的宏以为活动单元格添加注释。
该宏将存储在macro.xlsm文件中。

宏的内容(示例*):

Sub add_comment()
    Dim cmt As Comment
    Dim str As String
    On Error Resume Next

    str = "Value: " + ActiveCell.Text
    Set cmt = ActiveCell.Comment
    If cmt Is Nothing Then
        ActiveCell.AddComment _
        Text:=str
        Set cmt = ActiveCell.Comment
    End If

    With cmt
        .Shape.AutoShapeType = msoShapeRoundedRectangle
        .Shape.TextFrame.Characters.Font.Name = "Tahoma"
        .Shape.TextFrame.Characters.Font.Size = 8
        .Shape.TextFrame.Characters.Font.ColorIndex = 2
        .Shape.Line.ForeColor.RGB = RGB(0, 0, 0)
        .Shape.Line.BackColor.RGB = RGB(255, 255, 255)
        .Shape.Fill.Visible = msoTrue
        .Shape.Fill.ForeColor.RGB = RGB(58, 82, 184)
        .Shape.Fill.OneColorGradient msoGradientDiagonalUp, 1, 0.23
    End With

    SendKeys "+{F2}"  'opens comment for editing
End Sub


jrxml文件(报告的模板)将是:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Macro sample" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <property name="net.sf.jasperreports.export.xlsx.macro.template" value="macro.xlsm"/>
    <title>
        <band height="158">
            <staticText>
                <reportElement x="0" y="0" width="595" height="30"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[Long title]]></text>
            </staticText>
            <staticText>
                <reportElement x="0" y="30" width="595" height="128"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="SansSerif" size="18" isBold="true"/>
                </textElement>
                <text><![CDATA[Some text. This is a sample of using Macros]]></text>
            </staticText>
        </band>
    </title>
</jasperReport>


我们使用net.sf.jasperreports.export.xlsx.macro.template属性将脚本从Macro的模板添加到生成的报告中。

输出结果

我们可以在Jaspersoft Studio中生成MS Excel格式的报告:

excel-vba - 如何创建基于宏的模板?-LMLPHP

打开生成的xls文件后,我们可以运行嵌入式Macro:

excel-vba - 如何创建基于宏的模板?-LMLPHP

运行Macro的结果是创建了新的彩色注释:

excel-vba - 如何创建基于宏的模板?-LMLPHP



有关更多信息,请参见Advanced Excel Features帖子。

关于excel-vba - 如何创建基于宏的模板?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44240681/

10-11 14:22