Поделиться через


Программное хранение и получение значений дат в диапазонах Excel

Вы можете хранить и извлекать значения в NamedRange элементе управления или собственном объекте диапазона Excel.

Область применения. Сведения в этом разделе относятся к проектам уровня документа и проектам надстроек VSTO для Excel. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

Если вы храните значение даты, которое попадает или после 1.1.1900 в диапазоне с помощью средств разработки Office в Visual Studio, оно хранится в формате OLE Automation (OA). Для получения значений дат OLE Automation (OA) необходимо использовать FromOADate метод. Если дата выше 1.1.1.1900, она хранится в виде строки.

Примечание.

Даты Excel отличаются от дат OLE Automation в течение первых двух месяцев 1900 года. Существуют также различия, если параметр системы даты 1904 проверка. Приведенные ниже примеры кода не устраняют эти различия.

Использование элемента управления NamedRange

  • Этот пример предназначен для настройки на уровне документа. Следующий код должен быть помещен в класс листа, а не в ThisWorkbook классе.

Хранение значения даты в именованном диапазоне

  1. Создайте элемент управления в ячейке NamedRange A1.

    Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
        this.Controls.AddNamedRange(this.get_Range("A1"), "NamedRange1");
    
  2. Задайте текущую дату в качестве значения NamedRange1.

    DateTime dt = DateTime.Now;
    NamedRange1.Value2 = dt;
    

Получение значения даты из именованного диапазона

  1. Получение значения даты из NamedRange1.

    object value = NamedRange1.Value2;
    
    if (value != null)
    {
        if (value is double)
        {
            dt = DateTime.FromOADate((double)value);
        }
        else
        {
            DateTime.TryParse((string)value, out dt);
        }
    }
    MessageBox.Show(dt.ToString());
    

Использование собственных диапазонов Excel

Хранение значения даты в собственном объекте диапазона Excel

  1. Создайте ячейку Range A1.

    Excel.Range rng = this.Application.get_Range("A1");
    
  2. Задайте текущую дату в качестве значения rng.

    DateTime dt = DateTime.Now;
    rng.Value2 = dt;
    

Получение значения даты из собственного объекта диапазона Excel

  1. Получение значения даты из rng.

    object value = rng.Value2;
    
    if (value != null)
    {
        if (value is double)
        {
            dt = DateTime.FromOADate((double)value);
        }
        else
        {
            DateTime.TryParse((string)value, out dt);
        }
    }
    System.Windows.Forms.MessageBox.Show(dt.ToString());