docs: def _generateTabularData(res, oldTabularData = {}, isTerminal=False, canUnicode=True):
      """
      Method that recovers the values and columns from the current structure
  
      This method is used by:
          - usufyToCsvExport
          - usufyToOdsExport
          - usufyToXlsExport
          - usufyToXlsxExport
  
      Args:
      -----
          res: New data to export.
          oldTabularData: The previous data stored.
          {
            "OSRFramework": [
              [
                "i3visio.alias",
                "i3visio.platform",
                "i3visio.uri"
              ],
              [
                "i3visio",
                "Twitter",
                "https://twitter.com/i3visio",
              ]
            ]
          }
          isTerminal: If isTerminal is activated, only information related to
              relevant utils will be shown.
          canUnicode: Variable that stores if the printed output can deal with
              Unicode characters.
  
      Returns:
      --------
          The values, as a dictionary containing all the information stored.
          Values is like:
          {
            "OSRFramework": [
              [
                "i3visio.alias",
                "i3visio.platform",
                "i3visio.uri"
              ],
              [
                "i3visio",
                "Twitter",
                "https://twitter.com/i3visio",
              ],
              [
                "i3visio",
                "Github",
                "https://github.com/i3visio",
              ]
            ]
          }
      """
      def _grabbingNewHeader(h):
          """
          Updates the headers to be general.
  
          Changing the starting @ for a '_' and changing the "i3visio." for
          "i3visio_". Changed in 0.9.4+.
  
          Args:
          -----
              h: A header to be sanitised.
  
          Returns:
          --------
              string: The modified header.
          """
          if h[0] == "@":
              h = h.replace("@", "_")
          elif "i3visio." in h:
              h = h.replace("i3visio.", "i3visio_")
          return h
  
      # Entities allowed for the output in terminal
      allowedInTerminal = [
          "i3visio_alias",
          "i3visio_uri",
          "i3visio_platform",
          "i3visio_email",
          "i3visio_ipv4",
          "i3visio_phone",
          "i3visio_dni",
          "i3visio_domain",
          "i3visio_platform_leaked",
          #"_source"
      ]
      # List of profiles found
      values = {}
      headers = ["_id"]
      try:
          if not isTerminal:
              # Recovering the headers in the first line of the old Data
              headers = oldTabularData["OSRFramework"][0]
          else:
              # Recovering only the printable headers if in Terminal mode
              oldHeaders = oldTabularData["OSRFramework"][0]
              headers = []
              for h in oldHeaders:
                  h = _grabbingNewHeader(h)
                  if h in allowedInTerminal:
                      # Set to simplify the table shown in mailfy for leaked platforms
                      if h in ["i3visio_domain", "i3visio_alias"] and "_source" in old_headers:
                          pass
                      else:
                          headers.append(h)
          # Changing the starting @ for a '_' and changing the "i3visio." for "i3visio_". Changed in 0.9.4+
          for i, h in enumerate(headers):
              h = _grabbingNewHeader(h)
              # Replacing the header
              headers[i] = h
      except:
          # No previous files... Easy...
          headers = ["_id"]
  
      # We are assuming that we received a list of profiles.
      for p in res:
          # Creating the dictionaries
          values[p["value"]] = {}
          attributes = p["attributes"]
          # Processing all the attributes found
          for a in attributes:
              # Grabbing the type in the new format
              h = _grabbingNewHeader(a["type"])
  
              # Default behaviour for the output methods
              if not isTerminal:
                  values[p["value"]][h] = a["value"]
                  # Appending the column if not already included
                  if str(h) not in headers:
                      headers.append(str(h))
              # Specific table construction for the terminal output
              else:
                  if h in allowedInTerminal:
                      values[p["value"]][h] = a["value"]
                      # Appending the column if not already included
                      if str(h) not in headers:
                          headers.append(str(h))
  
      data = {}
      # Note that each row should be a list!
      workingSheet = []
  
      # Appending the headers
      workingSheet.append(headers)
  
      # First, we will iterate through the previously stored values
      try:
          for dataRow in oldTabularData["OSRFramework"][1:]:
              # Recovering the previous data
              newRow = []
              for cell in dataRow:
                  newRow.append(cell)
  
              # Now, we will fill the rest of the cells with "N/A" values
              for i in range(len(headers)-len(dataRow)):
                  # Printing a Not Applicable value
                  newRow.append("[N/A]")
  
              # Appending the newRow to the data structure
              workingSheet.append(newRow)
      except Exception, e:
          # No previous value found!
          pass
  
      # After having all the previous data stored an updated... We will go through the rest:
      for prof in values.keys():
          # Creating an empty structure
          newRow = []
          for i, col in enumerate(headers):
              try:
                  if col == "_id":
                      newRow.append(len(workingSheet))
                  else:
                      if canUnicode:
                          newRow.append(unicode(values[prof][col]))
                      else:
                          newRow.append(str(values[prof][col]))
              except UnicodeEncodeError as e:
                  # Printing that an error was found
                  newRow.append("[WARNING: Unicode Encode]")
              except:
                  # Printing that this is not applicable value
                  newRow.append("[N/A]")
          # Appending the newRow to the data structure
          workingSheet.append(newRow)
  
      # Storing the workingSheet onto the data structure to be stored
      data.update({"OSRFramework": workingSheet})
  
      return data