ExportToXLSX
Exports context data to a Microsoft Excel Open XML Spreadsheet (XLSX) file.
python · Common Scripts
Source
import demistomock as demisto # noqa: F401 from CommonServerPython import * # noqa: F401 from xlsxwriter import Workbook from xlsxwriter.format import Format def write_data(sheet: str, data_item: dict | list, data_headers: list | None, workbook: Workbook, bold: Format, border: Format): if not isinstance(data_item, list): data_item = [data_item] if not data_headers: data_headers = list(data_item[0].keys()) worksheet = workbook.add_worksheet(sheet) row = 0 col = 0 for key in data_headers: worksheet.write(row, col, key, bold) col += 1 for item in data_item: if item and isinstance(item, dict): col = 0 row += 1 for header in data_headers: item_value = item.get(header) if item_value: if isinstance(item_value, list): worksheet.write(row, col, ", ".join(item_value), border) else: worksheet.write(row, col, str(item_value), border) col += 1 def parse_data(data: str | dict | list, sheets: list): if isinstance(data, str): # Indicates that the data is a comma-separated list of context keys. data_list = json.loads("[" + data + "]") if len(sheets) != len(data_list): raise ValueError("Number of sheet names should be equal to the number of data items.") return data_list else: if len(sheets) != 1: raise ValueError("Number of sheet names should be equal to the number of data items.") return [data] def prepare_bold_and_border(workbook: Workbook, is_bold: bool, is_border: bool): bold_value = 1 if is_bold else 0 border_value = 1 if is_border else 0 bold = workbook.add_format({"bold": bold_value, "border": border_value}) border = workbook.add_format({"border": border_value}) return bold, border def main(): try: args = demisto.args() data = args.get("data") file_name = args.get("file_name") if not is_filename_valid(file_name): # pragma: no cover raise DemistoException("The file name contains invalid characters") sheet_name = args.get("sheet_name") headers = args.get("headers") is_bold = argToBoolean(args.get("bold", "true")) is_border = argToBoolean(args.get("border", "true")) sheets = argToList(sheet_name) data = parse_data(data, sheets) if headers: headers_list = argToList(headers, separator=";") if len(sheets) != len(headers_list): raise ValueError("Number of sheet headers should be equal to the number of sheet names") else: headers_list = None with Workbook(file_name) as workbook: bold, border = prepare_bold_and_border(workbook, is_bold, is_border) multi_header_list: list[list | None] = [] if headers_list: # Can be 1 item in case there is one sheet, or multiple items in case there are multiple # sheets for header_list in headers_list: multi_header_list.append(header_list.split(",")) else: multi_header_list = [None] * len(sheets) for sheet, data_item, headers_list in zip(sheets, data, multi_header_list): write_data(sheet, data_item, headers_list, workbook, bold, border) return_results(file_result_existing_file(file_name)) except Exception as ex: return_error(f"Failed to execute ExportToXLSX script. Error: {ex!s}") if __name__ in ("__main__", "__builtin__", "builtins"): main()
README
Exports context data to a Microsoft Excel Open XML Spreadsheet (XLSX) file.
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | |
| Cortex XSOAR Version | 5.0.0 |
Inputs
| Argument Name | Description |
|---|---|
| file_name | The output file name (for example “Report.xlsx”). |
| data | The data to export. Accepts a context key of a dictionary or a list of dictionaries for a single sheet file (${data}). Separate multiple sheet files using a comma “,”. For example, if you are exporting multiple sheet files, the argument would be: ${data1},${data2}. |
| sheet_name | The sheet name. Separate multiple sheet names using a comma “,”, for example, sheet1,sheet2. |
| headers | A comma-separated list of headers. The order that you pass the headers determines how they display in the exported sheet(s). Separated multiple sheets using a semicolon. For example, if you are exporting two sheets that includes two headers each, the argument would be: “header1,header2;header3,header4”. |
| bold | Whether table headers should be bold. If this argument is set to “true”, table headers are bold. Default is “true”. |
| border | Whether borders should be added to table cells. If this argument is set to “true”, borders are added to table cells. Default is “true”. |
Outputs
There are no outputs for this script.