Форматирование и переопределение формата ячейки по умолчанию для даты и времени при записи его в лист Excel - PullRequest
0 голосов
/ 20 марта 2020

Мы собираем все данные таблицы внутри $("#dvtablerptTDetails")[0].innerHTML, содержащие все данные, которые будут сохранены в сеансе, а затем преобразованы в строку и отправлены в Response.Write(), что позже создаст файл Excel, содержащий данные типа файла xlsx

Здесь требуется переопределить формат ячейки по умолчанию при записи данных, особенно для формата даты и времени отдельной ячейки.

По умолчанию при сохранении и просмотре Формат ячейки будет в dd/mm/yyyy hh:mm Но ожидаемый формат ячейки должен быть в dd-MMM-yyyy HH:mm:ss

Поэтому попытался изменить префикс и суффикс данных с помощью точки (.) или со скоростью (@). Но он работал печать в соответствии с нашим требованием. Но не удается избежать специальных символов. Поскольку он пишет точно так, как есть.

Ниже приведены частичные фрагменты

DateTimeUtility objDTU = new DateTimeUtility();
RegisteredDate = objDTU.GetActualDateTime((DateTime)(dsTestcener.Rows[i]["TestApprovedDate"])).ToString("dd-MMM-yyyy HH:mm:ss");

public DateTime GetActualDateTime(DateTime utcDateTime)
{
    DateTime actualDateTime;
    if (HttpContext.Current.Session["UserTimeZone"] != null)
    {
        actualDateTime = utcDateTime.AddHours(Double.Parse(HttpContext.Current.Session["UserTimeZone"].ToString(), CultureInfo.InvariantCulture));
    }
    else
    {
        actualDateTime = utcDateTime;
    }
    return actualDateTime;

} 

Попытка изменить вышеуказанные данные, присвоенные RegisteredDate объекту

objDTU.GetActualDateTime((DateTime)(dsTestcener.Rows[i]["TestApprovedDate"]))
.ToString("dd-MMM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);
  • Фактические данные (html): 28 февраля 2020 г. 15: 14: 38
  • Фактические данные (xsl): 28/02/2020 15: 14
  • Ожидаемые данные (xsl): 28-февраля-2020 15: 14: 38
objDTU.GetActualDateTime((DateTime)(dsTestcener.Rows[i]["TestApprovedDate"]))
.ToString("dd-MMM-yyyy HH:mm:ss.fff", CultureInfo.InvariantCulture);
  • Фактические данные (html): 28- Фев-2020 15: 14: 38.313
  • Фактические данные (xsl): 14: 38.
  • Ожидаемые данные (xsl): 28-февраля-2020 15: 14: 38.313
objDTU.GetActualDateTime((DateTime)(dsTestcener.Rows[i]["TestApprovedDate"]))
.ToString("dd-MMM-yyyy HH:mm:ss");
  • Фактические данные (html): 28 февраля 2020 года 15: 14: 38
  • Фактические данные (xsl): 28/02 / 2020 15: 14: 38
  • Ожидаемые данные (xsl): 28 февраля 2020 г. 15: 14: 38

Приведенные ниже фрагменты кода показывают, как 1074 * данные собираются и передаются в Response.Write()

function ExportAnalysis() {
    try {
        var batchDetails = $("#displayDetails").html();
        var message = JSON.stringify({ BatchDetails: batchDetails });
        CallAjaxJSON(message, '<%=Request.ApplicationPath%>' + "/MES/TestCentre.aspx/PersistBatchDetails", OnExportBatchSuccess, OnFailure);
        var url = '<%=Context.Request.ApplicationPath%>' + '/MES/ExportToExcel.aspx?name=Analysis Response';
        window.open(url);

    } catch (e) {
    }
    return false;
}

[System.Web.Services.WebMethod()]
public static string PersistBatchDetails(object BatchDetails)
{
    try
    {
        HttpContext.Current.Session["DashboardBatchInfo"] = BatchDetails;
    }
    catch (Exception ex){}
    return "S001";
}

protected void Page_Load(object sender, EventArgs e)
{
    string fileName = "Excel";
    if (!String.IsNullOrEmpty(Request.QueryString["name"]))
        fileName = Request.QueryString["name"];
    Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".xls");
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/vnd.ms-excel";
    string BatchDetails = Convert.ToString(Session["DashboardBatchInfo"]);
    Response.Write(BatchDetails);
    Response.End();
    Session["DashboardBatchInfo"] = null;
}

Как нам нужно достичь при записи ожидаемых данных в соответствующем формате?

1 Ответ

0 голосов
/ 31 марта 2020

Наконец-то найдено решение:

[System.Web.Services.WebMethod()]
public static string PersistBatchDetails(object BatchDetails)
{
    try
    {
        string pattern = @"\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\:\d{2}|\d{2}\-[a-zA-Z]{3}\-\d{4}\s\d{2}\:\d{2}\:\d{2}";
        Regex r = new Regex(pattern);
        var res = r.Replace(BatchDetails.ToString(), new MatchEvaluator(ConvertDateFormat));
        HttpContext.Current.Session["DashboardBatchInfo"] = res;

    }
    catch (Exception ex)
    {
        BasePage objBasePage = new BasePage();
        objBasePage.Log.LogError("Page: TestActivation, Method: GetBatchesList " + ex.Message, ex);
        objBasePage = null;
        return "S002";
    }
    return "S001";
}

public static string ConvertDateFormat(Match m)
{
    var mydate = DateTime.Parse(m.Value);
    return string.Format("=\"{0}\"", mydate.ToString("yyyy-MM-dd hh:mm:ss"));
}
...