Почему формат даты изменяется при экспорте данных в Excel? - PullRequest
0 голосов
/ 01 декабря 2019

Я работаю над окном Форма заявки. В моей форме у меня есть GridView, который имеет столбец типа Дата. Столбец даты имеет формат даты dd-MM-YYYY. Я экспортирую эти данные в Excel. Но проблема в том, что формат даты меняется в Excel.

Вот мой код при экспорте данных в Excel

    private void btnSaveDetails_Click(object sender, EventArgs e)
    {

        Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
        Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
        app.Visible = true;
        worksheet = workbook.ActiveSheet;
        for (int i = 1; i < dataGridViewDetails.Columns.Count + 1; i++)
        {
            worksheet.Cells[1, i] = dataGridViewDetails.Columns[i - 1].HeaderText;
        } 
        for (int i = 0; i < dataGridViewDetails.Rows.Count; i++)
        {
            for (int j = 0; j < dataGridViewDetails.Columns.Count; j++)
            {
                if (j == 3)
                {
                    worksheet.Cells[i + 2, j + 1] = dataGridViewDetails.Rows[i].Cells[j].Value.ToString().Split (' ')[0];

                }
                else
                {
                    worksheet.Cells[i + 2, j + 1] = dataGridViewDetails.Rows[i].Cells[j].Value.ToString();
                }
            }
        }

    }

Here is the Image of GridView

Here is Image of Excel Data after Exporting from GridView

Как вы видите в коде, я экспортирую все данные в формате String, поэтому тип ячейки Excel не должен быть проблемой. Но все же формат данных конвертируется. Что я делаю не так?

1 Ответ

1 голос
/ 01 декабря 2019

Здесь есть две очень разные вещи:

  1. Как хранится DateTime
  2. Как отображается DateTime

.NETside

.NET сохраняет DateTime как число тиков с момента начала эпохи Unix. Каждое другое свойство и строковое представление являются интерпретацией этого значения.

.NET Отображает любое числовое значение, включая DateTime, путем извлечения пользовательских настроек культуры из Windows. Это очень полезная функция, так как это одна большая часть, о которой нам обычно не нужно заботиться.

Сторона Excel

Старый формат Excel использует десятичную илизначение с плавающей запятой. Часть, предшествующая десятичному разделителю, - это числа с 0 января 1900 года. У этого также есть хорошо известная ошибка, рассматривая 1900 как Високосный год. Части после разделителя обозначают время суток. Но он все еще может иметь отдельные типы для даты и времени (они не одобряются, поскольку практически не используются на практике).

Способ отображения этих значений полностью зависит от версии Excel, в которой вы просматриваете ив настройках он установлен.

...