docstr: Make a file containing the experiment measurements
  
  workspace - the workspace that has the measurements
  settings_group - the settings group used to choose the experiment
                   measurements for output or None if everything
                   is to be exported
docstr_tok: ["Make","a","file","containing","the","experiment","measurements","workspace","-","the","workspace","that","has","the","measurements","settings_group","-","the","settings","group","used","to","choose","the","experiment","measurements","for","output","or","None","if","everything","is","to","be","exported"]
code: def make_experiment_file(self, workspace, settings_group=None):
      """Make a file containing the experiment measurements
  
      workspace - the workspace that has the measurements
      settings_group - the settings group used to choose the experiment
                       measurements for output or None if everything
                       is to be exported
      """
      m = workspace.measurements
      file_name = self.make_objects_file_name(
          EXPERIMENT, workspace, 1, settings_group
      )
      feature_names = [
          feature_name
          for feature_name in m.get_feature_names(EXPERIMENT)
          if feature_name != EXIT_STATUS
      ]
      if len(feature_names) == 0:
          return
      fd = open(file_name, "w", newline="")
      try:
          writer = csv.writer(fd, delimiter=self.delimiter_char)
          writer.writerow((EH_KEY, EH_VALUE))
          for feature_name in feature_names:
              v = m.get_all_measurements(EXPERIMENT, feature_name)
              if (
                  isinstance(v, numpy.ndarray)
                  and v.dtype == numpy.uint8
              ):
                  v = base64.b64encode(v.data)
              elif isinstance(v, bytes):
                  v = v.decode("unicode_escape", errors="ignore")
              else:
                  v = str(v)
              writer.writerow((feature_name, v))
      finally:
          fd.close()
  
imports: import base64
  import csv
  import logging
  import os
  import numpy
  from cellprofiler_core.constants.image import C_MD5_DIGEST, C_SCALING, C_HEIGHT, C_WIDTH
  from cellprofiler_core.constants.measurement import EXPERIMENT, IMAGE, AGG_MEAN, AGG_MEDIAN, AGG_STD_DEV, C_URL, C_PATH_NAME, C_FILE_NAME, NEIGHBORS, R_FIRST_IMAGE_NUMBER, R_SECOND_IMAGE_NUMBER, R_FIRST_OBJECT_NUMBER, R_SECOND_OBJECT_NUMBER
  from cellprofiler_core.constants.module import IO_FOLDER_CHOICE_HELP_TEXT, IO_WITH_METADATA_HELP_TEXT, USING_METADATA_HELP_REF, USING_METADATA_TAGS_REF
  from cellprofiler_core.constants.pipeline import EXIT_STATUS
  from cellprofiler_core.measurement import Measurements
  from cellprofiler_core.module import Module
  from cellprofiler_core.preferences import ABSOLUTE_FOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_INPUT_FOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_INPUT_SUBFOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_OUTPUT_FOLDER_NAME
  from cellprofiler_core.preferences import DEFAULT_OUTPUT_SUBFOLDER_NAME
  from cellprofiler_core.preferences import get_headless
  from cellprofiler_core.setting import Binary
  from cellprofiler_core.setting import Divider
  from cellprofiler_core.setting import Measurement
  from cellprofiler_core.setting import SettingsGroup
  from cellprofiler_core.setting import ValidationError
  from cellprofiler_core.setting.choice import CustomChoice, Choice
  from cellprofiler_core.setting.do_something import DoSomething, RemoveSettingButton
  from cellprofiler_core.setting.multichoice import MeasurementMultiChoice
  from cellprofiler_core.setting.subscriber import ImageSubscriber, LabelSubscriber
  from cellprofiler_core.setting.text import Directory, Text
  from cellprofiler_core.utilities.core.modules.load_data import is_file_name_feature, is_path_name_feature
  from cellprofiler_core.utilities.measurement import find_metadata_tokens, get_agg_measurement_name
  from cellprofiler.gui.help.content import MEASUREMENT_NAMING_HELP
label_desc: Use image node_id 23 for calling the ExportToSpreadsheet obj's underlying member method code with example usage: obj.make_experiment_file(workspace, settings_group) without return types