Excel DateTime возвращается как DBNull - PullRequest
1 голос
/ 03 апреля 2009

У меня есть код чтения файла Excel, который использует OLEDB (Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;), который работает хорошо, но я продолжаю сталкиваться с проблемой, из-за которой определенные даты возвращаются как DBNull.

В исходном документе XLS формат работающих дат (локаль en-GB):

"02/04/2009  17:00:00" // returned as a System.DateTime

И следующий стиль не работает:

"08/Jan/09 11:24 AM" // returned as DBNull

Excel знает, что это обе даты (хотя я не могу заставить их правильно стилизовать), так как дата правильно показывает дату:

=DATE(YEAR(c),MONTH(c),DAY(c))  // where c = cell reference.

Есть ли способ, без изменения автоматически сгенерированного оригинала , получить данные?


РЕДАКТИРОВАТЬ для справки, вот мой метод чтения данных (при условии, что dbAdapter уже настроен - обратите внимание, что DBNull не исходит из улова, который вообще не запускается):

    public List<List<string>> GetData(string tableName, int maxColumns)
    {
        List<List<string>> rows = new List<List<string>>();

        DataSet ExcelDataSet = new DataSet();
        dbCommand.CommandText = @"SELECT * FROM [" + tableName + "]";
        dbAdapter.Fill(ExcelDataSet);

        DataTable table = ExcelDataSet.Tables[0];

        foreach (DataRow row in table.Rows)
        {
            List<string> data = new List<string>();

            for (int column = 0; column < maxColumns; column++)
            {
                try
                {
                    data.Add(row[column].ToString());
                }
                catch (Exception)
                {
                    data.Add(null);
                }
            }

            //  Stop processing at first blank row
            if ( string.IsNullOrEmpty(data[0]) ) break;
            rows.Add(data);
        }

        return rows;
    }

1 Ответ

2 голосов
/ 03 апреля 2009

Я не знаю, будет ли это полезно или нет, но я столкнулся с проблемами с кодом OLEDB в Excel, возвращающими значения NULL, когда я ожидал данные, и почти всегда возвращался к проблеме вывода типа данных. Excel определяет тип данных столбца на основе первых x строк данных (я думаю, что x = 10, может быть неправильно). Я знаю, что вы не хотите изменять файл, но, возможно, стоит попытаться поместить стиль даты проблемы в первые 10 строк и посмотреть, не изменит ли он поведение вашего приложения.

Очевидно, что если это всё исправит, то это не решит твою проблему. Единственные исправления в этом случае, о которых я знаю, - это изменение файла (поместите что-то в первые 10 строк, что вынудит его использовать правильный тип данных). Извините, я не могу предложить лучшее решение, но, надеюсь, по крайней мере, я помогу вам выяснить, что является причиной вашей проблемы.

...