Er. Shailesh Ответов: 1

Чтение файла. xlsx на языке C#


Я пытаюсь прочитать файл. xlsx в c#, содержимое которого распределено по листу. Это не один стол.Пожалуйста, посмотрите на изображение http://i.stack.imgur.com/aaXxz.png[^].

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


Пожалуйста помочь. Спасибо.

Что я уже пробовал:

public DataSet ReadXlsx(string filepath)
{
    try
    {
        FileStream stream = File.Open(filepath, FileMode.Open, FileAccess.Read);

        //2. Reading from a OpenXml Excel file (2007 format; *.xlsx)
        IExcelDataReader excelReader2 = ExcelReaderFactory.CreateOpenXmlReader(stream);

        //...
        //4. DataSet - Create column names from first row
        excelReader2.IsFirstRowAsColumnNames = true;
        DataSet result2 = excelReader2.AsDataSet();

        return result2;
    }
    catch (Exception ex)
    {

        return null;
    }
}

Maciej Los

Что такое ExcelReaderFactory?

Er. Shailesh

Это класс из метаданных.
публичный статический класс ExcelReaderFactory
{
публичный статический CreateBinaryReader IExcelDataReader(трансляция файлового потока);
публичный статический CreateOpenXmlReader IExcelDataReader(трансляция файлового потока);
}

xszaboj

Можете ли вы привести пример документа excel?

Er. Shailesh

Как я могу предоставить этот документ ? Я не нашел никакой возможности прикрепить файл во время публикации вопроса.

1 Ответов

Рейтинг:
0

zamanipour

Вы получаете свой код от exceldatareader.codeplex.com если вы получаете этот компонент и хотите завершить свой код на основе этого компонента, вы можете продолжить так:

Теперь у вас есть свой набор данных, так что продолжайте читать его так же, как и с результатами базы данных:

            DataSet ds= ReadXlsx(filepath);

            string theOrder = ds.Tables[0].Rows[0][0].ToString();
            string theSite = ds.Tables[0].Rows[2][0].ToString();
            List<job> jobs= new List<job>();
            for (int i = 4; i < ds.Tables[0].Rows.Count; i++)
            {
                Job job=new Job();
                job.Number = ds.Tables[0].Rows[i][0];
                job.Facility = ds.Tables[0].Rows[i][1].ToString();
                job.Date = ds.Tables[0].Rows[i][2];
                job.TrackingNumber = ds.Tables[0].Rows[i][3];
                jobs.Add(job);
            }

</job></job>


Я также рекомендую вам использовать EPPlus с большими возможностями.
вы можете скачать его через NuGet:

https://www.nuget.org/packages/EPPlus[^]

Подробнее об этом читайте здесь:
Создание/чтение / редактирование отчета Advance Excel 2007/2010 на языке C#.Сеть с использованием EPPlus[^]


Er. Shailesh

@zamanipour, вы попросили меня использовать мой метод, то есть DataSet ds= ReadXlsx(filepath);
но этот метод возвращает пустой набор данных.

zamanipour

Если у вас нет ошибок и библиотеки DLL работают нормально, то:
Попробуйте удалить эту строку или изменить ее следующим образом, ваша первая строка dosnt содержит имена столбцов:
excelReader2.IsFirstRowAsColumnNames = false;