@Override
  public List<ConnectionProfile> readProfiles(String filename) {
    LogMgr.logInfo(
        "IniProfileStorage.readProfiles()", "Loading connection profiles from " + filename);
    WbProperties props = new WbProperties(1);
    BufferedReader reader = null;
    List<ConnectionProfile> profiles = new ArrayList<>(25);

    WbFile inifile = new WbFile(filename);

    try {
      File fileDir = inifile.getCanonicalFile().getParentFile();
      reader = new BufferedReader(new FileReader(filename));
      props.loadFromReader(reader);
      Set<String> keys = getProfileKeys(props);
      for (String key : keys) {
        ConnectionProfile profile = readProfile(fileDir, key, props);
        if (profile != null) {
          profiles.add(profile);
        }
      }
    } catch (Exception ex) {
      LogMgr.logError(
          "IniProfileStorage.readProfiles()", "Could not read profiles from: " + filename, ex);
    } finally {
      FileUtil.closeQuietely(reader);
    }
    return profiles;
  }
  @Override
  public void load() throws IOException {
    if (dataFile != null) {
      // do not load the file twice.
      return;
    }

    InputStream in = null;
    try {
      in = new FileInputStream(inputFile);
      if (useXLSX) {
        dataFile = new XSSFWorkbook(in);
      } else {
        dataFile = new HSSFWorkbook(in);
      }
    } finally {
      FileUtil.closeQuietely(in);
    }

    initActiveSheet();

    try {
      if (useXLSX) {
        XSSFFormulaEvaluator.evaluateAllFormulaCells((XSSFWorkbook) dataFile);
      } else {
        HSSFFormulaEvaluator.evaluateAllFormulaCells((HSSFWorkbook) dataFile);
      }
    } catch (Exception ex) {
      LogMgr.logError("ExcelReader.load()", "Could not refresh formulas!", ex);
    }
  }
  @Override
  public void writeFormatFile(DataExporter exporter, RowDataConverter converter) {
    WbFile baseFile = new WbFile(exporter.getFullOutputFilename());
    String dir = baseFile.getParent();

    String tableName = exporter.getTableNameToUse();
    WbFile ctl = new WbFile(dir, "load_" + tableName + ".sql");
    PrintWriter out = null;
    try {
      out = new PrintWriter(new FileWriter(ctl));
      out.print("load data infile '");
      out.print(baseFile.getFullPath());
      out.print("'\n");
      out.print("  into table ");
      out.println(tableName);

      String encoding = exporter.getEncoding();
      if (encoding != null) {
        out.print("  character set " + encoding + "\n");
      }
      String delim =
          StringUtil.escapeText(exporter.getTextDelimiter(), CharacterRange.RANGE_CONTROL);
      out.print("  columns\n");
      out.print("    terminated by '" + delim + "'\n");
      String quote = exporter.getTextQuoteChar();

      if (quote != null) {
        out.print("    ");
        if (!exporter.getQuoteAlways()) {
          out.print("optionally ");
        }
        out.print("enclosed by '" + quote + "'\n");
      }

      if (exporter.getExportHeaders()) {
        out.print("  ignore 1 lines\n");
      }
    } catch (Exception e) {
      LogMgr.logError(
          "PostgresCopyStatementWriter.writeFormatFile()", "Could not write format file", e);
    } finally {
      FileUtil.closeQuietely(out);
    }
  }