formatCellValue static method

String formatCellValue(
  1. String value,
  2. MsSsCell cell,
  3. List<SSStyle> spreadSheetStyles
)

Implementation

static String formatCellValue(String value, MsSsCell cell, List<SSStyle> spreadSheetStyles) {
  String retValue = value;
  if (cell.style != null) {
    var cellStyle = spreadSheetStyles.firstWhereOrNull((style) {
      return style.id == cell.style;
    });
    if (cellStyle != null) {
      if (cellStyle.numFormat.id.isNotEmpty) {
        switch (cellStyle.numFormat.format) {
          case 'd':
            if (int.tryParse(value) != null) {
              DateTime baseDate = DateTime(1900, 1, 1);
              DateTime dartDate;
              if (int.parse(value) <= 60) {
                // up to Feb 29 1900
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // Subtract 2 (account for Jan 1, 1900 being 2)
              } else {
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // subtract 2
              }
              retValue = DateFormat('d').format(dartDate);
            }

          case 'dd': // day of the month as a zero-padded decimal number
            if (int.tryParse(value) != null) {
              DateTime baseDate = DateTime(1900, 1, 1);
              DateTime dartDate;
              if (int.parse(value) <= 60) {
                // up to Feb 29 1900
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // Subtract 2 (account for Jan 1, 1900 being 2)
              } else {
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // subtract 2
              }
              retValue = DateFormat('dd').format(dartDate);
            }

          case 'ddd': // abbreviated weekday as text
            if (int.tryParse(value) != null) {
              DateTime baseDate = DateTime(1900, 1, 1);
              DateTime dartDate;
              if (int.parse(value) <= 60) {
                // up to Feb 29 1900
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // Subtract 2 (account for Jan 1, 1900 being 2)
              } else {
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // subtract 2
              }
              retValue = DateFormat('EEE').format(dartDate);
            }

          case 'MMMM': // month as text
            if (int.tryParse(value) != null) {
              DateTime baseDate = DateTime(1900, 1, 1);
              DateTime dartDate;
              if (int.parse(value) <= 60) {
                // up to Feb 29 1900
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // Subtract 2 (account for Jan 1, 1900 being 2)
              } else {
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // subtract 2
              }
              retValue = DateFormat('MMMM').format(dartDate);
            }

          case 'dd/MMM/YYYY': // day/month/year
            if (int.tryParse(value) != null) {
              DateTime baseDate = DateTime(1900, 1, 1);
              DateTime dartDate;
              if (int.parse(value) <= 60) {
                // up to Feb 29 1900
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // Subtract 2 (account for Jan 1, 1900 being 2)
              } else {
                dartDate = baseDate.add(Duration(days: int.parse(value) - 2)); // subtract 2
              }
              retValue = DateFormat('dd/MMM/yyyy').format(dartDate);
            }

          default:
            retValue = value; // or throw an exception
        }
      }
    }
  }
  return retValue;
}