You have not changed the NumberFormat to text, you have changed it to the custom format "MM/DD/YYYY".
This will change the format to text
xlWorksheet.Cells[i, datecolm] = dt.ToString("MM/dd/yyyy");
xlWorksheet.Cells[i, datecolm].NumberFormat = "@";
However, take note of the comment from Richard MacCutchan - you should store this date as a Date not Text and use one of the standard NumberFormats for display only.
For example
xlWorksheet.Cells[i, datecolm] = dt;
xlWorksheet.Cells[i, datecolm].NumberFormat = "m/d/yyyy";
Excel should automatically change that "m/d/yyyy" to your locale display settings
EDIT after OP Comment:
Try setting the format first then adding the value i.e.
xlWorksheet.Cells[i, datecolm].NumberFormat = "@";
xlWorksheet.Cells[i, datecolm].Value = dt.ToString("MM/dd/yyyy");
If that doesn't work then put a single quote in front of the string e.g.
xlWorksheet.Cells[i, datecolm].NumberFormat = "@";
xlWorksheet.Cells[i, datecolm].Value = String.Format("'{0}", dt.ToString("MM/dd/yyyy"));
However, if you have to "convert" this to a pipe delimited file why not just write out a pipe delimited file in the first place and build it using
StringBuilder[
^], or
String.Join[
^] or
Linq[
^]?