☝️Small business or a startup? See if you qualify for our special offer.
+

Exported Excel file does not retain custom date format (MM-dd-yyyy)

Answered
Rushi Durge asked 6 days ago

###### This is my code

const paymentDetails = async (req, res) => {
  try {
    const {
      from_date = null,
      to_date = null,
      location = "",
      provider = "",
      date_option = null,
      practice = "",
      payerType = null,
      dates = null,
      showBal = null,
      paymentMethod = null,
      batch = null,
      selectedType,
      groupBy,
      check_flag
    } = req.query || {};

    let payment_Method_Filter = paymentMethod?.value || null;

    if (location?.id) {
      // conditions.push(APSC.hospital_id = ${location?.id});
      // Location_filter = location?.id;
    }

    if (provider) {
      // conditions.push(APSC.provider_id = ${provider?.id}
);
      // Provider_filter = provider?.id;
    }

    let clickedField = null;
    let groupPayerType = null;
    if (groupBy == "Payment Method") {
      clickedField = selectedType;
    } else if (groupBy == "Payer Type") {
      groupPayerType = selectedType;
    }

    // const results = await sequelize.query(
    //   SELECT * FROM generate_payment_detail_report(
    //   :date_option::TEXT,
    //   :from_date::DATE,
    //   :to_date::DATE,
    //   :payment_method_option::TEXT,
    //   :payer_type_option::TEXT,
    //   :practice_id_option ::NUMERIC,
    //   :show_balance::TEXT,
    //   :param_batch_id::TEXT),
    //   {
    //     replacements: {
    //       date_option: dates || null,
    //       from_date: from_date || null,
    //       to_date: to_date || null,
    //       // practice_id: practice_id || null,
    //       param_batch_id: batch || null,
    //       payment_method_option:
    //         paymentMethod === "Other" || paymentMethod === "Unknown"
    //           ? paymentMethod
    //           : paymentMethod
    //           ? paymentMethod.toLowerCase()
    //           : "All",
    //       payer_type_option:
    //         payerType === "All"
    //           ? payerType
    //           : payerType
    //           ? payerType.toLowerCase()
    //           : null,
    //       show_balance: showBal || "All",
    //       practice_id_option: practice?.id || null,
    //     },
    //     type: sequelize.QueryTypes.SELECT,
    //   }
    // );

    const results = await sequelize.query(
      `SELECT * FROM payment_detail_from_summary_with_flag(
      :date_option::TEXT,      
      :from_date::DATE,        
      :to_date::DATE,
      :payment_method_option::TEXT,
      :payer_type_option::TEXT,  
      :practice_id_option ::NUMERIC,
      :show_balance::TEXT,
      :batch_option::TEXT,
      :check_flag::BOOLEAN)`,
      {
        replacements: {
          date_option: dates ? "Custom" : null,
          from_date: from_date || null,
          to_date: to_date || null,
          // practice_id: practice_id || null,
          batch_option: batch || null,
          payment_method_option: clickedField
            ? clickedField
            : paymentMethod
              ? payment_Method_Filter.toLowerCase()
              : null,
          payer_type_option: groupPayerType
            ? groupPayerType
            : payerType === "All"
              ? payerType
              : payerType
                ? payerType.toLowerCase()
                : null,
          show_balance: showBal || null,
          practice_id_option: practice?.id || null,
          check_flag: check_flag
        },
        type: sequelize.QueryTypes.SELECT,
      }
    );

    const flexMonsterData = {
      mapping: {
        payment_type: {
          type: "string",
          caption: "Payment Type",
        },
        payment_id: { type: "string", caption: "Payment ID" },
        post_date: {
          type: "date string",
          format: "MM-dd-yyyy",
          caption: "Post Date",
        },
        payer_name: {
          type: "string",
          caption: "Payer Name",
        },
        ref_number: {
          type: "string",
          caption: "Ref No.",
        },
        notes: {
          type: "string",
          caption: "Notes",
        },

        amount: {
          type: "number",
          caption: "Applied Amount",
        },
        unapplied: { type: "number", label: "Unapplied" },
        total_amount: { type: "number", label: "Total Amount" },
      },
      slice: {
        rows: [
          { uniqueName: "payer_type", caption: "Payer Type" },
          { uniqueName: "payment_method", caption: "Payment Method" },
        ],
        columns: [{ uniqueName: "[Measures]" }],
        measures: [
          {
            uniqueName: "amount",
            aggregation: "sum",
            caption: "Applied Amount",
          },
          {
            uniqueName: "unapplied",
            aggregation: "sum",
            caption: "Unapplied Amount",
          },
          {
            uniqueName: "total_amount",
            aggregation: "sum",
            caption: "Total Amount",
          },
        ],
        drillThrough: [ // 👈 Predefined visible fields in drill-through
    "payer_name",
    "payment_type",
    "payment_id",
    "payer_type",
    "payment_method",
    "post_date",
    "ref_number",
    "total_amount",
    "amount",
    "unapplied"
  ],
      },

      options: {
        viewType: "grid",
        showAggregationLabels: false,
        grid: {
          type: "compact",
          showTotals: false,
        },
        datePattern: "MM-dd-yyyy",
        showFilter: false,
        showHeaders: true,
        configuratorButton: false,
        showGrandTotals: true, // Disable grand totals
        drillThrough: true,
        drillThroughMaxRows: 1000, // Increase if needed
        formats: [
          {
            name: "",
            thousandsSeparator: ",",
            decimalSeparator: ".",
            decimalPlaces: 2,
            nullValue: "-",
          },
          {
            name: "currency",
            currencySymbol: "$",
            currencySymbolAlign: "left",
            decimalPlaces: 2,
          },
          {
            name: "date string",
            format: "MM-dd-yyyy",
            nullValue: "-",
            applyTo: "post_date",
          },
        ],
      },
    };
    const data = map(results, (row) => ({
      ...row || {},
      post_date: moment(row.post_date).format("MM-DD-YYYY"),
      amount: formatNumber(row.amount),
      unapplied: formatNumber(row.unapplied),
      total_amount: formatNumber(row.total_amount)
    }))
    const HeaderData = {
      PracticeName : practice?.practice_name || '',
      fromDate : from_date || '',
      toDate : to_date || '',
      dateType : 'Posting Date',
    }
    return res.status(200).send({ data: data, flexMonsterData ,HeaderData : HeaderData});
  } catch (error) {
    console.log(error);
    console.error("Error fetching report:", error.message);
    return res.status(500).send({ message: "Internal Server Error", Error: error.message });
  }
};

 
 
