code: def xlsx2csv(fp_xlsx, fp_csv):
      """
      Standard AE RE.
      .xlsx -> .csv
      """
      book = xlrd2.open_workbook(fp_xlsx)
      sheet = book.sheet_by_index(0)
      row = sheet.row(0)
      row = [str(r).split(":")[1][1:-1] for r in row]
      fieldnames = dict(zip(row, [1] * len(row))).keys()
      row_datas = []
  
      for idx in range(1, sheet.nrows):
          row_data = sheet.row(idx)
          process_row = []
          for r in row_data:
              temp_r = str(r).split(":")
              if temp_r[0] == "number":
                  process_row.append(temp_r[1][:-2])
              elif temp_r[0] == "text":
                  process_row.append(temp_r[1][1:-1])
          row_data = dict(zip(row, process_row))
          row_datas.append(row_data)
  
      with open(fp_csv, "w", encoding="utf-8") as f:
          writer = csv.DictWriter(f, fieldnames=fieldnames)
          writer.writeheader()
          writer.writerows(row_datas)
  
file_path: DeepKE/src/deepke/transform_data.py
imports: import csv
  import json
  import xlrd2
  import docx
label_desc: Use image node_id 2 for calling a global function with example usage: xlsx2csv(fp_xlsx, fp_csv) without return types