Skip to main content

Report Excel Export Cleanup

Comments

3 comments

  • Johnny Stevens

    Hi Akhil,

    It sounds like you will need some UI element to allow users to check/uncheck which columns they want to appear on the Excel export.

    I am using an InputCheckboxList (ICL) with CheckboxListDropdown="False" for this type of use case in one of my reports. I am populating the ICL with the column names and using a DefaultValues element to set them all to checked (1). When the user unchecks (0), you have a few options - 

    • If you don't want to change the web output, do nothing, but be sure to pass the ICL's Request token to your Excel export and add logic to your Excel to include only those columns with checked=1
    • If you want to change the web output, you can use an EventHandler to apply the unchecks immediately or a 'trigger' element (like an "Apply" button) to apply the unchecks. Again, passing the ICL Request token to the rdBrowser and rdExport outputs.

    Regards,
    Johnny

    0
  • Seema Verma

    Hi Johnny,

    Do you have a sample report for the above solution.

    Thanks

    0
  • Johnny Stevens

    I'm attaching a working sample. I have remarked an EventHandler which you can unremark if you want to change the web table when the user makes column selections. You would also need to copy the Column element Conditions from dtExport to dtWeb to show/hide the columns based on the user's selections.

    Let me know if you have questions. 

    Regards,
    Johnny

    <?xml version="1.0" encoding="utf-8"?>
    <Report
    ID="TestHideColumns"
    >
    <Body>
    <Division
    HtmlDiv="True"
    ID="divInput"
    ShowModes="rdBrowser"
    >
    <Label
    Caption="Columns to Show in Export"
    Class="ThemeBold"
    />
    <LineBreak/>
    <InputCheckboxList
    CheckAllCaption="Select/De-Select All"
    CheckboxListDropdown="False"
    DefaultValue="@Request.inpSHColumns~"
    ID="inpSHColumns"
    MultiSelect="True"
    OptionCaptionColumn="name"
    OptionValueColumn="id"
    >
    <DataLayer
    ID="dlsSortColumns"
    Type="Static"
    >
    <StaticDataRow
    id="ProductName"
    name="Product Name"
    />
    <StaticDataRow
    id="CategoryId"
    name="Category"
    />
    <StaticDataRow
    id="ProdYear"
    name="Product Year"
    />
    <StaticDataRow
    id="ManufDate"
    name="Manufacture Date"
    />
    <DataLayerLink
    ID="dllSHColumns"
    />
    </DataLayer>
    <Note
    Note="The id should match whatever you use in the Column Conditions. If you want to number your columns and make id numeric to match, that will work, too. The name is what will show in the Input Checkbox List."
    />
    <DefaultValues
    DataColumn="id"
    ID="dftAll"
    >
    <DataLayer
    ID="linkAllSHColumns"
    LinkedDataLayerID="dllSHColumns"
    Type="Linked"
    />
    </DefaultValues>
    <Remark>
    <EventHandler
    DhtmlEvent="onchange"
    >
    <Action
    ElementID="divOutput"
    ID="actUpdateTable"
    Type="RefreshElement"
    >
    <LinkParams
    inpSort2=""
    inpSort3=""
    inpSubmit="0"
    />
    <WaitPage/>
    </Action>
    <Note
    Note="Use this if you want to change the web table with User Input click"
    />
    <Note
    Note="You would also need to add the Column Conditions to dtWeb&apos;s Column elements to show/hide the columns on click"
    />
    </EventHandler>
    </Remark>
    </InputCheckboxList>
    <LineBreak/>
    <Label
    Caption="Export"
    >
    <Action
    ID="actExcel"
    Type="NativeExcel"
    >
    <Target
    ShowGridlines="True"
    Type="NativeExcel"
    >
    <WaitPage/>
    </Target>
    </Action>
    </Label>
    </Division>
    <Division
    HtmlDiv="True"
    ID="divOutputWeb"
    ShowModes="rdBrowser"
    >
    <DataTable
    ID="dt1"
    >
    <DataLayer
    ID="dlProducts"
    Type="Static"
    >
    <StaticDataRow
    CategoryId="10"
    ManufDate="04/30/2006"
    ProductName="Goodyear Tires"
    ProdYear="2007"
    />
    <StaticDataRow
    CategoryId="10"
    ManufDate="12/20/2019"
    ProductName="Rockwell Tires"
    ProdYear="2020"
    />
    <StaticDataRow
    CategoryId="15"
    ManufDate="10/01/2020"
    ProductName="Dual Action Steering Wheel"
    ProdYear="2020"
    />
    <StaticDataRow
    CategoryId="20"
    ManufDate="01/03/2010"
    ProductName="Dashboard Bobblehead"
    ProdYear="2018"
    />
    </DataLayer>
    <DataTableColumn
    Header="Product"
    ID="colProd"
    >
    <Label
    Caption="@Data.ProductName~"
    />
    </DataTableColumn>
    <DataTableColumn
    Header="Category ID"
    ID="colCat"
    >
    <Label
    Caption="@Data.CategoryId~"
    />
    </DataTableColumn>
    <DataTableColumn
    Header="Product Year"
    ID="colProdYr"
    >
    <Label
    Caption="@Data.ProdYear~"
    />
    </DataTableColumn>
    <DataTableColumn
    Header="Manufacture Date"
    ID="colManufDate"
    >
    <Label
    Caption="@Data.ManufDate~"
    Format="yyyy-MM-dd"
    />
    </DataTableColumn>
    </DataTable>
    </Division>
    <Division
    HtmlDiv="True"
    ID="divOutputExport"
    ShowModes="rdExportExcel"
    >
    <DataTable
    ID="dtExport"
    >
    <DataLayer
    ID="dlProducts"
    Type="Static"
    >
    <StaticDataRow
    CategoryId="10"
    ManufDate="04/30/2006"
    ProductName="Goodyear Tires"
    ProdYear="2007"
    />
    <StaticDataRow
    CategoryId="10"
    ManufDate="12/20/2019"
    ProductName="Rockwell Tires"
    ProdYear="2020"
    />
    <StaticDataRow
    CategoryId="15"
    ManufDate="10/01/2020"
    ProductName="Dual Action Steering Wheel"
    ProdYear="2020"
    />
    <StaticDataRow
    CategoryId="20"
    ManufDate="01/03/2010"
    ProductName="Dashboard Bobblehead"
    ProdYear="2018"
    />
    </DataLayer>
    <DataTableColumn
    Condition="InStr(&apos;@Request.inpSHColumns~&apos;,&apos;ProductName&apos;)&lt;&gt;0"
    Header="Product"
    ID="colProd"
    >
    <Label
    Caption="@Data.ProductName~"
    />
    <ExcelColumnFormat
    ExcelColumnWidth="Auto"
    />
    </DataTableColumn>
    <DataTableColumn
    Condition="InStr(&apos;@Request.inpSHColumns~&apos;,&apos;CategoryId&apos;)&lt;&gt;0"
    Header="Category ID"
    ID="colCat"
    >
    <Label
    Caption="@Data.CategoryId~"
    />
    <ExcelColumnFormat
    DataType="Number"
    ExcelColumnWidth="Auto"
    />
    </DataTableColumn>
    <DataTableColumn
    Condition="InStr(&apos;@Request.inpSHColumns~&apos;,&apos;ProdYear&apos;)&lt;&gt;0"
    Header="Product Year"
    ID="colProdYr"
    >
    <Label
    Caption="@Data.ProdYear~"
    />
    <ExcelColumnFormat
    DataType="Number"
    ExcelColumnWidth="Auto"
    />
    </DataTableColumn>
    <DataTableColumn
    Condition="InStr(&apos;@Request.inpSHColumns~&apos;,&apos;ManufDate&apos;)&lt;&gt;0"
    Header="Manufacture Date"
    ID="colManufDate"
    >
    <Label
    Caption="@Data.ManufDate~"
    Format="yyyy-MM-dd"
    />
    <ExcelColumnFormat
    DataType="Date"
    ExcelColumnWidth="Auto"
    />
    </DataTableColumn>
    </DataTable>
    </Division>
    </Body>
    <ideTestParams
    inpSHColumns=""
    />
    </Report>
    0

Please sign in to leave a comment.