### Frontend Side

 
### Exported Excel

 
 

I’m encountering an issue with date formatting in exported Excel files using Flexmonster.

  • On the backend, I'm sending date strings in the format: MM-dd-yyyy (e.g., 07-11-2025).

  • On the Flexmonster grid (frontend), the dates are displayed correctly as MM-dd-yyyy.

  • However, when I export the grid to Excel, the dates in the Excel file appear as dd-MM-yyyy or dd/MM/yyyy, depending on the system's locale or Excel settings.

This mismatch between displayed format and exported format is causing confusion for end users.

What I’ve tried:

  • Explicitly setting the field type to "date string" in the mapping.

  • Confirming the correct format in the grid.

  • Using applyFormatting: false in the export config (no change to date format).

Expected behavior:

  • The exported Excel file should preserve the MM-dd-yyyy format as displayed in the grid.

Please let me know:

  • How can I enforce a consistent MM-dd-yyyy format in the exported Excel file?

  • Is there a setting or workaround to ensure exported date formats match the frontend view?

1 answer

Public
Nadia Khodakivska Nadia Khodakivska Flexmonster 3 days ago

Hello,

Thank you for reaching out to us.

When exporting to Excel, Flexmonster defaults the resulting date format to the one used by the user's operating system. It means that the displayed date format in the exported file is determined by the regional settings of the user's operating system and Excel configuration.

Flexmonster cannot override it directly during export since Excel and the local environment control this behavior.

Please let us know if other questions arise.

Kind regards,
Nadia

Please login or Register to Submit Answer