2016-05-18 5 views
1

Недавно мне пришлось экспортировать некоторые отчеты с использованием JasperReports в формате ods/xls.JasperReports: экспортировать файл xls/ods с формулами

Экспорт работает нормально, но мне не удалось найти способ добавить некоторые формулы excel между экспортируемыми столбцами (давайте упростим его, указав сумму некоторых столбцов, как описано ниже).

Screenshot

Когда пользователь изменяет столбец A в файле Excel, столбец C модифицируется (основные формулы Excel, ничего нового ...)

на основе некоторых замечаний и ответов здесь является то, что я ve done

<detail> 
<band height="134" splitType="Stretch"> 
    <componentElement> 
      <reportElement x="-20" y="0" width="120" height="60" uuid="884b6c49-9006-464d-982e-e2a5f2cb3e3e"> 
       <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/> 
      </reportElement> 
      <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> 
       <datasetRun subDataset="Empty Dataset1" uuid="b60c3bee-0624-4a6a-bbb1-e706521c0a9a"> 
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList($F{dto}.getNbLgtA()))]]></dataSourceExpression> 
       </datasetRun> 
       <jr:column width="40" uuid="1dbb56d0-f25f-410b-9e02-d08b7fe84388"> 
        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne1"/> 
        <jr:tableHeader height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="ff8f394e-39ea-4d08-898f-601e92e6d1f3"/> 
          <text><![CDATA[A]]></text> 
         </staticText> 
        </jr:tableHeader> 
        <jr:detailCell height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="c0c2b023-2d00-4080-88a3-a73f19fe9cda"/> 
          <text><![CDATA[1]]></text> 
         </staticText> 
        </jr:detailCell> 
       </jr:column> 
       <jr:column width="40" uuid="33f41b08-3d77-4076-9712-9514211dd3af"> 
        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne2"/> 
        <jr:tableHeader height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="ad2b74aa-95bf-43d7-83a4-6528f344b410"/> 
          <text><![CDATA[B]]></text> 
         </staticText> 
        </jr:tableHeader> 
        <jr:detailCell height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="6d121f9e-e92d-45ba-9a48-82bf8b1245e0"/> 
          <text><![CDATA[2]]></text> 
         </staticText> 
        </jr:detailCell> 
       </jr:column> 
       <jr:column width="40" uuid="42d367d1-2be7-46bf-838b-ba4c1c6f3399"> 
        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne3"/> 
        <jr:tableHeader height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="63e3dd54-0297-463f-b061-4c536baf62a8"/> 
          <text><![CDATA[C]]></text> 
         </staticText> 
        </jr:tableHeader> 
        <jr:detailCell height="30"> 
         <property name="net.sf.jasperreports.export.xls.formula" value="SUM(A2, B2)"/> 
        </jr:detailCell> 
       </jr:column> 
      </jr:table> 
     </componentElement> 
    </band> 
</detail> 

Но это не сработает.

+0

Пожалуйста, добавьте свой код и шаблоны с вопросом для понимания именно ваш вопрос –

+0

@ New-Learner вопрос редактируемого – Mitchapp

+1

@Mitchapp Да, это возможно использовать формулу. Вы можете посмотреть [Экспорт формул XLS] (http://jasperreports.sourceforge.net/sample.reference/xlsformula/index.html#xlsformula) –

ответ

3

Здесь вы можете найти полезную информацию об использовании Excel формулы: http://jasperreports.sourceforge.net/sample.reference/xlsformula/index.html#xlsformula

Например, ниже приведен пример использования SUM формулы (выражение должно быть заключено в кавычки):

<propertyExpression name="net.sf.jasperreports.export.xls.formula"> 
    <![CDATA["SUM(A1,B1)"]]> 
    </propertyExpression> 

Вы должны убедиться, что для свойства isDetectCellType установлено значение true для вашего отчета, чтобы заставить формулу работать. Полный рабочий пример (с использованием пустого источника данных) заключается в следующем:

<detail> 
    <band height="134" splitType="Stretch"> 
     <componentElement> 
      <reportElement x="-20" y="0" width="120" height="60" uuid="884b6c49-9006-464d-982e-e2a5f2cb3e3e"> 
       <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/> 
      </reportElement> 
      <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> 
       <datasetRun subDataset="Empty Dataset1" uuid="b60c3bee-0624-4a6a-bbb1-e706521c0a9a"> 
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression> 
       </datasetRun> 
       <jr:column width="40" uuid="1dbb56d0-f25f-410b-9e02-d08b7fe84388"> 
        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne1"/> 
        <jr:tableHeader height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="ff8f394e-39ea-4d08-898f-601e92e6d1f3"/> 
          <text><![CDATA[A]]></text> 
         </staticText> 
        </jr:tableHeader> 
        <jr:detailCell height="30"> 
         <textField pattern=""> 
          <reportElement x="0" y="0" width="40" height="30" uuid="b989d9e8-64d8-467f-a8a0-7b92a1746a0d"/> 
          <textFieldExpression><![CDATA[1]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
       <jr:column width="40" uuid="33f41b08-3d77-4076-9712-9514211dd3af"> 
        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne2"/> 
        <jr:tableHeader height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="ad2b74aa-95bf-43d7-83a4-6528f344b410"/> 
          <text><![CDATA[B]]></text> 
         </staticText> 
        </jr:tableHeader> 
        <jr:detailCell height="30"> 
         <textField pattern=""> 
          <reportElement x="0" y="0" width="40" height="30" uuid="3448c5dc-f887-415d-9833-4a22ea5b06c8"/> 
          <textFieldExpression><![CDATA[2]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
       <jr:column width="40" uuid="42d367d1-2be7-46bf-838b-ba4c1c6f3399"> 
        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Colonne3"/> 
        <jr:tableHeader height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="40" height="30" uuid="63e3dd54-0297-463f-b061-4c536baf62a8"/> 
          <text><![CDATA[C]]></text> 
         </staticText> 
        </jr:tableHeader> 
        <jr:detailCell height="30"> 
         <textField pattern=""> 
          <reportElement x="0" y="0" width="40" height="30" uuid="63e3ed54-0567-463f-b0c1-4c676baf62a8"> 
           <propertyExpression name="net.sf.jasperreports.export.xls.formula"><![CDATA["SUM(A" +($V{PAGE_COUNT}+2) + ",B" + ($V{PAGE_COUNT}+2) +")"]]></propertyExpression> 
          </reportElement> 
          <textFieldExpression><![CDATA[3]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
      </jr:table> 
     </componentElement> 
    </band> 
</detail> 
+0

размер таблица является переменной, поэтому формула должна быть динамичной, как бы вы это сделали? – Mitchapp

+0

Элемент позволяет динамические выражения. Таким образом, в зависимости от ваших потребностей вы можете писать динамические формулы, такие как: которые будут применяться для каждой последовательной строки. – shertage

+0

Я отредактировал свой вопрос (добавленный исходный код), и до сих пор не удается заставить формулу работать. Есть предложения? – Mitchapp

Смежные вопросы