ошибка генерирования формата даты в epplus [duplicate]

Ну, простыми словами:

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

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

71
задан Pranav 13 April 2012 в 13:56
поделиться

7 ответов

Вам нужно преобразовать формат даты из OLE Automation в формат .net с помощью DateTime.FromOADate.

double d = double.Parse(b);
DateTime conv = DateTime.FromOADate(d);
166
ответ дан Mikael Svenson 24 August 2018 в 06:30
поделиться

Вы можете попробовать простую функцию, которую я разместил на другой теме , связанной с чтением значения даты с листа excel.

Он просто берет текст из ячейки в качестве ввода и дает DateTime как выход.

Я был бы рад увидеть улучшение в моем примере кода, предоставленном для сообщества разработчиков .NET.

Вот ссылка на поток C #, не читающий дату excel из таблицы

0
ответ дан Community 24 August 2018 в 06:30
поделиться

у меня была аналогичная ситуация, и я использовал приведенный ниже код для того, чтобы это сработало.

Aspose.Cells.LoadOptions loadOptions = new Aspose.Cells.LoadOptions(Aspose.Cells.LoadFormat.CSV);

Workbook workbook = new Workbook(fstream, loadOptions);

Worksheet worksheet = workbook.Worksheets[0];

dt = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxDisplayRange.RowCount, worksheet.Cells.MaxDisplayRange.ColumnCount, true);

DataTable dtCloned = dt.Clone();
ArrayList myAL = new ArrayList();

foreach (DataColumn column in dtCloned.Columns)
{
    if (column.DataType == Type.GetType("System.DateTime"))
    {
        column.DataType = typeof(String);
        myAL.Add(column.ColumnName);
    }
}


foreach (DataRow row in dt.Rows)
{
    dtCloned.ImportRow(row);
}



foreach (string colName in myAL)
{
    dtCloned.Columns[colName].Convert(val => DateTime.Parse(Convert.ToString(val)).ToString("MMMM dd, yyyy"));
}


/*******************************/

public static class MyExtension
{
    public static void Convert<T>(this DataColumn column, Func<object, T> conversion)
    {
        foreach (DataRow row in column.Table.Rows)
        {
            row[column] = conversion(row[column]);
        }
    }
}

Надеюсь, это поможет some1 thx_joxin

0
ответ дан joXin 24 August 2018 в 06:30
поделиться

Чтение значения Datetime из листа Excel: попробуйте, это будет работа.

string sDate = (xlRange.Cells[4, 3] as Excel.Range).Value2.ToString();

double date = double.Parse(sDate);

var dateTime = DateTime.FromOADate(date).ToString("MMMM dd, yyyy");
4
ответ дан Pranav 24 August 2018 в 06:30
поделиться

Или вы можете просто использовать OleDbDataAdapter для получения данных из Excel

0
ответ дан rsapru 24 August 2018 в 06:30
поделиться

В качестве альтернативы, если ваша ячейка уже является реальной датой, просто используйте .Value вместо .Value2:

excelApp.Range[namedRange].Value
{21/02/2013 00:00:00}
    Date: {21/02/2013 00:00:00}
    Day: 21
    DayOfWeek: Thursday
    DayOfYear: 52
    Hour: 0
    Kind: Unspecified
    Millisecond: 0
    Minute: 0
    Month: 2
    Second: 0
    Ticks: 634970016000000000
    TimeOfDay: {00:00:00}
    Year: 2013

excelApp.Range[namedRange].Value2
41326.0
0
ответ дан Thomas 24 August 2018 в 06:30
поделиться

Возможно, вы можете попробовать использовать метод DateTime.FromOADate для преобразования между Excel и .net.

10
ответ дан Tom 24 August 2018 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: