    def write_data_table(self, report, report_data, has_totals=True):
        self.data.append([c["title"] for c in report.schema])
        for datum in report_data:
            datum = report.read_datum(datum)
            self.data.append([format_data(data, format_iso_dates=True) for data in datum])

        if has_totals:
            for datum in report.get_totals(report_data):
                datum = report.read_datum(datum)
                self.data.append([format_data(data) for data in datum])
The software saves user-provided information into a Comma-Separated Value (CSV) file, but it does not neutralize or incorrectly neutralizes special elements that could be interpreted as a command when the file is opened by spreadsheet software.